From 2d50df61c333a5645feed92dd635826a7932d600 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Mon, 17 Nov 2014 23:56:41 +0100 Subject: [PATCH 01/64] Initial structure for GTC_integer --- doc/glm.docx | Bin 1069123 -> 1069419 bytes doc/glm.pdf | Bin 1267869 -> 1239287 bytes glm/gtc/integer.hpp | 61 +++++++++++++++++++++++++++++++++++++++ glm/gtc/integer.inl | 37 ++++++++++++++++++++++++ glm/gtx/integer.inl | 2 +- readme.txt | 2 +- test/gtc/CMakeLists.txt | 1 + test/gtc/gtc_integer.cpp | 46 +++++++++++++++++++++++++++++ 8 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 glm/gtc/integer.hpp create mode 100644 glm/gtc/integer.inl create mode 100644 test/gtc/gtc_integer.cpp diff --git a/doc/glm.docx b/doc/glm.docx index c23cad5b28de818a887fc7cc05a327fc67249e41..be32bfe0f2afa113809da0635e83444deb014d3b 100644 GIT binary patch delta 61850 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�#>Oe+l~gai0`H;RLpRnlvY=rf$^YIf~9Y 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 diff --git a/doc/glm.pdf b/doc/glm.pdf index 828f88115e06523017b7f4af02fb3eb887728628..78c4850077a4ac8109a94b5c993d4418f8899378 100644 GIT binary patch delta 412950 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 z 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 z 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⪻tFMO^8?~z3mV6|Z$#n>2$VvQJq~&Y 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 z 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 rhUZsk4H8MgP* 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

    `1>CUiF1O4-$?&P$vgNK@*$in9{Zs#4zWC>e% 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%0A!#TFWtBtWJ1b%w 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 DiRB|e diff --git a/glm/gtc/integer.hpp b/glm/gtc/integer.hpp new file mode 100644 index 00000000..2c2f3cf1 --- /dev/null +++ b/glm/gtc/integer.hpp @@ -0,0 +1,61 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtc_integer +/// @file glm/gtc/integer.hpp +/// @date 2014-11-17 / 2014-11-17 +/// @author Christophe Riccio +/// +/// @see core (dependence) +/// @see gtc_integer (dependence) +/// +/// @defgroup gtc_integer GLM_GTC_integer +/// @ingroup gtc +/// +/// @brief Allow to perform bit operations on integer values +/// +/// need to be included to use these functionalities. +/////////////////////////////////////////////////////////////////////////////////// + +#pragma once + +// Dependencies +#include "../detail/setup.hpp" +#include "../detail/precision.hpp" +#include "../detail/type_int.hpp" +#include "../detail/_vectorize.hpp" +#include + +#if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) +# pragma message("GLM: GLM_GTC_integer extension included") +#endif + +namespace glm +{ + /// @addtogroup gtc_integer + /// @{ + + + /// @} +} //namespace glm + +#include "integer.inl" diff --git a/glm/gtc/integer.inl b/glm/gtc/integer.inl new file mode 100644 index 00000000..eb482a66 --- /dev/null +++ b/glm/gtc/integer.inl @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtc_integer +/// @file glm/gtc/integer.inl +/// @date 2014-11-17 / 2014-11-17 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm{ +namespace detail +{ + +}//namespace detail + + + +}//namespace glm diff --git a/glm/gtx/integer.inl b/glm/gtx/integer.inl index 6833b295..c0badfb1 100644 --- a/glm/gtx/integer.inl +++ b/glm/gtx/integer.inl @@ -67,7 +67,7 @@ namespace detail #endif } }; -}//namespace _detail +}//namespace detail // Henry Gordon Dietz: http://aggregate.org/MAGIC/ /* diff --git a/readme.txt b/readme.txt index e6bd5ba8..e21020b6 100644 --- a/readme.txt +++ b/readme.txt @@ -55,7 +55,7 @@ Features: - Added GLM_FORCE_NO_CTOR_INIT - Added 'uninitialize' to explicitly not initialize a GLM type - Added GTC_bitfield extension, promoted GTX_bit -- Added GTC_integer extension, promoted GTX_bit +- Added GTC_integer extension, promoted GTX_bit and GTX_integer - Added GTC_round extension, promoted GTX_bit - Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269 diff --git a/test/gtc/CMakeLists.txt b/test/gtc/CMakeLists.txt index 7699e9bf..224b8eb5 100644 --- a/test/gtc/CMakeLists.txt +++ b/test/gtc/CMakeLists.txt @@ -1,6 +1,7 @@ glmCreateTestGTC(gtc_bitfield) glmCreateTestGTC(gtc_constants) glmCreateTestGTC(gtc_epsilon) +glmCreateTestGTC(gtc_integer) glmCreateTestGTC(gtc_matrix_access) glmCreateTestGTC(gtc_matrix_integer) glmCreateTestGTC(gtc_matrix_inverse) diff --git a/test/gtc/gtc_integer.cpp b/test/gtc/gtc_integer.cpp new file mode 100644 index 00000000..8fff20ba --- /dev/null +++ b/test/gtc/gtc_integer.cpp @@ -0,0 +1,46 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2014-11-17 +// Updated : 2014-11-17 +// Licence : This source is under MIT licence +// File : test/gtc/integer.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include + +namespace log2_ +{ + int test() + { + int Error = 0; + + return Error; + } + + int perf() + { + int Error = 0; + + return Error; + } +}//namespace log2_ + + +int main() +{ + int Error(0); + + Error += ::log2_::test(); + +# ifdef GLM_TEST_ENABLE_PERF + Error += ::log2_::perf(); +# endif + + return Error; +} From 88894045afa526ddce3274586a42b851bb29c417 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 19 Nov 2014 00:40:45 +0100 Subject: [PATCH 02/64] Added integer log2 test --- glm/gtc/integer.hpp | 1 + test/gtc/gtc_integer.cpp | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/glm/gtc/integer.hpp b/glm/gtc/integer.hpp index 2c2f3cf1..2196d6db 100644 --- a/glm/gtc/integer.hpp +++ b/glm/gtc/integer.hpp @@ -55,6 +55,7 @@ namespace glm /// @{ + /// @} } //namespace glm diff --git a/test/gtc/gtc_integer.cpp b/test/gtc/gtc_integer.cpp index 8fff20ba..fc89504f 100644 --- a/test/gtc/gtc_integer.cpp +++ b/test/gtc/gtc_integer.cpp @@ -9,7 +9,11 @@ #include #include +#include #include +#include +#include +#include #include #include #include @@ -20,6 +24,24 @@ namespace log2_ { int Error = 0; + int A0(glm::log2(10.f)); + glm::ivec1 B0(glm::log2(glm::vec1(10.f))); + glm::ivec2 C0(glm::log2(glm::vec2(10.f))); + glm::ivec3 D0(glm::log2(glm::vec3(10.f))); + glm::ivec4 E0(glm::log2(glm::vec4(10.f))); + + int A1 = glm::log2(int(10.f)); + glm::ivec1 B1 = glm::log2(glm::ivec1(10.f)); + glm::ivec2 C1 = glm::log2(glm::ivec2(10.f)); + glm::ivec3 D1 = glm::log2(glm::ivec3(10.f)); + glm::ivec4 E1 = glm::log2(glm::ivec4(10.f)); + + Error += A0 == A1 ? 0 : 1; + Error += glm::all(glm::equal(B0, B1)) ? 0 : 1; + Error += glm::all(glm::equal(C0, C1)) ? 0 : 1; + Error += glm::all(glm::equal(D0, D1)) ? 0 : 1; + Error += glm::all(glm::equal(E0, E1)) ? 0 : 1; + return Error; } From 4f4763600f34d961b368f227a591f82e56079e30 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 19 Nov 2014 23:09:02 +0100 Subject: [PATCH 03/64] Added log2 to GTC_integer --- glm/gtc/integer.hpp | 9 ++++++--- glm/gtc/integer.inl | 16 +++++++++++++--- glm/gtx/integer.hpp | 6 +----- glm/gtx/integer.inl | 14 -------------- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/glm/gtc/integer.hpp b/glm/gtc/integer.hpp index 2196d6db..2e3ad45e 100644 --- a/glm/gtc/integer.hpp +++ b/glm/gtc/integer.hpp @@ -41,8 +41,8 @@ // Dependencies #include "../detail/setup.hpp" #include "../detail/precision.hpp" -#include "../detail/type_int.hpp" -#include "../detail/_vectorize.hpp" +#include "../detail/func_integer.hpp" +#include "../detail/func_exponential.hpp" #include #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) @@ -54,7 +54,10 @@ namespace glm /// @addtogroup gtc_integer /// @{ - + /// Returns the log2 of x. Can be reliably using to compute mipmap count from the texture size. + /// From GLM_GTC_integer extension. + template + GLM_FUNC_DECL genIUType log2(genIUType x); /// @} } //namespace glm diff --git a/glm/gtc/integer.inl b/glm/gtc/integer.inl index eb482a66..db2d7ff3 100644 --- a/glm/gtc/integer.inl +++ b/glm/gtc/integer.inl @@ -29,9 +29,19 @@ namespace glm{ namespace detail { + GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) + { + return 31u - findMSB(x); + } + template <> + struct compute_log2 + { + template + GLM_FUNC_QUALIFIER T operator() (T const & Value) const + { + return Value <= static_cast(1) ? T(0) : T(32) - nlz(Value - T(1)); + } + }; }//namespace detail - - - }//namespace glm diff --git a/glm/gtx/integer.hpp b/glm/gtx/integer.hpp index 00f1fd4a..4c6aa2bc 100644 --- a/glm/gtx/integer.hpp +++ b/glm/gtx/integer.hpp @@ -39,6 +39,7 @@ // Dependency: #include "../glm.hpp" +#include "../gtc/integer.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) # pragma message("GLM: GLM_GTX_integer extension included") @@ -57,11 +58,6 @@ namespace glm //! From GLM_GTX_integer extension. GLM_FUNC_DECL int sqrt(int x); - //! Returns the log2 of x. Can be reliably using to compute mipmap count from the texture size. - //! From GLM_GTX_integer extension. - template - GLM_FUNC_DECL genIUType log2(genIUType x); - //! Returns the floor log2 of x. //! From GLM_GTX_integer extension. GLM_FUNC_DECL unsigned int floor_log2(unsigned int x); diff --git a/glm/gtx/integer.inl b/glm/gtx/integer.inl index c0badfb1..db30dacd 100644 --- a/glm/gtx/integer.inl +++ b/glm/gtx/integer.inl @@ -53,20 +53,6 @@ namespace detail x += (x >> 16); return(x & 0x0000003f); } - - template <> - struct compute_log2 - { - template - GLM_FUNC_QUALIFIER T operator() (T const & Value) const - { -#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC)) - return Value <= static_cast(1) ? T(0) : T(32) - nlz(Value - T(1)); -#else - return T(32) - nlz(Value - T(1)); -#endif - } - }; }//namespace detail // Henry Gordon Dietz: http://aggregate.org/MAGIC/ From b0b84a3dc108f5272f96159d922818e7b0dd5541 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Fri, 21 Nov 2014 00:50:47 +0100 Subject: [PATCH 04/64] Optimized sign for vector types #271 --- glm/detail/func_common.inl | 12 ++++++++---- test/core/core_func_common.cpp | 31 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index 9c55c7a1..6d021e2b 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -156,16 +156,20 @@ namespace detail GLM_FUNC_QUALIFIER genFIType sign(genFIType x) { GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || - (std::numeric_limits::is_signed && std::numeric_limits::is_integer), "'sign' only accept signed inputs"); + std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), + "'sign' only accept signed inputs"); - return genFIType(genFIType(0) < x) - (x < genFIType(0)); + return static_cast(static_cast(0) < x) - static_cast(x < static_cast(0)); } template class vecType> GLM_FUNC_QUALIFIER vecType sign(vecType const & x) { - return detail::functor1::call(sign, x); + GLM_STATIC_ASSERT( + std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), + "'sign' only accept signed inputs"); + + return vecType(glm::lessThan(vecType(0), x)) - vecType(glm::lessThan(x, vecType(0))); } // floor diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index 83fba5f6..9dee633f 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -855,6 +855,12 @@ namespace sign int Error = 0; + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + glm::int32 Result = glm::sign(Data[i].Value); + Error += Data[i].Return == Result ? 0 : 1; + } + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { glm::int32 Result = sign_cmp(Data[i].Value); @@ -888,11 +894,36 @@ namespace sign return Error; } + int test_i32vec4() + { + type const Data[] = + { + {glm::i32vec4( 1), glm::i32vec4( 1)}, + {glm::i32vec4( 0), glm::i32vec4( 0)}, + {glm::i32vec4( 2), glm::i32vec4( 1)}, + {glm::i32vec4( 3), glm::i32vec4( 1)}, + {glm::i32vec4(-1), glm::i32vec4(-1)}, + {glm::i32vec4(-2), glm::i32vec4(-1)}, + {glm::i32vec4(-3), glm::i32vec4(-1)} + }; + + int Error = 0; + + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + glm::i32vec4 Result = glm::sign(Data[i].Value); + Error += glm::all(glm::equal(Data[i].Return, Result)) ? 0 : 1; + } + + return Error; + } + int test() { int Error = 0; Error += test_int32(); + Error += test_i32vec4(); return Error; } From afd58dcdc5200de1cc8f1f3744664a124ff6fdb2 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Fri, 21 Nov 2014 22:13:04 +0100 Subject: [PATCH 05/64] Used std features within GLM without redeclaring --- glm/detail/setup.hpp | 2 +- readme.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index d3e09a9b..4a59f971 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -773,7 +773,7 @@ namespace glm { - typedef std::size_t size_t; + using std::size_t; #if defined(GLM_FORCE_SIZE_T_LENGTH) || defined(GLM_FORCE_SIZE_FUNC) typedef size_t length_t; #else diff --git a/readme.txt b/readme.txt index fac64573..cb1428ab 100644 --- a/readme.txt +++ b/readme.txt @@ -74,6 +74,7 @@ Improvements: - Rewrited of GTX_fast_trigonometry #264 #265 - Made types trivially copyable #263 - Removed in GLM tests +- Used std features within GLM without redeclaring Fixes: - Fixed std::nextafter not supported with C++11 on Android #217 From 2e70698fad48e59fbcb48c6e6e91ce5e2a810805 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Fri, 21 Nov 2014 22:16:37 +0100 Subject: [PATCH 06/64] Optimized glm::cot #272 --- readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.txt b/readme.txt index cb1428ab..8731c40c 100644 --- a/readme.txt +++ b/readme.txt @@ -75,6 +75,7 @@ Improvements: - Made types trivially copyable #263 - Removed in GLM tests - Used std features within GLM without redeclaring +- Optimized glm::cot #272 Fixes: - Fixed std::nextafter not supported with C++11 on Android #217 From 826ce5c0d2c4b1d20eb82e8f9149c741b788eec0 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Fri, 21 Nov 2014 22:20:45 +0100 Subject: [PATCH 07/64] Fixed multiline comment warning comment #273 --- glm/detail/setup.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index 4a59f971..ffa74640 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -514,7 +514,6 @@ #define GLM_HAS_TEMPLATE_ALIASES ( \ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013))) || \ __has_feature(cxx_alias_templates)) - //((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC47)) || \ #define GLM_HAS_RANGE_FOR ( \ (GLM_LANG & GLM_LANG_CXX11_FLAG) || \ From 6f8bbecbf594c74a3c2869d7f6a3cc661eaf22fb Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Fri, 21 Nov 2014 22:49:39 +0100 Subject: [PATCH 08/64] Updated sign --- test/core/core_func_common.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index 83fba5f6..d8a24d6d 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -901,7 +901,7 @@ namespace sign { int Error = 0; - std::size_t const Count = 10000000; + std::size_t const Count = 100000000; std::vector Input, Output; Input.resize(Count); Output.resize(Count); @@ -935,11 +935,17 @@ namespace sign std::clock_t Timestamp5 = std::clock(); + for(std::size_t i = 0; i < Count; ++i) + Output[i] = glm::sign(Input[i]); + + std::clock_t Timestamp6 = std::clock(); + std::printf("sign_cmp(rand) Time %d clocks\n", static_cast(Timestamp1 - Timestamp0)); std::printf("sign_if(rand) Time %d clocks\n", static_cast(Timestamp2 - Timestamp1)); std::printf("sign_alu1(rand) Time %d clocks\n", static_cast(Timestamp3 - Timestamp2)); std::printf("sign_alu2(rand) Time %d clocks\n", static_cast(Timestamp4 - Timestamp3)); std::printf("sign_sub(rand) Time %d clocks\n", static_cast(Timestamp5 - Timestamp4)); + std::printf("glm::sign(rand) Time %d clocks\n", static_cast(Timestamp6 - Timestamp5)); return Error; } From 38161f01f81fd6cfa4e901c8fd54d6126c0ba39e Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Fri, 21 Nov 2014 23:43:48 +0100 Subject: [PATCH 09/64] Further optimized glm::sign for signed and unsigned int #271 --- glm/detail/func_common.inl | 36 ++++++++++++++++++++++++++++++++-- readme.txt | 1 + test/core/core_func_common.cpp | 2 ++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index 6d021e2b..150bdb14 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -128,6 +128,36 @@ namespace detail return a ? y : x; } }; + + template class vecType, bool isFloat = true, bool isSigned = true> + struct compute_sign + { + GLM_FUNC_QUALIFIER static vecType call(vecType const & x) + { + return vecType(glm::lessThan(vecType(0), x)) - vecType(glm::lessThan(x, vecType(0))); + } + }; + + template class vecType> + struct compute_sign + { + GLM_FUNC_QUALIFIER static vecType call(vecType const & x) + { + return glm::abs(x); + } + }; + + template class vecType> + struct compute_sign + { + GLM_FUNC_QUALIFIER static vecType call(vecType const & x) + { + T const Shift(static_cast(sizeof(T) * 8 - 1)); + vecType const y(vecType::type, P>(-x) >> typename make_unsigned::type(Shift)); + + return (x >> Shift) | y; + } + }; }//namespace detail // abs @@ -159,7 +189,7 @@ namespace detail std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), "'sign' only accept signed inputs"); - return static_cast(static_cast(0) < x) - static_cast(x < static_cast(0)); + return detail::compute_sign::is_iec559>::call(tvec1(x)).x; } template class vecType> @@ -169,7 +199,9 @@ namespace detail std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), "'sign' only accept signed inputs"); - return vecType(glm::lessThan(vecType(0), x)) - vecType(glm::lessThan(x, vecType(0))); + return detail::compute_sign::is_iec559>::call(x); + + //return vecType(glm::lessThan(vecType(0), x)) - vecType(glm::lessThan(x, vecType(0))); } // floor diff --git a/readme.txt b/readme.txt index db596fb5..26b7c1fe 100644 --- a/readme.txt +++ b/readme.txt @@ -76,6 +76,7 @@ Improvements: - Removed in GLM tests - Used std features within GLM without redeclaring - Optimized glm::cot #272 +- Optimized glm::sign #272 Fixes: - Fixed std::nextafter not supported with C++11 on Android #217 diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index eea1e61e..3ed22cc1 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -844,6 +844,8 @@ namespace sign { type const Data[] = { + { std::numeric_limits::max(), 1}, + { std::numeric_limits::min(), -1}, { 0, 0}, { 1, 1}, { 2, 1}, From 582ea579a3ebfc7e00bd51dcc45f997eb2383c91 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 22 Nov 2014 00:03:39 +0100 Subject: [PATCH 10/64] Fixed sign for unsigned types #271 --- glm/detail/func_common.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index 150bdb14..7ac80ba4 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -143,7 +143,7 @@ namespace detail { GLM_FUNC_QUALIFIER static vecType call(vecType const & x) { - return glm::abs(x); + return vecType(glm::greaterThan(x , vecType(0))); } }; From 20bdab33dd72d753f2243899d1a8ff19719bdb51 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 22 Nov 2014 00:37:08 +0100 Subject: [PATCH 11/64] Branch free refract and reflect --- glm/detail/func_common.inl | 82 +++++++++++++++++++---------------- glm/detail/func_geometric.inl | 18 +++----- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index 7ac80ba4..c26c0b51 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -200,8 +200,6 @@ namespace detail "'sign' only accept signed inputs"); return detail::compute_sign::is_iec559>::call(x); - - //return vecType(glm::lessThan(vecType(0), x)) - vecType(glm::lessThan(x, vecType(0))); } // floor @@ -506,7 +504,7 @@ namespace detail { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'smoothstep' only accept floating-point inputs"); - genType tmp = clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)); + genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1))); return tmp * tmp * (genType(3) - genType(2) * tmp); } @@ -515,7 +513,7 @@ namespace detail { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'smoothstep' only accept floating-point inputs"); - vecType tmp = clamp((x - edge0) / (edge1 - edge0), static_cast(0), static_cast(1)); + vecType const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast(0), static_cast(1))); return tmp * tmp * (static_cast(3) - static_cast(2) * tmp); } @@ -524,32 +522,36 @@ namespace detail { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'smoothstep' only accept floating-point inputs"); - vecType tmp = clamp((x - edge0) / (edge1 - edge0), static_cast(0), static_cast(1)); + vecType const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast(0), static_cast(1))); return tmp * tmp * (static_cast(3) - static_cast(2) * tmp); } // TODO: Not working on MinGW... - template - GLM_FUNC_QUALIFIER bool isnan(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); +# if GLM_HAS_CXX11_STL + usign std::isnan; +# else + template + GLM_FUNC_QUALIFIER bool isnan(genType x) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); -# if GLM_LANG & GLM_LANG_CXX11_FLAG - return std::isnan(x); -# elif GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL) - return _isnan(x) != 0; -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) -# if GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L +# if GLM_LANG & GLM_LANG_CXX11_FLAG + return std::isnan(x); +# elif GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL) return _isnan(x) != 0; +# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) +# if GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L + return _isnan(x) != 0; +# else + return std::isnan(x); +# endif +# elif GLM_COMPILER & GLM_COMPILER_CUDA + return isnan(x) != 0; # else return std::isnan(x); # endif -# elif GLM_COMPILER & GLM_COMPILER_CUDA - return isnan(x) != 0; -# else - return std::isnan(x); -# endif - } + } +# endif template class vecType> GLM_FUNC_QUALIFIER vecType isnan(vecType const & x) @@ -559,28 +561,32 @@ namespace detail return detail::functor1::call(isnan, x); } - template - GLM_FUNC_QUALIFIER bool isinf(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); +# if GLM_HAS_CXX11_STL + using std::isinf; +# else + template + GLM_FUNC_QUALIFIER bool isinf(genType x) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); -# if(GLM_LANG & GLM_LANG_CXX11_FLAG) - return std::isinf(x); -# elif(GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)) - return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; -# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L) - return _isinf(x) != 0; +# if(GLM_LANG & GLM_LANG_CXX11_FLAG) + return std::isinf(x); +# elif(GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)) + return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; +# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) +# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L) + return _isinf(x) != 0; +# else + return std::isinf(x); +# endif +# elif(GLM_COMPILER & GLM_COMPILER_CUDA) + // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab + return isinf(double(x)) != 0; # else return std::isinf(x); # endif -# elif(GLM_COMPILER & GLM_COMPILER_CUDA) - // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab - return isinf(double(x)) != 0; -# else - return std::isinf(x); -# endif } +# endif template class vecType> GLM_FUNC_QUALIFIER vecType isinf(vecType const & x) diff --git a/glm/detail/func_geometric.inl b/glm/detail/func_geometric.inl index 462c2d26..3da09f63 100644 --- a/glm/detail/func_geometric.inl +++ b/glm/detail/func_geometric.inl @@ -174,12 +174,9 @@ namespace detail { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' only accept floating-point inputs"); - genType dotValue = dot(N, I); - genType k = static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue); - if(k < static_cast(0)) - return static_cast(0); - else - return eta * I - (eta * dotValue + sqrt(k)) * N; + genType const dotValue(dot(N, I)); + genType const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); + return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast(k >= static_cast(0)); } template class vecType> @@ -187,11 +184,8 @@ namespace detail { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' only accept floating-point inputs"); - T dotValue = dot(N, I); - T k = static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue); - if(k < static_cast(0)) - return vecType(0); - else - return eta * I - (eta * dotValue + std::sqrt(k)) * N; + T const dotValue(dot(N, I)); + T const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); + return (eta * I - (eta * dotValue + std::sqrt(k)) * N) * static_cast(k >= static_cast(0)); } }//namespace glm From 0bffce4f4bbe039393371e49f25105bfaffa2f63 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 22 Nov 2014 20:14:48 +0100 Subject: [PATCH 12/64] Optimized findMSB and findLSB --- glm/detail/func_integer.inl | 197 +++++---- readme.txt | 6 +- test/core/CMakeLists.txt | 1 + test/core/core_func_integer.cpp | 440 +++++++++++++------ test/core/core_func_integer_find_lsb.cpp | 530 +++++++++++------------ test/core/core_func_integer_find_msb.cpp | 447 +++++++++++++++++++ 6 files changed, 1127 insertions(+), 494 deletions(-) create mode 100644 test/core/core_func_integer_find_msb.cpp diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index 81b5d5af..ae455a83 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -87,6 +87,117 @@ namespace detail return (v & Mask) + ((v >> Shift) & Mask); } }; + + template + struct compute_findLSB + { + GLM_FUNC_QUALIFIER static int call(genIUType Value) + { + if(Value == 0) + return -1; + + return glm::bitCount(~Value & (Value - static_cast(1))); + } + }; + +# if (GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) + + template + struct compute_findLSB + { + GLM_FUNC_QUALIFIER static int call(genIUType Value) + { + unsigned long Result(0); + unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast(&Value)); + return IsNotNull ? int(Result) : -1; + } + }; + + template + struct compute_findLSB + { + GLM_FUNC_QUALIFIER static int call(genIUType Value) + { + unsigned long Result(0); + unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast(&Value)); + return IsNotNull ? int(Result) : -1; + } + }; + +# endif + + template class vecType, bool EXEC = true> + struct compute_findMSB_step_vec + { + GLM_FUNC_QUALIFIER static vecType call(vecType const & x, T Shift) + { + return x | (x >> Shift); + } + }; + + template class vecType> + struct compute_findMSB_step_vec + { + GLM_FUNC_QUALIFIER static vecType call(vecType const & x, T) + { + return x; + } + }; + + template class vecType, std::size_t> + struct compute_findMSB_vec + { + GLM_FUNC_QUALIFIER static vecType call(vecType const & vec) + { + vecType x(vec); + x = compute_findMSB_step_vec= 8>::call(x, static_cast( 1)); + x = compute_findMSB_step_vec= 8>::call(x, static_cast( 2)); + x = compute_findMSB_step_vec= 8>::call(x, static_cast( 4)); + x = compute_findMSB_step_vec= 16>::call(x, static_cast( 8)); + x = compute_findMSB_step_vec= 32>::call(x, static_cast(16)); + x = compute_findMSB_step_vec= 64>::call(x, static_cast(32)); + return vecType(sizeof(T) * 8 - 1) - glm::bitCount(~x); + } + }; + +# if (GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) + + template + GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) + { + unsigned long Result(0); + unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast(&Value)); + return IsNotNull ? int(Result) : -1; + } + + template + GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) + { + unsigned long Result(0); + unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast(&Value)); + return IsNotNull ? int(Result) : -1; + } + + template class vecType> + struct compute_findMSB_vec + { + GLM_FUNC_QUALIFIER static int call(vecType const & x) + { + return detail::functor1::call(compute_findMSB_32, x); + } + }; + + template class vecType> + struct compute_findMSB_vec + { + GLM_FUNC_QUALIFIER static int call(vecType const & x) + { + return detail::functor1::call(compute_findMSB_64, x); + } + }; + +# endif + }//namespace detail // uaddCarry @@ -248,12 +359,8 @@ namespace detail GLM_FUNC_QUALIFIER int findLSB(genIUType Value) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - if(Value == 0) - return -1; - genIUType Bit; - for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){} - return Bit; + return detail::compute_findLSB::call(Value); } template class vecType> @@ -265,89 +372,19 @@ namespace detail } // findMSB -#if (GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_VC) - template - GLM_FUNC_QUALIFIER int findMSB(genIUType Value) + GLM_FUNC_QUALIFIER int findMSB(genIUType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - if(Value == 0) - return -1; - unsigned long Result(0); - _BitScanReverse(&Result, Value); - return int(Result); + return findMSB(tvec1(x)).x; } -/* -// __builtin_clz seems to be buggy as it crasks for some values, from 0x00200000 to 80000000 -#elif((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC40)) - - template - GLM_FUNC_QUALIFIER int findMSB - ( - genIUType const & Value - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - if(Value == 0) - return -1; - - // clz returns the number or trailing 0-bits; see - // http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Other-Builtins.html - // - // NoteBecause __builtin_clz only works for unsigned ints, this - // implementation will not work for 64-bit integers. - // - return 31 - __builtin_clzl(Value); - } -*/ -#else - -/* SSE implementation idea - - __m128i const Zero = _mm_set_epi32( 0, 0, 0, 0); - __m128i const One = _mm_set_epi32( 1, 1, 1, 1); - __m128i Bit = _mm_set_epi32(-1, -1, -1, -1); - __m128i Tmp = _mm_set_epi32(Value, Value, Value, Value); - __m128i Mmi = Zero; - for(int i = 0; i < 32; ++i) - { - __m128i Shilt = _mm_and_si128(_mm_cmpgt_epi32(Tmp, One), One); - Tmp = _mm_srai_epi32(Tmp, One); - Bit = _mm_add_epi32(Bit, _mm_and_si128(Shilt, i)); - Mmi = _mm_and_si128(Mmi, One); - } - return Bit; -*/ - - template - GLM_FUNC_QUALIFIER int findMSB(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - - if(Value == genIUType(0) || Value == genIUType(-1)) - return -1; - else if(Value > 0) - { - genIUType Bit = genIUType(-1); - for(genIUType tmp = Value; tmp > 0; tmp >>= 1, ++Bit){} - return Bit; - } - else //if(Value < 0) - { - int const BitCount(sizeof(genIUType) * 8); - int MostSignificantBit(-1); - for(int BitIndex(0); BitIndex < BitCount; ++BitIndex) - MostSignificantBit = (Value & (1 << BitIndex)) ? MostSignificantBit : BitIndex; - assert(MostSignificantBit >= 0); - return MostSignificantBit; - } - } -#endif//(GLM_COMPILER) template class vecType> GLM_FUNC_QUALIFIER vecType findMSB(vecType const & x) { - return detail::functor1::call(findMSB, x); + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + + return detail::compute_findMSB_vec::call(x); } }//namespace glm diff --git a/readme.txt b/readme.txt index 26b7c1fe..62cd12a2 100644 --- a/readme.txt +++ b/readme.txt @@ -67,16 +67,16 @@ Improvements: - Undetected C++ compiler automatically compile with GLM_FORCE_CXX98 and GLM_FORCE_PURE - Added not function (from GLSL specification) on VC12 -- Optimized bitfield operations - Optimized bitfieldReverse and bitCount functions +- Optimized findLSB and findMSB functions. - Optimized matrix-vector multiple performance with Cuda #257, #258 - Reduced integer type redifinitions #233 - Rewrited of GTX_fast_trigonometry #264 #265 - Made types trivially copyable #263 - Removed in GLM tests - Used std features within GLM without redeclaring -- Optimized glm::cot #272 -- Optimized glm::sign #272 +- Optimized cot function #272 +- Optimized sign function #272 Fixes: - Fixed std::nextafter not supported with C++11 on Android #217 diff --git a/test/core/CMakeLists.txt b/test/core/CMakeLists.txt index e986841b..c7314b1d 100644 --- a/test/core/CMakeLists.txt +++ b/test/core/CMakeLists.txt @@ -22,6 +22,7 @@ glmCreateTestGTC(core_func_geometric) glmCreateTestGTC(core_func_integer) glmCreateTestGTC(core_func_integer_bit_count) glmCreateTestGTC(core_func_integer_find_lsb) +glmCreateTestGTC(core_func_integer_find_msb) glmCreateTestGTC(core_func_matrix) glmCreateTestGTC(core_func_noise) glmCreateTestGTC(core_func_packing) diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index 66825b18..21b7a5e6 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -8,6 +8,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// #include +#include #include #include #include @@ -555,6 +556,19 @@ namespace findMSB genType Return; }; + template + GLM_FUNC_QUALIFIER int findMSB_intrinsic(genIUType Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + + if(Value == 0) + return -1; + + unsigned long Result(0); + _BitScanReverse(&Result, Value); + return int(Result); + } + template GLM_FUNC_QUALIFIER int findMSB_095(genIUType Value) { @@ -583,27 +597,17 @@ namespace findMSB GLM_FUNC_QUALIFIER int findMSB_nlz1(genIUType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); -/* - int Result = 0; - for(std::size_t i = 0, n = sizeof(genIUType) * 8; i < n; ++i) - Result = Value & static_cast(1 << i) ? static_cast(i) : Result; - return Result; -*/ -/* - genIUType Bit = genIUType(-1); - for(genIUType tmp = Value; tmp > 0; tmp >>= 1, ++Bit){} - return Bit; -*/ - int n; - if (x == 0) return(32); - n = 0; + if (x == 0) + return -1; + + int n = 0; if (x <= 0x0000FFFF) {n = n +16; x = x <<16;} if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;} if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;} if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;} if (x <= 0x7FFFFFFF) {n = n + 1;} - return n; + return 31 - n; } int findMSB_nlz2(unsigned int x) @@ -617,69 +621,20 @@ namespace findMSB y = x >> 4; if (y != 0) {n = n - 4; x = y;} y = x >> 2; if (y != 0) {n = n - 2; x = y;} y = x >> 1; if (y != 0) return n - 2; - return n - x; + return 32 - (n - x); } - int perf_950() + int findMSB_pop(unsigned int x) { - type const Data[] = - { - //{0x00000000, -1}, - {0x00000001, 0}, - {0x00000002, 1}, - {0x00000003, 1}, - {0x00000004, 2}, - {0x00000005, 2}, - {0x00000007, 2}, - {0x00000008, 3}, - {0x00000010, 4}, - {0x00000020, 5}, - {0x00000040, 6}, - {0x00000080, 7}, - {0x00000100, 8}, - {0x00000200, 9}, - {0x00000400, 10}, - {0x00000800, 11}, - {0x00001000, 12}, - {0x00002000, 13}, - {0x00004000, 14}, - {0x00008000, 15}, - {0x00010000, 16}, - {0x00020000, 17}, - {0x00040000, 18}, - {0x00080000, 19}, - {0x00100000, 20}, - {0x00200000, 21}, - {0x00400000, 22}, - {0x00800000, 23}, - {0x01000000, 24}, - {0x02000000, 25}, - {0x04000000, 26}, - {0x08000000, 27}, - {0x10000000, 28}, - {0x20000000, 29}, - {0x40000000, 30} - }; - - int Error(0); - - std::clock_t Timestamps1 = std::clock(); - - for(std::size_t k = 0; k < 1000000; ++k) - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) - { - int Result = findMSB_095(Data[i].Value); - Error += Data[i].Return == Result ? 0 : 1; - } - - std::clock_t Timestamps2 = std::clock(); - - std::printf("findMSB - 0.9.5: %d clocks\n", static_cast(Timestamps2 - Timestamps1)); - - return Error; + x = x | (x >> 1); + x = x | (x >> 2); + x = x | (x >> 4); + x = x | (x >> 8); + x = x | (x >>16); + return 31 - glm::bitCount(~x); } - int perf_ops() + int perf_int() { type const Data[] = { @@ -721,10 +676,20 @@ namespace findMSB }; int Error(0); + std::size_t const Count(1000000); + + std::clock_t Timestamps0 = std::clock(); + + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result = glm::findMSB(Data[i].Value); + Error += Data[i].Return == Result ? 0 : 1; + } std::clock_t Timestamps1 = std::clock(); - for(std::size_t k = 0; k < 1000000; ++k) + for(std::size_t k = 0; k < Count; ++k) for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { int Result = findMSB_nlz1(Data[i].Value); @@ -733,70 +698,109 @@ namespace findMSB std::clock_t Timestamps2 = std::clock(); + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result = findMSB_nlz2(Data[i].Value); + Error += Data[i].Return == Result ? 0 : 1; + } + + std::clock_t Timestamps3 = std::clock(); + + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result = findMSB_095(Data[i].Value); + Error += Data[i].Return == Result ? 0 : 1; + } + + std::clock_t Timestamps4 = std::clock(); + + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result = findMSB_intrinsic(Data[i].Value); + Error += Data[i].Return == Result ? 0 : 1; + } + + std::clock_t Timestamps5 = std::clock(); + + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result = findMSB_pop(Data[i].Value); + Error += Data[i].Return == Result ? 0 : 1; + } + + std::clock_t Timestamps6 = std::clock(); + + std::printf("glm::findMSB: %d clocks\n", static_cast(Timestamps1 - Timestamps0)); std::printf("findMSB - nlz1: %d clocks\n", static_cast(Timestamps2 - Timestamps1)); + std::printf("findMSB - nlz2: %d clocks\n", static_cast(Timestamps3 - Timestamps2)); + std::printf("findMSB - 0.9.5: %d clocks\n", static_cast(Timestamps4 - Timestamps3)); + std::printf("findMSB - intrinsics: %d clocks\n", static_cast(Timestamps5 - Timestamps4)); + std::printf("findMSB - pop: %d clocks\n", static_cast(Timestamps6 - Timestamps5)); return Error; } - - int test_findMSB() + int test_ivec4() { - type const Data[] = + type const Data[] = { - //{0x00000000, -1}, - {0x00000001, 0}, - {0x00000002, 1}, - {0x00000003, 1}, - {0x00000004, 2}, - {0x00000005, 2}, - {0x00000007, 2}, - {0x00000008, 3}, - {0x00000010, 4}, - {0x00000020, 5}, - {0x00000040, 6}, - {0x00000080, 7}, - {0x00000100, 8}, - {0x00000200, 9}, - {0x00000400, 10}, - {0x00000800, 11}, - {0x00001000, 12}, - {0x00002000, 13}, - {0x00004000, 14}, - {0x00008000, 15}, - {0x00010000, 16}, - {0x00020000, 17}, - {0x00040000, 18}, - {0x00080000, 19}, - {0x00100000, 20}, - {0x00200000, 21}, - {0x00400000, 22}, - {0x00800000, 23}, - {0x01000000, 24}, - {0x02000000, 25}, - {0x04000000, 26}, - {0x08000000, 27}, - {0x10000000, 28}, - {0x20000000, 29}, - {0x40000000, 30} + {glm::ivec4(0x00000000), glm::ivec4(-1)}, + {glm::ivec4(0x00000001), glm::ivec4( 0)}, + {glm::ivec4(0x00000002), glm::ivec4( 1)}, + {glm::ivec4(0x00000003), glm::ivec4( 1)}, + {glm::ivec4(0x00000004), glm::ivec4( 2)}, + {glm::ivec4(0x00000005), glm::ivec4( 2)}, + {glm::ivec4(0x00000007), glm::ivec4( 2)}, + {glm::ivec4(0x00000008), glm::ivec4( 3)}, + {glm::ivec4(0x00000010), glm::ivec4( 4)}, + {glm::ivec4(0x00000020), glm::ivec4( 5)}, + {glm::ivec4(0x00000040), glm::ivec4( 6)}, + {glm::ivec4(0x00000080), glm::ivec4( 7)}, + {glm::ivec4(0x00000100), glm::ivec4( 8)}, + {glm::ivec4(0x00000200), glm::ivec4( 9)}, + {glm::ivec4(0x00000400), glm::ivec4(10)}, + {glm::ivec4(0x00000800), glm::ivec4(11)}, + {glm::ivec4(0x00001000), glm::ivec4(12)}, + {glm::ivec4(0x00002000), glm::ivec4(13)}, + {glm::ivec4(0x00004000), glm::ivec4(14)}, + {glm::ivec4(0x00008000), glm::ivec4(15)}, + {glm::ivec4(0x00010000), glm::ivec4(16)}, + {glm::ivec4(0x00020000), glm::ivec4(17)}, + {glm::ivec4(0x00040000), glm::ivec4(18)}, + {glm::ivec4(0x00080000), glm::ivec4(19)}, + {glm::ivec4(0x00100000), glm::ivec4(20)}, + {glm::ivec4(0x00200000), glm::ivec4(21)}, + {glm::ivec4(0x00400000), glm::ivec4(22)}, + {glm::ivec4(0x00800000), glm::ivec4(23)}, + {glm::ivec4(0x01000000), glm::ivec4(24)}, + {glm::ivec4(0x02000000), glm::ivec4(25)}, + {glm::ivec4(0x04000000), glm::ivec4(26)}, + {glm::ivec4(0x08000000), glm::ivec4(27)}, + {glm::ivec4(0x10000000), glm::ivec4(28)}, + {glm::ivec4(0x20000000), glm::ivec4(29)}, + {glm::ivec4(0x40000000), glm::ivec4(30)} }; int Error(0); - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { - int Result = glm::findMSB(Data[i].Value); - Error += Data[i].Return == Result ? 0 : 1; - assert(!Error); + glm::ivec4 Result0 = glm::findMSB(Data[i].Value); + Error += glm::all(glm::equal(Data[i].Return, Result0)) ? 0 : 1; } return Error; } - int test_nlz1() + int test_int() { type const Data[] = { - //{0x00000000, -1}, + {0x00000000, -1}, {0x00000001, 0}, {0x00000002, 1}, {0x00000003, 1}, @@ -837,8 +841,38 @@ namespace findMSB for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { - int Result = findMSB_nlz2(Data[i].Value); - Error += Data[i].Return == Result ? 0 : 1; + int Result0 = glm::findMSB(Data[i].Value); + Error += Data[i].Return == Result0 ? 0 : 1; + } + + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result0 = findMSB_nlz1(Data[i].Value); + Error += Data[i].Return == Result0 ? 0 : 1; + } +/* + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result0 = findMSB_nlz2(Data[i].Value); + Error += Data[i].Return == Result0 ? 0 : 1; + } +*/ + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result0 = findMSB_095(Data[i].Value); + Error += Data[i].Return == Result0 ? 0 : 1; + } + + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result0 = findMSB_intrinsic(Data[i].Value); + Error += Data[i].Return == Result0 ? 0 : 1; + } + + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result0 = findMSB_pop(Data[i].Value); + Error += Data[i].Return == Result0 ? 0 : 1; } return Error; @@ -848,8 +882,8 @@ namespace findMSB { int Error(0); - Error += test_findMSB(); - //Error += test_nlz1(); + Error += test_ivec4(); + Error += test_int(); return Error; } @@ -858,8 +892,7 @@ namespace findMSB { int Error(0); - Error += perf_950(); - //Error += perf_ops(); + Error += perf_int(); return Error; } @@ -878,10 +911,60 @@ namespace findLSB { {0x00000001, 0}, {0x00000003, 0}, - {0x00000002, 1} + {0x00000002, 1}, + {0x80000000, 31}, + {0x00010000, 16}, + {0xFFFF0000, 16}, + {0xFF000000, 24}, + {0xFF00FF00, 8}, + {0x00000000, -1} }; - int test() + template + GLM_FUNC_QUALIFIER int findLSB_intrinsic(genIUType Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); + + if(Value == 0) + return -1; + + unsigned long Result(0); + _BitScanForward(&Result, Value); + return int(Result); + } + + template + GLM_FUNC_QUALIFIER int findLSB_095(genIUType Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); + if(Value == 0) + return -1; + + genIUType Bit; + for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){} + return Bit; + } + + template + GLM_FUNC_QUALIFIER int findLSB_ntz2(genIUType x) + { + if(x == 0) + return -1; + + return glm::bitCount(~x & (x - static_cast(1))); + } + + template + GLM_FUNC_QUALIFIER int findLSB_branchfree(genIUType x) + { + bool IsNull(x == 0); + int const Keep(!IsNull); + int const Discard(IsNull); + + return static_cast(glm::bitCount(~x & (x - static_cast(1)))) * Keep + Discard * -1; + } + + int test_int() { int Error(0); @@ -889,9 +972,111 @@ namespace findLSB { int Result = glm::findLSB(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; - assert(!Error); } + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_095(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } + + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_intrinsic(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } + + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_ntz2(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } + + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_branchfree(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } + + return Error; + } + + int test() + { + int Error(0); + + Error += test_int(); + + return Error; + } + + int perf_int() + { + int Error(0); + std::size_t const Count(10000000); + + std::clock_t Timestamps0 = std::clock(); + + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = glm::findLSB(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } + + std::clock_t Timestamps1 = std::clock(); + + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_095(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } + + std::clock_t Timestamps2 = std::clock(); + + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_intrinsic(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } + + std::clock_t Timestamps3 = std::clock(); + + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_ntz2(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } + + std::clock_t Timestamps4 = std::clock(); + + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_branchfree(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } + + std::clock_t Timestamps5 = std::clock(); + + std::printf("glm::findLSB: %d clocks\n", static_cast(Timestamps1 - Timestamps0)); + std::printf("findLSB - 0.9.5: %d clocks\n", static_cast(Timestamps2 - Timestamps1)); + std::printf("findLSB - intrinsics: %d clocks\n", static_cast(Timestamps3 - Timestamps2)); + std::printf("findLSB - ntz2: %d clocks\n", static_cast(Timestamps4 - Timestamps3)); + std::printf("findLSB - branchfree: %d clocks\n", static_cast(Timestamps5 - Timestamps4)); + + return Error; + } + + int perf() + { + int Error(0); + + Error += perf_int(); + return Error; } }//findLSB @@ -1324,6 +1509,7 @@ int main() Error += ::bitCount::perf(); Error += ::bitfieldReverse::perf(); Error += ::findMSB::perf(); + Error += ::findLSB::perf(); # endif return Error; diff --git a/test/core/core_func_integer_find_lsb.cpp b/test/core/core_func_integer_find_lsb.cpp index 21dd124a..89b420a5 100644 --- a/test/core/core_func_integer_find_lsb.cpp +++ b/test/core/core_func_integer_find_lsb.cpp @@ -7,123 +7,14 @@ // File : test/core/func_integer_find_lsb.cpp /////////////////////////////////////////////////////////////////////////////////////////////////// -// This has the programs for computing the number of leading zeros +// This has the programs for computing the number of trailing zeros // in a word. // Max line length is 57, to fit in hacker.book. -// Compile with g++, not gcc. #include -#include // To define "exit", req'd by XLC. +#include //To define "exit", req'd by XLC. #include -#define LE 1 // 1 for little-endian, 0 for big-endian. - -int pop(unsigned x) { - x = x - ((x >> 1) & 0x55555555); - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x = (x + (x >> 4)) & 0x0F0F0F0F; - x = x + (x << 8); - x = x + (x << 16); - return x >> 24; -} - -int nlz1(unsigned x) { - int n; - - if (x == 0) return(32); - n = 0; - if (x <= 0x0000FFFF) {n = n +16; x = x <<16;} - if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;} - if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;} - if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;} - if (x <= 0x7FFFFFFF) {n = n + 1;} - return n; -} - -int nlz1a(unsigned x) { - int n; - -/* if (x == 0) return(32); */ - if ((int)x <= 0) return (~x >> 26) & 32; - n = 1; - if ((x >> 16) == 0) {n = n +16; x = x <<16;} - if ((x >> 24) == 0) {n = n + 8; x = x << 8;} - if ((x >> 28) == 0) {n = n + 4; x = x << 4;} - if ((x >> 30) == 0) {n = n + 2; x = x << 2;} - n = n - (x >> 31); - return n; -} -// On basic Risc, 12 to 20 instructions. - -int nlz2(unsigned x) { - unsigned y; - int n; - - n = 32; - y = x >>16; if (y != 0) {n = n -16; x = y;} - y = x >> 8; if (y != 0) {n = n - 8; x = y;} - y = x >> 4; if (y != 0) {n = n - 4; x = y;} - y = x >> 2; if (y != 0) {n = n - 2; x = y;} - y = x >> 1; if (y != 0) return n - 2; - return n - x; -} - -// As above but coded as a loop for compactness: -// 23 to 33 basic Risc instructions. -int nlz2a(unsigned x) { - unsigned y; - int n, c; - - n = 32; - c = 16; - do { - y = x >> c; if (y != 0) {n = n - c; x = y;} - c = c >> 1; - } while (c != 0); - return n - x; -} - -int nlz3(int x) { - int y, n; - - n = 0; - y = x; -L: if (x < 0) return n; - if (y == 0) return 32 - n; - n = n + 1; - x = x << 1; - y = y >> 1; - goto L; -} - -int nlz4(unsigned x) { - int y, m, n; - - y = -(x >> 16); // If left half of x is 0, - m = (y >> 16) & 16; // set n = 16. If left half - n = 16 - m; // is nonzero, set n = 0 and - x = x >> m; // shift x right 16. - // Now x is of the form 0000xxxx. - y = x - 0x100; // If positions 8-15 are 0, - m = (y >> 16) & 8; // add 8 to n and shift x left 8. - n = n + m; - x = x << m; - - y = x - 0x1000; // If positions 12-15 are 0, - m = (y >> 16) & 4; // add 4 to n and shift x left 4. - n = n + m; - x = x << m; - - y = x - 0x4000; // If positions 14-15 are 0, - m = (y >> 16) & 2; // add 2 to n and shift x left 2. - n = n + m; - x = x << m; - - y = x >> 14; // Set y = 0, 1, 2, or 3. - m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp. - return n + 2 - m; -} - -int nlz5(unsigned x) { +int nlz(unsigned x) { int pop(unsigned x); x = x | (x >> 1); @@ -134,172 +25,239 @@ int nlz5(unsigned x) { return pop(~x); } -/* The four programs below are not valid ANSI C programs. This is -because they refer to the same storage locations as two different types. -However, they work with xlc/AIX, gcc/AIX, and gcc/NT. If you try to -code them more compactly by declaring a variable xx to be "double," and -then using +int pop(unsigned x) { + x = x - ((x >> 1) & 0x55555555); + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x = (x + (x >> 4)) & 0x0F0F0F0F; + x = x + (x << 8); + x = x + (x << 16); + return x >> 24; +} - n = 1054 - (*((unsigned *)&xx + LE) >> 20); +int ntz1(unsigned x) { + return 32 - nlz(~x & (x-1)); +} -then you are violating not only the rule above, but also the ANSI C -rule that pointer arithmetic can be performed only on pointers to -array elements. - When coded with the above statement, the program fails with xlc, -gcc/AIX, and gcc/NT, at some optimization levels. - BTW, these programs use the "anonymous union" feature of C++, not -available in C. */ +int ntz2(unsigned x) { + return pop(~x & (x - 1)); +} -int nlz6(unsigned k) { - union { - unsigned asInt[2]; - double asDouble; - }; +int ntz3(unsigned x) { int n; - asDouble = (double)k + 0.5; - n = 1054 - (asInt[LE] >> 20); + if (x == 0) return(32); + n = 1; + if ((x & 0x0000FFFF) == 0) {n = n +16; x = x >>16;} + if ((x & 0x000000FF) == 0) {n = n + 8; x = x >> 8;} + if ((x & 0x0000000F) == 0) {n = n + 4; x = x >> 4;} + if ((x & 0x00000003) == 0) {n = n + 2; x = x >> 2;} + return n - (x & 1); +} + +int ntz4(unsigned x) { + unsigned y; + int n; + + if (x == 0) return 32; + n = 31; + y = x <<16; if (y != 0) {n = n -16; x = y;} + y = x << 8; if (y != 0) {n = n - 8; x = y;} + y = x << 4; if (y != 0) {n = n - 4; x = y;} + y = x << 2; if (y != 0) {n = n - 2; x = y;} + y = x << 1; if (y != 0) {n = n - 1;} return n; } -int nlz7(unsigned k) { - union { - unsigned asInt[2]; - double asDouble; - }; +int ntz4a(unsigned x) { + unsigned y; int n; - asDouble = (double)k; - n = 1054 - (asInt[LE] >> 20); - n = (n & 31) + (n >> 9); + if (x == 0) return 32; + n = 31; + y = x <<16; if (y != 0) {n = n -16; x = y;} + y = x << 8; if (y != 0) {n = n - 8; x = y;} + y = x << 4; if (y != 0) {n = n - 4; x = y;} + y = x << 2; if (y != 0) {n = n - 2; x = y;} + n = n - ((x << 1) >> 31); return n; } - /* In single precision, round-to-nearest mode, the basic method fails for: - k = 0, k = 01FFFFFF, 03FFFFFE <= k <= 03FFFFFF, - 07FFFFFC <= k <= 07FFFFFF, - 0FFFFFF8 <= k <= 0FFFFFFF, - ... - 7FFFFFC0 <= k <= 7FFFFFFF. - FFFFFF80 <= k <= FFFFFFFF. - For k = 0 it gives 158, and for the other values it is too low by 1. */ - -int nlz8(unsigned k) { - union { - unsigned asInt; - float asFloat; - }; - int n; - - k = k & ~(k >> 1); /* Fix problem with rounding. */ - asFloat = (float)k + 0.5f; - n = 158 - (asInt >> 23); - return n; +int ntz5(char x) +{ + if (x & 15) { + if (x & 3) { + if (x & 1) return 0; + else return 1; + } + else if (x & 4) return 2; + else return 3; + } + else if (x & 0x30) { + if (x & 0x10) return 4; + else return 5; + } + else if (x & 0x40) return 6; + else if (x) return 7; + else return 8; } -/* The example below shows how to make a macro for nlz. It uses an -extension to the C and C++ languages that is provided by the GNU C/C++ -compiler, namely, that of allowing statements and declarations in -expressions (see "Using and Porting GNU CC", by Richard M. Stallman -(1998). The underscores are necessary to protect against the -possibility that the macro argument will conflict with one of its local -variables, e.g., NLZ(k). */ - -int nlz9(unsigned k) { - union { - unsigned asInt; - float asFloat; - }; +int ntz6(unsigned x) { int n; - k = k & ~(k >> 1); /* Fix problem with rounding. */ - asFloat = (float)k; - n = 158 - (asInt >> 23); - n = (n & 31) + (n >> 6); /* Fix problem with k = 0. */ - return n; + x = ~x & (x - 1); + n = 0; // n = 32; + while(x != 0) { // while (x != 0) { + n = n + 1; // n = n - 1; + x = x >> 1; // x = x + x; + } // } + return n; // return n; } -/* Below are three nearly equivalent programs for computing the number -of leading zeros in a word. This material is not in HD, but may be in a -future edition. - Immediately below is Robert Harley's algorithm, found at the -comp.arch newsgroup entry dated 7/12/96, pointed out to me by Norbert -Juffa. - Table entries marked "u" are unused. 14 ops including a multiply, -plus an indexed load. - The smallest multiplier that works is 0x045BCED1 = 17*65*129*513 (all -of form 2**k + 1). There are no multipliers of three terms of the form -2**k +- 1 that work, with a table size of 64 or 128. There are some, -with a table size of 64, if you precede the multiplication with x = x - -(x >> 1), but that seems less elegant. There are also some if you use a -table size of 256, the smallest is 0x01033CBF = 65*255*1025 (this would -save two instructions in the form of this algorithm with the -multiplication expanded into shifts and adds, but the table size is -getting a bit large). */ +int ntz6a(unsigned x) +{ + int n = 32; + + while (x != 0) { + n = n - 1; + x = x + x; + } + return n; +} + +/* Dean Gaudet's algorithm. To be most useful there must be a good way +to evaluate the C "conditional expression" (a?b:c construction) without +branching. The result of a?b:c is b if a is true (nonzero), and c if a +is false (0). + For example, a compare to zero op that sets a target GPR to 1 if the +operand is 0, and to 0 if the operand is nonzero, will do it. With this +instruction, the algorithm is entirely branch-free. But the most +interesting thing about it is the high degree of parallelism. All six +lines with conditional expressions can be executed in parallel (on a +machine with sufficient computational units). + Although the instruction count is 30 measured statically, it could +execute in only 10 cycles on a machine with sufficient parallelism. + The first two uses of y can instead be x, which would increase the +useful parallelism on most machines (the assignments to y, bz, and b4 +could then all run in parallel). */ + +int ntz7(unsigned x) +{ + unsigned y, bz, b4, b3, b2, b1, b0; + + y = x & -x; // Isolate rightmost 1-bit. + bz = y ? 0 : 1; // 1 if y = 0. + b4 = (y & 0x0000FFFF) ? 0 : 16; + b3 = (y & 0x00FF00FF) ? 0 : 8; + b2 = (y & 0x0F0F0F0F) ? 0 : 4; + b1 = (y & 0x33333333) ? 0 : 2; + b0 = (y & 0x55555555) ? 0 : 1; + return bz + b4 + b3 + b2 + b1 + b0; +} + +int ntz7_christophe(unsigned x) +{ + unsigned y, bz, b4, b3, b2, b1, b0; + + y = x & -x; // Isolate rightmost 1-bit. + bz = unsigned(!bool(y)); // 1 if y = 0. + b4 = unsigned(!bool(y & 0x0000FFFF)) * 16; + b3 = unsigned(!bool(y & 0x00FF00FF)) * 8; + b2 = unsigned(!bool(y & 0x0F0F0F0F)) * 4; + b1 = unsigned(!bool(y & 0x33333333)) * 2; + b0 = unsigned(!bool(y & 0x55555555)) * 1; + return bz + b4 + b3 + b2 + b1 + b0; +} + +/* Below is David Seal's algorithm, found at +http://www.ciphersbyritter.com/NEWS4/BITCT.HTM Table +entries marked "u" are unused. 6 ops including a +multiply, plus an indexed load. */ #define u 99 -int nlz10(unsigned x) { +int ntz8(unsigned x) +{ + static char table[64] = + {32, 0, 1,12, 2, 6, u,13, 3, u, 7, u, u, u, u,14, + 10, 4, u, u, 8, u, u,25, u, u, u, u, u,21,27,15, + 31,11, 5, u, u, u, u, u, 9, u, u,24, u, u,20,26, + 30, u, u, u, u,23, u,19, 29, u,22,18,28,17,16, u}; - static char table[64] = - {32,31, u,16, u,30, 3, u, 15, u, u, u,29,10, 2, u, - u, u,12,14,21, u,19, u, u,28, u,25, u, 9, 1, u, - 17, u, 4, u, u, u,11, u, 13,22,20, u,26, u, u,18, - 5, u, u,23, u,27, u, 6, u,24, 7, u, 8, u, 0, u}; - - x = x | (x >> 1); // Propagate leftmost - x = x | (x >> 2); // 1-bit to the right. - x = x | (x >> 4); - x = x | (x >> 8); - x = x | (x >>16); - x = x*0x06EB14F9; // Multiplier is 7*255**3. - return table[x >> 26]; + x = (x & -x)*0x0450FBAF; + return table[x >> 26]; } -/* Harley's algorithm with multiply expanded. -19 elementary ops plus an indexed load. */ +/* Seal's algorithm with multiply expanded. +9 elementary ops plus an indexed load. */ -int nlz10a(unsigned x) { +int ntz8a(unsigned x) +{ + static char table[64] = + {32, 0, 1,12, 2, 6, u,13, 3, u, 7, u, u, u, u,14, + 10, 4, u, u, 8, u, u,25, u, u, u, u, u,21,27,15, + 31,11, 5, u, u, u, u, u, 9, u, u,24, u, u,20,26, + 30, u, u, u, u,23, u,19, 29, u,22,18,28,17,16, u}; - static char table[64] = - {32,31, u,16, u,30, 3, u, 15, u, u, u,29,10, 2, u, - u, u,12,14,21, u,19, u, u,28, u,25, u, 9, 1, u, - 17, u, 4, u, u, u,11, u, 13,22,20, u,26, u, u,18, - 5, u, u,23, u,27, u, 6, u,24, 7, u, 8, u, 0, u}; - - x = x | (x >> 1); // Propagate leftmost - x = x | (x >> 2); // 1-bit to the right. - x = x | (x >> 4); - x = x | (x >> 8); - x = x | (x >> 16); - x = (x << 3) - x; // Multiply by 7. - x = (x << 8) - x; // Multiply by 255. - x = (x << 8) - x; // Again. - x = (x << 8) - x; // Again. - return table[x >> 26]; + x = (x & -x); + x = (x << 4) + x; // x = x*17. + x = (x << 6) + x; // x = x*65. + x = (x << 16) - x; // x = x*65535. + return table[x >> 26]; } -/* Julius Goryavsky's version of Harley's algorithm. -17 elementary ops plus an indexed load, if the machine -has "and not." */ +/* Reiser's algorithm. Three ops including a "remainder," +plus an indexed load. */ -int nlz10b(unsigned x) { +int ntz9(unsigned x) { - static char table[64] = - {32,20,19, u, u,18, u, 7, 10,17, u, u,14, u, 6, u, - u, 9, u,16, u, u, 1,26, u,13, u, u,24, 5, u, u, - u,21, u, 8,11, u,15, u, u, u, u, 2,27, 0,25, u, - 22, u,12, u, u, 3,28, u, 23, u, 4,29, u, u,30,31}; + static char table[37] = {32, 0, 1, 26, 2, 23, 27, + u, 3, 16, 24, 30, 28, 11, u, 13, 4, + 7, 17, u, 25, 22, 31, 15, 29, 10, 12, + 6, u, 21, 14, 9, 5, 20, 8, 19, 18}; - x = x | (x >> 1); // Propagate leftmost - x = x | (x >> 2); // 1-bit to the right. - x = x | (x >> 4); - x = x | (x >> 8); - x = x & ~(x >> 16); - x = x*0xFD7049FF; // Activate this line or the following 3. -// x = (x << 9) - x; // Multiply by 511. -// x = (x << 11) - x; // Multiply by 2047. -// x = (x << 14) - x; // Multiply by 16383. - return table[x >> 26]; + x = (x & -x)%37; + return table[x]; +} + +/* Using a de Bruijn sequence. This is a table lookup with a 32-entry +table. The de Bruijn sequence used here is + 0000 0100 1101 0111 0110 0101 0001 1111, +obtained from Danny Dube's October 3, 1997, posting in +comp.compression.research. Thanks to Norbert Juffa for this reference. */ + +int ntz10(unsigned x) { + + static char table[32] = + { 0, 1, 2,24, 3,19, 6,25, 22, 4,20,10,16, 7,12,26, + 31,23,18, 5,21, 9,15,11, 30,17, 8,14,29,13,28,27}; + + if (x == 0) return 32; + x = (x & -x)*0x04D7651F; + return table[x >> 27]; +} + +/* Norbert Juffa's code, answer to exercise 1 of Chapter 5 (2nd ed). */ + +#define SLOW_MUL +int ntz11 (unsigned int n) { + + static unsigned char tab[32] = + { 0, 1, 2, 24, 3, 19, 6, 25, + 22, 4, 20, 10, 16, 7, 12, 26, + 31, 23, 18, 5, 21, 9, 15, 11, + 30, 17, 8, 14, 29, 13, 28, 27 + }; + unsigned int k; + n = n & (-n); /* isolate lsb */ + printf("n = %d\n", n); +#if defined(SLOW_MUL) + k = (n << 11) - n; + k = (k << 2) + k; + k = (k << 8) + n; + k = (k << 5) - k; +#else + k = n * 0x4d7651f; +#endif + return n ? tab[k>>27] : 32; } int errors; @@ -308,19 +266,22 @@ void error(int x, int y) { printf("Error for x = %08x, got %d\n", x, y); } +/* ------------------------------ main ------------------------------ */ + int main() { # ifdef GLM_TEST_ENABLE_PERF - int i, n; - static unsigned test[] = {0,32, 1,31, 2,30, 3,30, 4,29, 5,29, 6,29, - 7,29, 8,28, 9,28, 16,27, 32,26, 64,25, 128,24, 255,24, 256,23, - 512,22, 1024,21, 2048,20, 4096,19, 8192,18, 16384,17, 32768,16, - 65536,15, 0x20000,14, 0x40000,13, 0x80000,12, 0x100000,11, - 0x200000,10, 0x400000,9, 0x800000,8, 0x1000000,7, 0x2000000,6, - 0x4000000,5, 0x8000000,4, 0x0FFFFFFF,4, 0x10000000,3, - 0x3000FFFF,2, 0x50003333,1, 0x7FFFFFFF,1, 0x80000000,0, - 0xFFFFFFFF,0}; + int i, m, n; + static unsigned test[] = {0,32, 1,0, 2,1, 3,0, 4,2, 5,0, 6,1, 7,0, + 8,3, 9,0, 16,4, 32,5, 64,6, 128,7, 255,0, 256,8, 512,9, 1024,10, + 2048,11, 4096,12, 8192,13, 16384,14, 32768,15, 65536,16, + 0x20000,17, 0x40000,18, 0x80000,19, 0x100000,20, 0x200000,21, + 0x400000,22, 0x800000,23, 0x1000000,24, 0x2000000,25, + 0x4000000,26, 0x8000000,27, 0x10000000,28, 0x20000000,29, + 0x40000000,30, 0x80000000,31, 0xFFFFFFF0,4, 0x3000FF00,8, + 0xC0000000,30, 0x60000000,29, 0x00011000, 12}; + std::size_t const Count = 10000000; n = sizeof(test)/4; @@ -331,114 +292,115 @@ int main() TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz1(test[i]) != test[i+1]) error(test[i], nlz1(test[i]));} + if (ntz1(test[i]) != test[i+1]) error(test[i], ntz1(test[i]));} TimestampEnd = std::clock(); - printf("nlz1: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz1: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz1a(test[i]) != test[i+1]) error(test[i], nlz1a(test[i]));} + if (ntz2(test[i]) != test[i+1]) error(test[i], ntz2(test[i]));} TimestampEnd = std::clock(); - printf("nlz1a: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz2: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz2(test[i]) != test[i+1]) error(test[i], nlz2(test[i]));} + if (ntz3(test[i]) != test[i+1]) error(test[i], ntz3(test[i]));} TimestampEnd = std::clock(); - printf("nlz2: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz3: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz2a(test[i]) != test[i+1]) error(test[i], nlz2a(test[i]));} + if (ntz4(test[i]) != test[i+1]) error(test[i], ntz4(test[i]));} TimestampEnd = std::clock(); - printf("nlz2a: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz4: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz3(test[i]) != test[i+1]) error(test[i], nlz3(test[i]));} + if (ntz4a(test[i]) != test[i+1]) error(test[i], ntz4a(test[i]));} TimestampEnd = std::clock(); - printf("nlz3: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz4a: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz4(test[i]) != test[i+1]) error(test[i], nlz4(test[i]));} + m = test[i+1]; if (m > 8) m = 8; + if (ntz5(test[i]) != m) error(test[i], ntz5(test[i]));} TimestampEnd = std::clock(); - printf("nlz4: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz5: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz5(test[i]) != test[i+1]) error(test[i], nlz5(test[i]));} + if (ntz6(test[i]) != test[i+1]) error(test[i], ntz6(test[i]));} TimestampEnd = std::clock(); - printf("nlz5: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz6: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz6(test[i]) != test[i+1]) error(test[i], nlz6(test[i]));} + if (ntz6a(test[i]) != test[i+1]) error(test[i], ntz6a(test[i]));} TimestampEnd = std::clock(); - printf("nlz6: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz6a: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz7(test[i]) != test[i+1]) error(test[i], nlz7(test[i]));} + if (ntz7(test[i]) != test[i+1]) error(test[i], ntz7(test[i]));} TimestampEnd = std::clock(); - printf("nlz7: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz7: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz8(test[i]) != test[i+1]) error(test[i], nlz8(test[i]));} + if (ntz7_christophe(test[i]) != test[i+1]) error(test[i], ntz7(test[i]));} TimestampEnd = std::clock(); - printf("nlz8: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz7_christophe: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz9(test[i]) != test[i+1]) error(test[i], nlz9(test[i]));} + if (ntz8(test[i]) != test[i+1]) error(test[i], ntz8(test[i]));} TimestampEnd = std::clock(); - printf("nlz9: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz8: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz10(test[i]) != test[i+1]) error(test[i], nlz10(test[i]));} + if (ntz8a(test[i]) != test[i+1]) error(test[i], ntz8a(test[i]));} TimestampEnd = std::clock(); - printf("nlz10: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz8a: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz10a(test[i]) != test[i+1]) error(test[i], nlz10a(test[i]));} + if (ntz9(test[i]) != test[i+1]) error(test[i], ntz9(test[i]));} TimestampEnd = std::clock(); - printf("nlz10a: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz9: %d clocks\n", TimestampEnd - TimestampBeg); TimestampBeg = std::clock(); for (std::size_t k = 0; k < Count; ++k) for (i = 0; i < n; i += 2) { - if (nlz10b(test[i]) != test[i+1]) error(test[i], nlz10b(test[i]));} + if (ntz10(test[i]) != test[i+1]) error(test[i], ntz10(test[i]));} TimestampEnd = std::clock(); - printf("nlz10b: %d clocks\n", TimestampEnd - TimestampBeg); + printf("ntz10: %d clocks\n", TimestampEnd - TimestampBeg); if (errors == 0) printf("Passed all %d cases.\n", sizeof(test)/8); diff --git a/test/core/core_func_integer_find_msb.cpp b/test/core/core_func_integer_find_msb.cpp new file mode 100644 index 00000000..21dd124a --- /dev/null +++ b/test/core/core_func_integer_find_msb.cpp @@ -0,0 +1,447 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2014-10-27 +// Updated : 2014-10-27 +// Licence : This source is under MIT licence +// File : test/core/func_integer_find_lsb.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +// This has the programs for computing the number of leading zeros +// in a word. +// Max line length is 57, to fit in hacker.book. +// Compile with g++, not gcc. +#include +#include // To define "exit", req'd by XLC. +#include + +#define LE 1 // 1 for little-endian, 0 for big-endian. + +int pop(unsigned x) { + x = x - ((x >> 1) & 0x55555555); + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x = (x + (x >> 4)) & 0x0F0F0F0F; + x = x + (x << 8); + x = x + (x << 16); + return x >> 24; +} + +int nlz1(unsigned x) { + int n; + + if (x == 0) return(32); + n = 0; + if (x <= 0x0000FFFF) {n = n +16; x = x <<16;} + if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;} + if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;} + if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;} + if (x <= 0x7FFFFFFF) {n = n + 1;} + return n; +} + +int nlz1a(unsigned x) { + int n; + +/* if (x == 0) return(32); */ + if ((int)x <= 0) return (~x >> 26) & 32; + n = 1; + if ((x >> 16) == 0) {n = n +16; x = x <<16;} + if ((x >> 24) == 0) {n = n + 8; x = x << 8;} + if ((x >> 28) == 0) {n = n + 4; x = x << 4;} + if ((x >> 30) == 0) {n = n + 2; x = x << 2;} + n = n - (x >> 31); + return n; +} +// On basic Risc, 12 to 20 instructions. + +int nlz2(unsigned x) { + unsigned y; + int n; + + n = 32; + y = x >>16; if (y != 0) {n = n -16; x = y;} + y = x >> 8; if (y != 0) {n = n - 8; x = y;} + y = x >> 4; if (y != 0) {n = n - 4; x = y;} + y = x >> 2; if (y != 0) {n = n - 2; x = y;} + y = x >> 1; if (y != 0) return n - 2; + return n - x; +} + +// As above but coded as a loop for compactness: +// 23 to 33 basic Risc instructions. +int nlz2a(unsigned x) { + unsigned y; + int n, c; + + n = 32; + c = 16; + do { + y = x >> c; if (y != 0) {n = n - c; x = y;} + c = c >> 1; + } while (c != 0); + return n - x; +} + +int nlz3(int x) { + int y, n; + + n = 0; + y = x; +L: if (x < 0) return n; + if (y == 0) return 32 - n; + n = n + 1; + x = x << 1; + y = y >> 1; + goto L; +} + +int nlz4(unsigned x) { + int y, m, n; + + y = -(x >> 16); // If left half of x is 0, + m = (y >> 16) & 16; // set n = 16. If left half + n = 16 - m; // is nonzero, set n = 0 and + x = x >> m; // shift x right 16. + // Now x is of the form 0000xxxx. + y = x - 0x100; // If positions 8-15 are 0, + m = (y >> 16) & 8; // add 8 to n and shift x left 8. + n = n + m; + x = x << m; + + y = x - 0x1000; // If positions 12-15 are 0, + m = (y >> 16) & 4; // add 4 to n and shift x left 4. + n = n + m; + x = x << m; + + y = x - 0x4000; // If positions 14-15 are 0, + m = (y >> 16) & 2; // add 2 to n and shift x left 2. + n = n + m; + x = x << m; + + y = x >> 14; // Set y = 0, 1, 2, or 3. + m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp. + return n + 2 - m; +} + +int nlz5(unsigned x) { + int pop(unsigned x); + + x = x | (x >> 1); + x = x | (x >> 2); + x = x | (x >> 4); + x = x | (x >> 8); + x = x | (x >>16); + return pop(~x); +} + +/* The four programs below are not valid ANSI C programs. This is +because they refer to the same storage locations as two different types. +However, they work with xlc/AIX, gcc/AIX, and gcc/NT. If you try to +code them more compactly by declaring a variable xx to be "double," and +then using + + n = 1054 - (*((unsigned *)&xx + LE) >> 20); + +then you are violating not only the rule above, but also the ANSI C +rule that pointer arithmetic can be performed only on pointers to +array elements. + When coded with the above statement, the program fails with xlc, +gcc/AIX, and gcc/NT, at some optimization levels. + BTW, these programs use the "anonymous union" feature of C++, not +available in C. */ + +int nlz6(unsigned k) { + union { + unsigned asInt[2]; + double asDouble; + }; + int n; + + asDouble = (double)k + 0.5; + n = 1054 - (asInt[LE] >> 20); + return n; +} + +int nlz7(unsigned k) { + union { + unsigned asInt[2]; + double asDouble; + }; + int n; + + asDouble = (double)k; + n = 1054 - (asInt[LE] >> 20); + n = (n & 31) + (n >> 9); + return n; +} + + /* In single precision, round-to-nearest mode, the basic method fails for: + k = 0, k = 01FFFFFF, 03FFFFFE <= k <= 03FFFFFF, + 07FFFFFC <= k <= 07FFFFFF, + 0FFFFFF8 <= k <= 0FFFFFFF, + ... + 7FFFFFC0 <= k <= 7FFFFFFF. + FFFFFF80 <= k <= FFFFFFFF. + For k = 0 it gives 158, and for the other values it is too low by 1. */ + +int nlz8(unsigned k) { + union { + unsigned asInt; + float asFloat; + }; + int n; + + k = k & ~(k >> 1); /* Fix problem with rounding. */ + asFloat = (float)k + 0.5f; + n = 158 - (asInt >> 23); + return n; +} + +/* The example below shows how to make a macro for nlz. It uses an +extension to the C and C++ languages that is provided by the GNU C/C++ +compiler, namely, that of allowing statements and declarations in +expressions (see "Using and Porting GNU CC", by Richard M. Stallman +(1998). The underscores are necessary to protect against the +possibility that the macro argument will conflict with one of its local +variables, e.g., NLZ(k). */ + +int nlz9(unsigned k) { + union { + unsigned asInt; + float asFloat; + }; + int n; + + k = k & ~(k >> 1); /* Fix problem with rounding. */ + asFloat = (float)k; + n = 158 - (asInt >> 23); + n = (n & 31) + (n >> 6); /* Fix problem with k = 0. */ + return n; +} + +/* Below are three nearly equivalent programs for computing the number +of leading zeros in a word. This material is not in HD, but may be in a +future edition. + Immediately below is Robert Harley's algorithm, found at the +comp.arch newsgroup entry dated 7/12/96, pointed out to me by Norbert +Juffa. + Table entries marked "u" are unused. 14 ops including a multiply, +plus an indexed load. + The smallest multiplier that works is 0x045BCED1 = 17*65*129*513 (all +of form 2**k + 1). There are no multipliers of three terms of the form +2**k +- 1 that work, with a table size of 64 or 128. There are some, +with a table size of 64, if you precede the multiplication with x = x - +(x >> 1), but that seems less elegant. There are also some if you use a +table size of 256, the smallest is 0x01033CBF = 65*255*1025 (this would +save two instructions in the form of this algorithm with the +multiplication expanded into shifts and adds, but the table size is +getting a bit large). */ + +#define u 99 +int nlz10(unsigned x) { + + static char table[64] = + {32,31, u,16, u,30, 3, u, 15, u, u, u,29,10, 2, u, + u, u,12,14,21, u,19, u, u,28, u,25, u, 9, 1, u, + 17, u, 4, u, u, u,11, u, 13,22,20, u,26, u, u,18, + 5, u, u,23, u,27, u, 6, u,24, 7, u, 8, u, 0, u}; + + x = x | (x >> 1); // Propagate leftmost + x = x | (x >> 2); // 1-bit to the right. + x = x | (x >> 4); + x = x | (x >> 8); + x = x | (x >>16); + x = x*0x06EB14F9; // Multiplier is 7*255**3. + return table[x >> 26]; +} + +/* Harley's algorithm with multiply expanded. +19 elementary ops plus an indexed load. */ + +int nlz10a(unsigned x) { + + static char table[64] = + {32,31, u,16, u,30, 3, u, 15, u, u, u,29,10, 2, u, + u, u,12,14,21, u,19, u, u,28, u,25, u, 9, 1, u, + 17, u, 4, u, u, u,11, u, 13,22,20, u,26, u, u,18, + 5, u, u,23, u,27, u, 6, u,24, 7, u, 8, u, 0, u}; + + x = x | (x >> 1); // Propagate leftmost + x = x | (x >> 2); // 1-bit to the right. + x = x | (x >> 4); + x = x | (x >> 8); + x = x | (x >> 16); + x = (x << 3) - x; // Multiply by 7. + x = (x << 8) - x; // Multiply by 255. + x = (x << 8) - x; // Again. + x = (x << 8) - x; // Again. + return table[x >> 26]; +} + +/* Julius Goryavsky's version of Harley's algorithm. +17 elementary ops plus an indexed load, if the machine +has "and not." */ + +int nlz10b(unsigned x) { + + static char table[64] = + {32,20,19, u, u,18, u, 7, 10,17, u, u,14, u, 6, u, + u, 9, u,16, u, u, 1,26, u,13, u, u,24, 5, u, u, + u,21, u, 8,11, u,15, u, u, u, u, 2,27, 0,25, u, + 22, u,12, u, u, 3,28, u, 23, u, 4,29, u, u,30,31}; + + x = x | (x >> 1); // Propagate leftmost + x = x | (x >> 2); // 1-bit to the right. + x = x | (x >> 4); + x = x | (x >> 8); + x = x & ~(x >> 16); + x = x*0xFD7049FF; // Activate this line or the following 3. +// x = (x << 9) - x; // Multiply by 511. +// x = (x << 11) - x; // Multiply by 2047. +// x = (x << 14) - x; // Multiply by 16383. + return table[x >> 26]; +} + +int errors; +void error(int x, int y) { + errors = errors + 1; + printf("Error for x = %08x, got %d\n", x, y); +} + +int main() +{ +# ifdef GLM_TEST_ENABLE_PERF + + int i, n; + static unsigned test[] = {0,32, 1,31, 2,30, 3,30, 4,29, 5,29, 6,29, + 7,29, 8,28, 9,28, 16,27, 32,26, 64,25, 128,24, 255,24, 256,23, + 512,22, 1024,21, 2048,20, 4096,19, 8192,18, 16384,17, 32768,16, + 65536,15, 0x20000,14, 0x40000,13, 0x80000,12, 0x100000,11, + 0x200000,10, 0x400000,9, 0x800000,8, 0x1000000,7, 0x2000000,6, + 0x4000000,5, 0x8000000,4, 0x0FFFFFFF,4, 0x10000000,3, + 0x3000FFFF,2, 0x50003333,1, 0x7FFFFFFF,1, 0x80000000,0, + 0xFFFFFFFF,0}; + std::size_t const Count = 10000000; + + n = sizeof(test)/4; + + std::clock_t TimestampBeg = 0; + std::clock_t TimestampEnd = 0; + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz1(test[i]) != test[i+1]) error(test[i], nlz1(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz1: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz1a(test[i]) != test[i+1]) error(test[i], nlz1a(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz1a: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz2(test[i]) != test[i+1]) error(test[i], nlz2(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz2: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz2a(test[i]) != test[i+1]) error(test[i], nlz2a(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz2a: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz3(test[i]) != test[i+1]) error(test[i], nlz3(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz3: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz4(test[i]) != test[i+1]) error(test[i], nlz4(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz4: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz5(test[i]) != test[i+1]) error(test[i], nlz5(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz5: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz6(test[i]) != test[i+1]) error(test[i], nlz6(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz6: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz7(test[i]) != test[i+1]) error(test[i], nlz7(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz7: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz8(test[i]) != test[i+1]) error(test[i], nlz8(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz8: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz9(test[i]) != test[i+1]) error(test[i], nlz9(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz9: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz10(test[i]) != test[i+1]) error(test[i], nlz10(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz10: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz10a(test[i]) != test[i+1]) error(test[i], nlz10a(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz10a: %d clocks\n", TimestampEnd - TimestampBeg); + + TimestampBeg = std::clock(); + for (std::size_t k = 0; k < Count; ++k) + for (i = 0; i < n; i += 2) { + if (nlz10b(test[i]) != test[i+1]) error(test[i], nlz10b(test[i]));} + TimestampEnd = std::clock(); + + printf("nlz10b: %d clocks\n", TimestampEnd - TimestampBeg); + + if (errors == 0) + printf("Passed all %d cases.\n", sizeof(test)/8); + +# endif//GLM_TEST_ENABLE_PERF +} From 3135560336eaddde67f8a7fa3554684d7016d38a Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 22 Nov 2014 20:30:40 +0100 Subject: [PATCH 13/64] Updated built-in --- glm/detail/func_integer.inl | 101 +++++++++++++++++------------------- 1 file changed, 48 insertions(+), 53 deletions(-) diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index ae455a83..c7ee7e13 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -100,31 +100,29 @@ namespace detail } }; -# if (GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) - - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) +# if(GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) + template + struct compute_findLSB { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; + GLM_FUNC_QUALIFIER static int call(genIUType Value) + { + unsigned long Result(0); + unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast(&Value)); + return IsNotNull ? int(Result) : -1; + } + }; - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) + template + struct compute_findLSB { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; - -# endif + GLM_FUNC_QUALIFIER static int call(genIUType Value) + { + unsigned long Result(0); + unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast(&Value)); + return IsNotNull ? int(Result) : -1; + } + }; +# endif//GLM_ARCH != GLM_ARCH_PURE template class vecType, bool EXEC = true> struct compute_findMSB_step_vec @@ -160,44 +158,41 @@ namespace detail } }; -# if (GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) - - template - GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template - GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template class vecType> - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static int call(vecType const & x) +# if(GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) + template + GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) { - return detail::functor1::call(compute_findMSB_32, x); + unsigned long Result(0); + unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast(&Value)); + return IsNotNull ? int(Result) : -1; } - }; - template class vecType> - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static int call(vecType const & x) + template + GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) { - return detail::functor1::call(compute_findMSB_64, x); + unsigned long Result(0); + unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast(&Value)); + return IsNotNull ? int(Result) : -1; } - }; -# endif + template class vecType> + struct compute_findMSB_vec + { + GLM_FUNC_QUALIFIER static int call(vecType const & x) + { + return detail::functor1::call(compute_findMSB_32, x); + } + }; + template class vecType> + struct compute_findMSB_vec + { + GLM_FUNC_QUALIFIER static int call(vecType const & x) + { + return detail::functor1::call(compute_findMSB_64, x); + } + }; +# endif//GLM_ARCH != GLM_ARCH_PURE }//namespace detail // uaddCarry From 34a98b52209918c7a4e10fdd3cf04e6ecfaff4f8 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 22 Nov 2014 20:33:36 +0100 Subject: [PATCH 14/64] Fixed build --- glm/detail/func_geometric.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glm/detail/func_geometric.inl b/glm/detail/func_geometric.inl index 3da09f63..1d51df91 100644 --- a/glm/detail/func_geometric.inl +++ b/glm/detail/func_geometric.inl @@ -186,6 +186,6 @@ namespace detail T const dotValue(dot(N, I)); T const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); - return (eta * I - (eta * dotValue + std::sqrt(k)) * N) * static_cast(k >= static_cast(0)); + return (eta * I - (eta * dotValue + std::sqrt(k)) * N) * static_cast(k >= static_cast(0)); } }//namespace glm From b5519d35efc6f2dd06a9711a19bad8a56e3a1af5 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 22 Nov 2014 21:26:22 +0100 Subject: [PATCH 15/64] Fixed SIMD enable for GLM tests --- CMakeLists.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c71989ee..818af5b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,23 +72,23 @@ if(GLM_TEST_FORCE_PURE) elseif(MSVC) add_definitions(/arch:IA32) endif() -elseif(GLM_TEST_ENABLE_AVX2) +elseif(GLM_TEST_ENABLE_SIMD_AVX2) if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-mavx2) elseif(GLM_USE_INTEL) add_definitions(/QxAVX2) elseif(MSVC) - add_definitions(/arch:AVX2) + add_definitions(/arch:AVX2) endif() -elseif(GLM_TEST_ENABLE_AVX) +elseif(GLM_TEST_ENABLE_SIMD_AVX) if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-mavx) elseif(GLM_USE_INTEL) add_definitions(/QxAVX) elseif(MSVC) - add_definitions(/arch:AVX) + add_definitions(/arch:AVX) endif() -elseif(GLM_TEST_ENABLE_SSE3) +elseif(GLM_TEST_ENABLE_SIMD_SSE3) if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-msse3) elseif(GLM_USE_INTEL) @@ -96,14 +96,14 @@ elseif(GLM_TEST_ENABLE_SSE3) elseif(MSVC) add_definitions(/arch:SSE2) # VC doesn't support /arch:SSE3 endif() -elseif(GLM_TEST_ENABLE_SSE2) +elseif(GLM_TEST_ENABLE_SIMD_SSE2) if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-msse2) elseif(GLM_USE_INTEL) add_definitions(/QxSSE2) elseif(MSVC) if(NOT CMAKE_CL_64) - add_definitions(/arch:SSE2) + add_definitions(/arch:SSE2) endif() endif() endif() From 011a05626728d5ed95c18253016460991a13a3c6 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 22 Nov 2014 22:31:44 +0100 Subject: [PATCH 16/64] Added AVX2 detection for GLM tests --- CMakeLists.txt | 1 + glm/detail/setup.hpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 818af5b2..daf45035 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,6 +78,7 @@ elseif(GLM_TEST_ENABLE_SIMD_AVX2) elseif(GLM_USE_INTEL) add_definitions(/QxAVX2) elseif(MSVC) + message("AVX2") add_definitions(/arch:AVX2) endif() elseif(GLM_TEST_ENABLE_SIMD_AVX) diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index ffa74640..d45dc37b 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -592,7 +592,9 @@ # define GLM_ARCH GLM_ARCH_PURE # endif #elif GLM_COMPILER & GLM_COMPILER_VC -# if _M_IX86_FP == 2 && defined(__AVX__) +# if defined(__AVX2__) +# define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2) +# elif defined(__AVX__) # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2) # elif _M_IX86_FP == 2 # define GLM_ARCH (GLM_ARCH_SSE2) From 246609b453e8c47f3cfc1750d284a0a3837d01f0 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 22 Nov 2014 23:26:18 +0100 Subject: [PATCH 17/64] Fix build --- CMakeLists.txt | 1 - glm/detail/func_integer.inl | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index daf45035..818af5b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,7 +78,6 @@ elseif(GLM_TEST_ENABLE_SIMD_AVX2) elseif(GLM_USE_INTEL) add_definitions(/QxAVX2) elseif(MSVC) - message("AVX2") add_definitions(/arch:AVX2) endif() elseif(GLM_TEST_ENABLE_SIMD_AVX) diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index c7ee7e13..c2c07563 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -133,7 +133,7 @@ namespace detail } }; - template class vecType> + template class vecType> struct compute_findMSB_step_vec { GLM_FUNC_QUALIFIER static vecType call(vecType const & x, T) @@ -142,7 +142,7 @@ namespace detail } }; - template class vecType, std::size_t> + template class vecType, int> struct compute_findMSB_vec { GLM_FUNC_QUALIFIER static vecType call(vecType const & vec) @@ -178,7 +178,7 @@ namespace detail template class vecType> struct compute_findMSB_vec { - GLM_FUNC_QUALIFIER static int call(vecType const & x) + GLM_FUNC_QUALIFIER static vecType call(vecType const & x) { return detail::functor1::call(compute_findMSB_32, x); } @@ -187,7 +187,7 @@ namespace detail template class vecType> struct compute_findMSB_vec { - GLM_FUNC_QUALIFIER static int call(vecType const & x) + GLM_FUNC_QUALIFIER static vecType call(vecType const & x) { return detail::functor1::call(compute_findMSB_64, x); } From b062bd9ff2703d2c001cfc74b521398670140827 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 23 Nov 2014 01:02:03 +0100 Subject: [PATCH 18/64] First step to add GTC_type_aligned --- glm/detail/setup.hpp | 4 + glm/gtc/type_aligned.hpp | 870 ++++++++++++++++++++++++++++++++++ glm/gtc/type_aligned.inl | 32 ++ readme.txt | 1 + test/gtc/CMakeLists.txt | 1 + test/gtc/gtc_type_aligned.cpp | 30 ++ 6 files changed, 938 insertions(+) create mode 100644 glm/gtc/type_aligned.hpp create mode 100644 glm/gtc/type_aligned.inl create mode 100644 test/gtc/gtc_type_aligned.cpp diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index d45dc37b..f102d3c6 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -739,24 +739,28 @@ # define GLM_DEPRECATED __declspec(deprecated) # define GLM_ALIGN(x) __declspec(align(x)) # define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x)) +# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name # define GLM_RESTRICT __declspec(restrict) # define GLM_RESTRICT_VAR __restrict #elif GLM_COMPILER & GLM_COMPILER_INTEL # define GLM_DEPRECATED # define GLM_ALIGN(x) __declspec(align(x)) # define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x)) +# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name # define GLM_RESTRICT # define GLM_RESTRICT_VAR __restrict #elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_CUDA) # define GLM_DEPRECATED __attribute__((__deprecated__)) # define GLM_ALIGN(x) __attribute__((aligned(x))) # define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x))) +# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(x))) # define GLM_RESTRICT __restrict__ # define GLM_RESTRICT_VAR __restrict__ #else # define GLM_DEPRECATED # define GLM_ALIGN # define GLM_ALIGNED_STRUCT(x) struct +# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name # define GLM_RESTRICT # define GLM_RESTRICT_VAR #endif//GLM_COMPILER diff --git a/glm/gtc/type_aligned.hpp b/glm/gtc/type_aligned.hpp new file mode 100644 index 00000000..9260c3ff --- /dev/null +++ b/glm/gtc/type_aligned.hpp @@ -0,0 +1,870 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtc_type_aligned +/// @file glm/gtc/type_aligned.hpp +/// @date 2014-11-23 / 2014-12-23 +/// @author Christophe Riccio +/// +/// @see core (dependence) +/// @see gtc_quaternion (dependence) +/// +/// @defgroup gtc_type_aligned GLM_GTC_type_aligned +/// @ingroup gtc +/// +/// @brief Defines aligned types. +/// +/// @ref core_precision defines aligned types. +/// +/// need to be included to use these functionalities. +/////////////////////////////////////////////////////////////////////////////////// + +#pragma once + +// Dependency: +#include "../gtc/type_precision.hpp" + +#if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) +# pragma message("GLM: GLM_GTC_type_aligned extension included") +#endif + +namespace glm +{ + /////////////////////////// + // Signed int vector types + + /// @addtogroup gtc_type_aligned + /// @{ + + /// Low precision 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 lowp_int8; + + /// Low precision 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 lowp_int16; + + /// Low precision 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 lowp_int32; + + /// Low precision 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 lowp_int64; + + /// Low precision 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 lowp_int8_t; + + /// Low precision 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 lowp_int16_t; + + /// Low precision 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 lowp_int32_t; + + /// Low precision 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 lowp_int64_t; + + /// Low precision 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 lowp_i8; + + /// Low precision 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 lowp_i16; + + /// Low precision 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 lowp_i32; + + /// Low precision 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 lowp_i64; + + /// Medium precision 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 mediump_int8; + + /// Medium precision 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 mediump_int16; + + /// Medium precision 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 mediump_int32; + + /// Medium precision 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 mediump_int64; + + /// Medium precision 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 mediump_int8_t; + + /// Medium precision 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 mediump_int16_t; + + /// Medium precision 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 mediump_int32_t; + + /// Medium precision 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 mediump_int64_t; + + /// Medium precision 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 mediump_i8; + + /// Medium precision 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 mediump_i16; + + /// Medium precision 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 mediump_i32; + + /// Medium precision 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 mediump_i64; + + /// High precision 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 highp_int8; + + /// High precision 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 highp_int16; + + /// High precision 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 highp_int32; + + /// High precision 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 highp_int64; + + /// High precision 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 highp_int8_t; + + /// High precision 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 highp_int16_t; + + /// 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 highp_int32_t; + + /// High precision 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 highp_int64_t; + + /// High precision 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 highp_i8; + + /// High precision 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 highp_i16; + + /// High precision 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 highp_i32; + + /// High precision 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 highp_i64; + + + /// 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 int8; + + /// 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 int16; + + /// 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 int32; + + /// 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 int64; + +#if GLM_HAS_EXTENDED_INTEGER_TYPE + using std::int8_t; + using std::int16_t; + using std::int32_t; + using std::int64_t; +#else + /// 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 int8_t; + + /// 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 int16_t; + + /// 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 int32_t; + + /// 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 int64_t; +#endif + + /// 8 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int8 i8; + + /// 16 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int16 i16; + + /// 32 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int32 i32; + + /// 64 bit signed integer type. + /// @see gtc_type_aligned + typedef detail::int64 i64; + + + /// 8 bit signed integer scalar type. + /// @see gtc_type_aligned + typedef tvec1 i8vec1; + + /// 8 bit signed integer vector of 2 components type. + /// @see gtc_type_aligned + typedef tvec2 i8vec2; + + /// 8 bit signed integer vector of 3 components type. + /// @see gtc_type_aligned + typedef tvec3 i8vec3; + + /// 8 bit signed integer vector of 4 components type. + /// @see gtc_type_aligned + typedef tvec4 i8vec4; + + + /// 16 bit signed integer scalar type. + /// @see gtc_type_aligned + typedef tvec1 i16vec1; + + /// 16 bit signed integer vector of 2 components type. + /// @see gtc_type_aligned + typedef tvec2 i16vec2; + + /// 16 bit signed integer vector of 3 components type. + /// @see gtc_type_aligned + typedef tvec3 i16vec3; + + /// 16 bit signed integer vector of 4 components type. + /// @see gtc_type_aligned + typedef tvec4 i16vec4; + + + /// 32 bit signed integer scalar type. + /// @see gtc_type_aligned + typedef tvec1 i32vec1; + + /// 32 bit signed integer vector of 2 components type. + /// @see gtc_type_aligned + typedef tvec2 i32vec2; + + /// 32 bit signed integer vector of 3 components type. + /// @see gtc_type_aligned + typedef tvec3 i32vec3; + + /// 32 bit signed integer vector of 4 components type. + /// @see gtc_type_aligned + typedef tvec4 i32vec4; + + + /// 64 bit signed integer scalar type. + /// @see gtc_type_aligned + typedef tvec1 i64vec1; + + /// 64 bit signed integer vector of 2 components type. + /// @see gtc_type_aligned + typedef tvec2 i64vec2; + + /// 64 bit signed integer vector of 3 components type. + /// @see gtc_type_aligned + typedef tvec3 i64vec3; + + /// 64 bit signed integer vector of 4 components type. + /// @see gtc_type_aligned + typedef tvec4 i64vec4; + + + ///////////////////////////// + // Unsigned int vector types + + /// Low precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 lowp_uint8; + + /// Low precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 lowp_uint16; + + /// Low precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 lowp_uint32; + + /// Low precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 lowp_uint64; + + /// Low precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 lowp_uint8_t; + + /// Low precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 lowp_uint16_t; + + /// Low precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 lowp_uint32_t; + + /// Low precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 lowp_uint64_t; + + /// Low precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 lowp_u8; + + /// Low precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 lowp_u16; + + /// Low precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 lowp_u32; + + /// Low precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 lowp_u64; + + /// Medium precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 mediump_uint8; + + /// Medium precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 mediump_uint16; + + /// Medium precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 mediump_uint32; + + /// Medium precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 mediump_uint64; + + /// Medium precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 mediump_uint8_t; + + /// Medium precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 mediump_uint16_t; + + /// Medium precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 mediump_uint32_t; + + /// Medium precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 mediump_uint64_t; + + /// Medium precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 mediump_u8; + + /// Medium precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 mediump_u16; + + /// Medium precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 mediump_u32; + + /// Medium precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 mediump_u64; + + /// High precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 highp_uint8; + + /// High precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 highp_uint16; + + /// High precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 highp_uint32; + + /// High precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 highp_uint64; + + /// High precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 highp_uint8_t; + + /// High precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 highp_uint16_t; + + /// High precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 highp_uint32_t; + + /// High precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 highp_uint64_t; + + /// High precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 highp_u8; + + /// High precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 highp_u16; + + /// High precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 highp_u32; + + /// High precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 highp_u64; + + /// Default precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 uint8; + + /// Default precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 uint16; + + /// Default precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 uint32; + + /// Default precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 uint64; + +#if GLM_HAS_EXTENDED_INTEGER_TYPE + using std::uint8_t; + using std::uint16_t; + using std::uint32_t; + using std::uint64_t; +#else + /// Default precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 uint8_t; + + /// Default precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 uint16_t; + + /// Default precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 uint32_t; + + /// Default precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 uint64_t; +#endif + + /// Default precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint8 u8; + + /// Default precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint16 u16; + + /// Default precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint32 u32; + + /// Default precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + typedef detail::uint64 u64; + + + /// Default precision 8 bit unsigned integer scalar type. + /// @see gtc_type_aligned + typedef tvec1 u8vec1; + + /// Default precision 8 bit unsigned integer vector of 2 components type. + /// @see gtc_type_aligned + typedef tvec2 u8vec2; + + /// Default precision 8 bit unsigned integer vector of 3 components type. + /// @see gtc_type_aligned + typedef tvec3 u8vec3; + + /// Default precision 8 bit unsigned integer vector of 4 components type. + /// @see gtc_type_aligned + typedef tvec4 u8vec4; + + + /// Default precision 16 bit unsigned integer scalar type. + /// @see gtc_type_aligned + typedef tvec1 u16vec1; + + /// Default precision 16 bit unsigned integer vector of 2 components type. + /// @see gtc_type_aligned + typedef tvec2 u16vec2; + + /// Default precision 16 bit unsigned integer vector of 3 components type. + /// @see gtc_type_aligned + typedef tvec3 u16vec3; + + /// Default precision 16 bit unsigned integer vector of 4 components type. + /// @see gtc_type_aligned + typedef tvec4 u16vec4; + + + /// Default precision 32 bit unsigned integer scalar type. + /// @see gtc_type_aligned + typedef tvec1 u32vec1; + + /// Default precision 32 bit unsigned integer vector of 2 components type. + /// @see gtc_type_aligned + typedef tvec2 u32vec2; + + /// Default precision 32 bit unsigned integer vector of 3 components type. + /// @see gtc_type_aligned + typedef tvec3 u32vec3; + + /// Default precision 32 bit unsigned integer vector of 4 components type. + /// @see gtc_type_aligned + typedef tvec4 u32vec4; + + + /// Default precision 64 bit unsigned integer scalar type. + /// @see gtc_type_aligned + typedef tvec1 u64vec1; + + /// Default precision 64 bit unsigned integer vector of 2 components type. + /// @see gtc_type_aligned + typedef tvec2 u64vec2; + + /// Default precision 64 bit unsigned integer vector of 3 components type. + /// @see gtc_type_aligned + typedef tvec3 u64vec3; + + /// Default precision 64 bit unsigned integer vector of 4 components type. + /// @see gtc_type_aligned + typedef tvec4 u64vec4; + + + ////////////////////// + // Float vector types + + /// 32 bit single-precision floating-point scalar. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4); + + /// 64 bit double-precision floating-point scalar. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8); + + + /// 32 bit single-precision floating-point scalar. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4); + + /// 64 bit double-precision floating-point scalar. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8); + + + /// 32 bit single-precision floating-point scalar. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4); + + /// 64 bit double-precision floating-point scalar. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); + + + /// Single-precision floating-point vector of 1 component. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); + + /// Single-precision floating-point vector of 2 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8); + + /// Single-precision floating-point vector of 3 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 12); + + /// Single-precision floating-point vector of 4 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16); + + + /// Single-precision floating-point vector of 1 component. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4); + + /// Single-precision floating-point vector of 2 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8); + + /// Single-precision floating-point vector of 3 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 12); + + /// Single-precision floating-point vector of 4 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); + + + /// Double-precision floating-point vector of 1 component. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); + + /// Double-precision floating-point vector of 2 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16); + + /// Double-precision floating-point vector of 3 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 24); + + /// Double-precision floating-point vector of 4 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32); + + + ////////////////////// + // Float matrix types + + /// Single-precision floating-point 1x1 matrix. + /// @see gtc_type_aligned + //typedef detail::tmat1x1 fmat1; + + /// Single-precision floating-point 2x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16); + + /// Single-precision floating-point 3x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16); + + /// Single-precision floating-point 4x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16); + + + /// Single-precision floating-point 1x1 matrix. + /// @see gtc_type_aligned + //typedef f32 fmat1x1; + + /// Single-precision floating-point 2x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16); + + /// Single-precision floating-point 2x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16); + + /// Single-precision floating-point 2x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16); + + /// Single-precision floating-point 3x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16); + + /// Single-precision floating-point 3x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16); + + /// Single-precision floating-point 3x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16); + + /// Single-precision floating-point 4x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16); + + /// Single-precision floating-point 4x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16); + + /// Single-precision floating-point 4x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16); + + + /// Single-precision floating-point 1x1 matrix. + /// @see gtc_type_aligned + //typedef detail::tmat1x1 f32mat1; + + /// Single-precision floating-point 2x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16); + + /// Single-precision floating-point 3x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16); + + /// Single-precision floating-point 4x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16); + + + /// Single-precision floating-point 1x1 matrix. + /// @see gtc_type_aligned + //typedef f32 f32mat1x1; + + /// Single-precision floating-point 2x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16); + + /// Single-precision floating-point 2x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16); + + /// Single-precision floating-point 2x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16); + + /// Single-precision floating-point 3x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16); + + /// Single-precision floating-point 3x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16); + + /// Single-precision floating-point 3x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16); + + /// Single-precision floating-point 4x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16); + + /// Single-precision floating-point 4x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16); + + /// Single-precision floating-point 4x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16); + + + /// Double-precision floating-point 1x1 matrix. + /// @see gtc_type_aligned + //typedef detail::tmat1x1 f64mat1; + + /// Double-precision floating-point 2x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32); + + /// Double-precision floating-point 3x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32); + + /// Double-precision floating-point 4x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32); + + + /// Double-precision floating-point 1x1 matrix. + /// @see gtc_type_aligned + //typedef f64 f64mat1x1; + + /// Double-precision floating-point 2x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32); + + /// Double-precision floating-point 2x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32); + + /// Double-precision floating-point 2x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32); + + /// Double-precision floating-point 3x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32); + + /// Double-precision floating-point 3x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32); + + /// Double-precision floating-point 3x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32); + + /// Double-precision floating-point 4x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32); + + /// Double-precision floating-point 4x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32); + + /// Double-precision floating-point 4x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32); + + + ////////////////////////// + // Quaternion types + + /// Single-precision floating-point quaternion. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); + + /// Double-precision floating-point quaternion. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32); + + /// @} +}//namespace glm + +#include "type_aligned.inl" diff --git a/glm/gtc/type_aligned.inl b/glm/gtc/type_aligned.inl new file mode 100644 index 00000000..744de959 --- /dev/null +++ b/glm/gtc/type_aligned.inl @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtc_type_aligned +/// @file glm/gtc/type_aligned.inl +/// @date 2014-11-23 / 2014-11-23 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + +} diff --git a/readme.txt b/readme.txt index 62cd12a2..32c8f410 100644 --- a/readme.txt +++ b/readme.txt @@ -58,6 +58,7 @@ Features: - Added GTC_integer extension, promoted GTX_bit and GTX_integer - Added GTC_round extension, promoted GTX_bit - Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269 +- Added GTC_type_aligned for aligned vector and matrix types Improvements: - Rely on C++11 to implement isinf and isnan diff --git a/test/gtc/CMakeLists.txt b/test/gtc/CMakeLists.txt index 224b8eb5..42c2e84d 100644 --- a/test/gtc/CMakeLists.txt +++ b/test/gtc/CMakeLists.txt @@ -12,6 +12,7 @@ glmCreateTestGTC(gtc_quaternion) glmCreateTestGTC(gtc_random) glmCreateTestGTC(gtc_round) glmCreateTestGTC(gtc_reciprocal) +glmCreateTestGTC(gtc_type_aligned) glmCreateTestGTC(gtc_type_precision) glmCreateTestGTC(gtc_type_ptr) glmCreateTestGTC(gtc_ulp) diff --git a/test/gtc/gtc_type_aligned.cpp b/test/gtc/gtc_type_aligned.cpp new file mode 100644 index 00000000..d1b2bcf7 --- /dev/null +++ b/test/gtc/gtc_type_aligned.cpp @@ -0,0 +1,30 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2014-11-23 +// Updated : 2014-11-23 +// Licence : This source is under MIT licence +// File : test/gtc/type_aligned.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +#define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name + +GLM_ALIGNED_TYPEDEF(glm::lowp_vec4, aligned_lowp_vec4, 16); + +int test_decl() +{ + + + return 0; +} + +int main() +{ + int Error(0); + + Error += test_decl(); + + return Error; +} From 411511ca71a2d2b30a68f16dd035133c0c08f3ff Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 23 Nov 2014 12:54:44 +0100 Subject: [PATCH 19/64] Completed GTC_type_aligned #266 #257 --- glm/gtc/type_aligned.hpp | 571 ++++++++++++++++++++------------------- 1 file changed, 295 insertions(+), 276 deletions(-) diff --git a/glm/gtc/type_aligned.hpp b/glm/gtc/type_aligned.hpp index 9260c3ff..12b01e14 100644 --- a/glm/gtc/type_aligned.hpp +++ b/glm/gtc/type_aligned.hpp @@ -57,271 +57,274 @@ namespace glm /// Low precision 8 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int8 lowp_int8; - + GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1); + /// Low precision 16 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int16 lowp_int16; + GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2); /// Low precision 32 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int32 lowp_int32; + GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4); /// Low precision 64 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int64 lowp_int64; + GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8); + /// Low precision 8 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int8 lowp_int8_t; - + GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1); + /// Low precision 16 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int16 lowp_int16_t; + GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2); /// Low precision 32 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int32 lowp_int32_t; + GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4); /// Low precision 64 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int64 lowp_int64_t; + GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8); + /// Low precision 8 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int8 lowp_i8; - + GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1); + /// Low precision 16 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int16 lowp_i16; + GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2); /// Low precision 32 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int32 lowp_i32; + GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4); /// Low precision 64 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int64 lowp_i64; + GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8); + /// Medium precision 8 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int8 mediump_int8; - + GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1); + /// Medium precision 16 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int16 mediump_int16; + GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2); /// Medium precision 32 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int32 mediump_int32; + GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4); /// Medium precision 64 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int64 mediump_int64; + GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8); + /// Medium precision 8 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int8 mediump_int8_t; - + GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1); + /// Medium precision 16 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int16 mediump_int16_t; + GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2); /// Medium precision 32 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int32 mediump_int32_t; + GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4); /// Medium precision 64 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int64 mediump_int64_t; + GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8); + /// Medium precision 8 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int8 mediump_i8; - + GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1); + /// Medium precision 16 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int16 mediump_i16; + GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2); /// Medium precision 32 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int32 mediump_i32; + GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4); /// Medium precision 64 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int64 mediump_i64; + GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8); + /// High precision 8 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int8 highp_int8; - + GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1); + /// High precision 16 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int16 highp_int16; + GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2); /// High precision 32 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int32 highp_int32; + GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4); /// High precision 64 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int64 highp_int64; + GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8); + /// High precision 8 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int8 highp_int8_t; - + GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1); + /// High precision 16 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int16 highp_int16_t; - - /// 32 bit signed integer type. - /// @see gtc_type_aligned - typedef detail::int32 highp_int32_t; - - /// High precision 64 bit signed integer type. - /// @see gtc_type_aligned - typedef detail::int64 highp_int64_t; - - /// High precision 8 bit signed integer type. - /// @see gtc_type_aligned - typedef detail::int8 highp_i8; - - /// High precision 16 bit signed integer type. - /// @see gtc_type_aligned - typedef detail::int16 highp_i16; + GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2); /// High precision 32 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int32 highp_i32; + GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4); /// High precision 64 bit signed integer type. /// @see gtc_type_aligned - typedef detail::int64 highp_i64; + GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8); + + + /// High precision 8 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1); + + /// High precision 16 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2); + + /// High precision 32 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4); + + /// High precision 64 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8); + + + /// Default precision 8 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1); + + /// Default precision 16 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2); + + /// Default precision 32 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4); + + /// Default precision 64 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8); + + + /// Default precision 8 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1); + + /// Default precision 16 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2); + + /// Default precision 32 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4); + + /// Default precision 64 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8); + + + /// Default precision 8 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1); + + /// Default precision 16 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2); + + /// Default precision 32 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4); + + /// Default precision 64 bit signed integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); + + + /// Default precision 8 bit signed integer scalar type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); + + /// Default precision 8 bit signed integer vector of 2 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2); + + /// Default precision 8 bit signed integer vector of 3 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 3); + + /// Default precision 8 bit signed integer vector of 4 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4); + + + /// Default precision 16 bit signed integer scalar type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2); - - /// 8 bit signed integer type. + /// Default precision 16 bit signed integer vector of 2 components type. /// @see gtc_type_aligned - typedef detail::int8 int8; + GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4); + + /// Default precision 16 bit signed integer vector of 3 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 6); + + /// Default precision 16 bit signed integer vector of 4 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8); + + + /// Default precision 32 bit signed integer scalar type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4); - /// 16 bit signed integer type. + /// Default precision 32 bit signed integer vector of 2 components type. /// @see gtc_type_aligned - typedef detail::int16 int16; + GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8); - /// 32 bit signed integer type. + /// Default precision 32 bit signed integer vector of 3 components type. /// @see gtc_type_aligned - typedef detail::int32 int32; + GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 12); - /// 64 bit signed integer type. + /// Default precision 32 bit signed integer vector of 4 components type. /// @see gtc_type_aligned - typedef detail::int64 int64; + GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16); -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::int8_t; - using std::int16_t; - using std::int32_t; - using std::int64_t; -#else - /// 8 bit signed integer type. + + /// Default precision 64 bit signed integer scalar type. /// @see gtc_type_aligned - typedef detail::int8 int8_t; + GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8); - /// 16 bit signed integer type. + /// Default precision 64 bit signed integer vector of 2 components type. /// @see gtc_type_aligned - typedef detail::int16 int16_t; + GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16); - /// 32 bit signed integer type. + /// Default precision 64 bit signed integer vector of 3 components type. /// @see gtc_type_aligned - typedef detail::int32 int32_t; + GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 24); - /// 64 bit signed integer type. + /// Default precision 64 bit signed integer vector of 4 components type. /// @see gtc_type_aligned - typedef detail::int64 int64_t; -#endif - - /// 8 bit signed integer type. - /// @see gtc_type_aligned - typedef detail::int8 i8; - - /// 16 bit signed integer type. - /// @see gtc_type_aligned - typedef detail::int16 i16; - - /// 32 bit signed integer type. - /// @see gtc_type_aligned - typedef detail::int32 i32; - - /// 64 bit signed integer type. - /// @see gtc_type_aligned - typedef detail::int64 i64; - - - /// 8 bit signed integer scalar type. - /// @see gtc_type_aligned - typedef tvec1 i8vec1; - - /// 8 bit signed integer vector of 2 components type. - /// @see gtc_type_aligned - typedef tvec2 i8vec2; - - /// 8 bit signed integer vector of 3 components type. - /// @see gtc_type_aligned - typedef tvec3 i8vec3; - - /// 8 bit signed integer vector of 4 components type. - /// @see gtc_type_aligned - typedef tvec4 i8vec4; - - - /// 16 bit signed integer scalar type. - /// @see gtc_type_aligned - typedef tvec1 i16vec1; - - /// 16 bit signed integer vector of 2 components type. - /// @see gtc_type_aligned - typedef tvec2 i16vec2; - - /// 16 bit signed integer vector of 3 components type. - /// @see gtc_type_aligned - typedef tvec3 i16vec3; - - /// 16 bit signed integer vector of 4 components type. - /// @see gtc_type_aligned - typedef tvec4 i16vec4; - - - /// 32 bit signed integer scalar type. - /// @see gtc_type_aligned - typedef tvec1 i32vec1; - - /// 32 bit signed integer vector of 2 components type. - /// @see gtc_type_aligned - typedef tvec2 i32vec2; - - /// 32 bit signed integer vector of 3 components type. - /// @see gtc_type_aligned - typedef tvec3 i32vec3; - - /// 32 bit signed integer vector of 4 components type. - /// @see gtc_type_aligned - typedef tvec4 i32vec4; - - - /// 64 bit signed integer scalar type. - /// @see gtc_type_aligned - typedef tvec1 i64vec1; - - /// 64 bit signed integer vector of 2 components type. - /// @see gtc_type_aligned - typedef tvec2 i64vec2; - - /// 64 bit signed integer vector of 3 components type. - /// @see gtc_type_aligned - typedef tvec3 i64vec3; - - /// 64 bit signed integer vector of 4 components type. - /// @see gtc_type_aligned - typedef tvec4 i64vec4; + GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32); ///////////////////////////// @@ -329,270 +332,274 @@ namespace glm /// Low precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint8 lowp_uint8; - + GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1); + /// Low precision 16 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint16 lowp_uint16; + GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2); /// Low precision 32 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint32 lowp_uint32; + GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4); /// Low precision 64 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 lowp_uint64; + GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8); + /// Low precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint8 lowp_uint8_t; - + GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1); + /// Low precision 16 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint16 lowp_uint16_t; + GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2); /// Low precision 32 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint32 lowp_uint32_t; + GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4); /// Low precision 64 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 lowp_uint64_t; + GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8); + /// Low precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint8 lowp_u8; - + GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1); + /// Low precision 16 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint16 lowp_u16; + GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2); /// Low precision 32 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint32 lowp_u32; + GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4); /// Low precision 64 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 lowp_u64; - - /// Medium precision 8 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint8 mediump_uint8; - - /// Medium precision 16 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint16 mediump_uint16; + GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8); - /// Medium precision 32 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint32 mediump_uint32; - - /// Medium precision 64 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint64 mediump_uint64; /// Medium precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint8 mediump_uint8_t; - + GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1); + /// Medium precision 16 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint16 mediump_uint16_t; + GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2); /// Medium precision 32 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint32 mediump_uint32_t; + GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4); /// Medium precision 64 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 mediump_uint64_t; + GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8); + /// Medium precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint8 mediump_u8; - + GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1); + /// Medium precision 16 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint16 mediump_u16; + GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2); /// Medium precision 32 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint32 mediump_u32; + GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4); /// Medium precision 64 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 mediump_u64; - - /// High precision 8 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint8 highp_uint8; - - /// High precision 16 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint16 highp_uint16; + GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8); - /// High precision 32 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint32 highp_uint32; - /// High precision 64 bit unsigned integer type. + /// Medium precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 highp_uint64; + GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1); + + /// Medium precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2); + + /// Medium precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4); + + /// Medium precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8); + /// High precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint8 highp_uint8_t; - + GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1); + /// High precision 16 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint16 highp_uint16_t; + GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2); /// High precision 32 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint32 highp_uint32_t; + GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4); /// High precision 64 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 highp_uint64_t; + GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8); + /// High precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint8 highp_u8; - + GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1); + /// High precision 16 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint16 highp_u16; + GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2); /// High precision 32 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint32 highp_u32; + GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4); /// High precision 64 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 highp_u64; + GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8); + + + /// High precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1); + + /// High precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2); + + /// High precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4); + + /// High precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8); + /// Default precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint8 uint8; - + GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1); + /// Default precision 16 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint16 uint16; + GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2); /// Default precision 32 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint32 uint32; + GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4); /// Default precision 64 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 uint64; + GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8); -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::uint8_t; - using std::uint16_t; - using std::uint32_t; - using std::uint64_t; -#else - /// Default precision 8 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint8 uint8_t; - - /// Default precision 16 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint16 uint16_t; - - /// Default precision 32 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint32 uint32_t; - - /// Default precision 64 bit unsigned integer type. - /// @see gtc_type_aligned - typedef detail::uint64 uint64_t; -#endif /// Default precision 8 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint8 u8; - + GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1); + /// Default precision 16 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint16 u16; + GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2); /// Default precision 32 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint32 u32; + GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4); /// Default precision 64 bit unsigned integer type. /// @see gtc_type_aligned - typedef detail::uint64 u64; + GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8); + + + /// Default precision 8 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1); + + /// Default precision 16 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2); + + /// Default precision 32 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4); + + /// Default precision 64 bit unsigned integer type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); /// Default precision 8 bit unsigned integer scalar type. /// @see gtc_type_aligned - typedef tvec1 u8vec1; - + GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); + /// Default precision 8 bit unsigned integer vector of 2 components type. /// @see gtc_type_aligned - typedef tvec2 u8vec2; + GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2); /// Default precision 8 bit unsigned integer vector of 3 components type. /// @see gtc_type_aligned - typedef tvec3 u8vec3; + GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 3); /// Default precision 8 bit unsigned integer vector of 4 components type. /// @see gtc_type_aligned - typedef tvec4 u8vec4; + GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4); /// Default precision 16 bit unsigned integer scalar type. /// @see gtc_type_aligned - typedef tvec1 u16vec1; + GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2); /// Default precision 16 bit unsigned integer vector of 2 components type. /// @see gtc_type_aligned - typedef tvec2 u16vec2; + GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4); /// Default precision 16 bit unsigned integer vector of 3 components type. /// @see gtc_type_aligned - typedef tvec3 u16vec3; + GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 6); /// Default precision 16 bit unsigned integer vector of 4 components type. /// @see gtc_type_aligned - typedef tvec4 u16vec4; + GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8); /// Default precision 32 bit unsigned integer scalar type. /// @see gtc_type_aligned - typedef tvec1 u32vec1; + GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4); /// Default precision 32 bit unsigned integer vector of 2 components type. /// @see gtc_type_aligned - typedef tvec2 u32vec2; + GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8); /// Default precision 32 bit unsigned integer vector of 3 components type. /// @see gtc_type_aligned - typedef tvec3 u32vec3; + GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 12); /// Default precision 32 bit unsigned integer vector of 4 components type. /// @see gtc_type_aligned - typedef tvec4 u32vec4; + GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16); /// Default precision 64 bit unsigned integer scalar type. /// @see gtc_type_aligned - typedef tvec1 u64vec1; + GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8); /// Default precision 64 bit unsigned integer vector of 2 components type. /// @see gtc_type_aligned - typedef tvec2 u64vec2; + GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16); /// Default precision 64 bit unsigned integer vector of 3 components type. /// @see gtc_type_aligned - typedef tvec3 u64vec3; + GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 24); /// Default precision 64 bit unsigned integer vector of 4 components type. /// @see gtc_type_aligned - typedef tvec4 u64vec4; + GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32); ////////////////////// @@ -856,6 +863,18 @@ namespace glm ////////////////////////// // Quaternion types + /// Single-precision floating-point quaternion. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16); + + /// Single-precision floating-point quaternion. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(fquat, aligned_fquat, 16); + + /// Double-precision floating-point quaternion. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32); + /// Single-precision floating-point quaternion. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); From 5d95353dd0aa1ccd06341b9aace308dd18824cc6 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 23 Nov 2014 13:15:24 +0100 Subject: [PATCH 20/64] Added missing types --- glm/gtc/type_aligned.hpp | 102 +++++++++++++++++++++++++++++++++++++ glm/gtc/type_precision.hpp | 1 + 2 files changed, 103 insertions(+) diff --git a/glm/gtc/type_aligned.hpp b/glm/gtc/type_aligned.hpp index 12b01e14..95c347c3 100644 --- a/glm/gtc/type_aligned.hpp +++ b/glm/gtc/type_aligned.hpp @@ -259,6 +259,23 @@ namespace glm GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); + /// Default precision 32 bit signed integer scalar type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4); + + /// Default precision 32 bit signed integer vector of 2 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8); + + /// Default precision 32 bit signed integer vector of 3 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 12); + + /// Default precision 32 bit signed integer vector of 4 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16); + + /// Default precision 8 bit signed integer scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); @@ -534,6 +551,23 @@ namespace glm GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); + /// Default precision 32 bit unsigned integer scalar type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4); + + /// Default precision 32 bit unsigned integer vector of 2 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8); + + /// Default precision 32 bit unsigned integer vector of 3 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 12); + + /// Default precision 32 bit unsigned integer vector of 4 components type. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16); + + /// Default precision 8 bit unsigned integer scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); @@ -632,6 +666,23 @@ namespace glm GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); + /// Single-precision floating-point vector of 1 component. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4); + + /// Single-precision floating-point vector of 2 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8); + + /// Single-precision floating-point vector of 3 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 12); + + /// Single-precision floating-point vector of 4 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16); + + /// Single-precision floating-point vector of 1 component. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); @@ -666,6 +717,23 @@ namespace glm GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); + /// Double-precision floating-point vector of 1 component. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8); + + /// Double-precision floating-point vector of 2 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16); + + /// Double-precision floating-point vector of 3 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 24); + + /// Double-precision floating-point vector of 4 components. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32); + + /// Double-precision floating-point vector of 1 component. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); @@ -686,6 +754,40 @@ namespace glm ////////////////////// // Float matrix types + /// Single-precision floating-point 1x1 matrix. + /// @see gtc_type_aligned + //typedef detail::tmat1 mat1; + + /// Single-precision floating-point 2x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16); + + /// Single-precision floating-point 3x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16); + + /// Single-precision floating-point 4x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16); + + + /// Single-precision floating-point 1x1 matrix. + /// @see gtc_type_aligned + //typedef detail::tmat1x1 mat1; + + /// Single-precision floating-point 2x2 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16); + + /// Single-precision floating-point 3x3 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16); + + /// Single-precision floating-point 4x4 matrix. + /// @see gtc_type_aligned + GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16); + + /// Single-precision floating-point 1x1 matrix. /// @see gtc_type_aligned //typedef detail::tmat1x1 fmat1; diff --git a/glm/gtc/type_precision.hpp b/glm/gtc/type_precision.hpp index 57ee9805..6901c529 100644 --- a/glm/gtc/type_precision.hpp +++ b/glm/gtc/type_precision.hpp @@ -44,6 +44,7 @@ // Dependency: #include "../gtc/quaternion.hpp" +#include "../gtc/vec1.hpp" #include "../vec2.hpp" #include "../vec3.hpp" #include "../vec4.hpp" From 9b96b31f0e72dfce0a81ec641cdd9a9acbbb3a37 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 23 Nov 2014 13:20:14 +0100 Subject: [PATCH 21/64] Fixed alignment on Visual C++ --- glm/detail/setup.hpp | 13 +++---------- glm/gtc/type_aligned.hpp | 30 +++++++++++++++--------------- test/gtc/gtc_type_aligned.cpp | 4 ---- 3 files changed, 18 insertions(+), 29 deletions(-) diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index f102d3c6..cbd306e5 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -735,21 +735,14 @@ /////////////////////////////////////////////////////////////////////////////////// // Qualifiers -#if GLM_COMPILER & GLM_COMPILER_VC +#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)) # define GLM_DEPRECATED __declspec(deprecated) # define GLM_ALIGN(x) __declspec(align(x)) # define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x)) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name +# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name # define GLM_RESTRICT __declspec(restrict) # define GLM_RESTRICT_VAR __restrict -#elif GLM_COMPILER & GLM_COMPILER_INTEL -# define GLM_DEPRECATED -# define GLM_ALIGN(x) __declspec(align(x)) -# define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x)) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name -# define GLM_RESTRICT -# define GLM_RESTRICT_VAR __restrict -#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_CUDA) +#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_CUDA | GLM_COMPILER_INTEL) # define GLM_DEPRECATED __attribute__((__deprecated__)) # define GLM_ALIGN(x) __attribute__((aligned(x))) # define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x))) diff --git a/glm/gtc/type_aligned.hpp b/glm/gtc/type_aligned.hpp index 95c347c3..3e6b6a76 100644 --- a/glm/gtc/type_aligned.hpp +++ b/glm/gtc/type_aligned.hpp @@ -269,7 +269,7 @@ namespace glm /// Default precision 32 bit signed integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 12); + GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16); /// Default precision 32 bit signed integer vector of 4 components type. /// @see gtc_type_aligned @@ -286,7 +286,7 @@ namespace glm /// Default precision 8 bit signed integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 3); + GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4); /// Default precision 8 bit signed integer vector of 4 components type. /// @see gtc_type_aligned @@ -303,7 +303,7 @@ namespace glm /// Default precision 16 bit signed integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 6); + GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8); /// Default precision 16 bit signed integer vector of 4 components type. /// @see gtc_type_aligned @@ -320,7 +320,7 @@ namespace glm /// Default precision 32 bit signed integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 12); + GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16); /// Default precision 32 bit signed integer vector of 4 components type. /// @see gtc_type_aligned @@ -337,7 +337,7 @@ namespace glm /// Default precision 64 bit signed integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 24); + GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32); /// Default precision 64 bit signed integer vector of 4 components type. /// @see gtc_type_aligned @@ -561,7 +561,7 @@ namespace glm /// Default precision 32 bit unsigned integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 12); + GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16); /// Default precision 32 bit unsigned integer vector of 4 components type. /// @see gtc_type_aligned @@ -578,7 +578,7 @@ namespace glm /// Default precision 8 bit unsigned integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 3); + GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4); /// Default precision 8 bit unsigned integer vector of 4 components type. /// @see gtc_type_aligned @@ -595,7 +595,7 @@ namespace glm /// Default precision 16 bit unsigned integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 6); + GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8); /// Default precision 16 bit unsigned integer vector of 4 components type. /// @see gtc_type_aligned @@ -612,7 +612,7 @@ namespace glm /// Default precision 32 bit unsigned integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 12); + GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16); /// Default precision 32 bit unsigned integer vector of 4 components type. /// @see gtc_type_aligned @@ -629,7 +629,7 @@ namespace glm /// Default precision 64 bit unsigned integer vector of 3 components type. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 24); + GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32); /// Default precision 64 bit unsigned integer vector of 4 components type. /// @see gtc_type_aligned @@ -676,7 +676,7 @@ namespace glm /// Single-precision floating-point vector of 3 components. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 12); + GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16); /// Single-precision floating-point vector of 4 components. /// @see gtc_type_aligned @@ -693,7 +693,7 @@ namespace glm /// Single-precision floating-point vector of 3 components. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 12); + GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16); /// Single-precision floating-point vector of 4 components. /// @see gtc_type_aligned @@ -710,7 +710,7 @@ namespace glm /// Single-precision floating-point vector of 3 components. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 12); + GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16); /// Single-precision floating-point vector of 4 components. /// @see gtc_type_aligned @@ -727,7 +727,7 @@ namespace glm /// Double-precision floating-point vector of 3 components. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 24); + GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32); /// Double-precision floating-point vector of 4 components. /// @see gtc_type_aligned @@ -744,7 +744,7 @@ namespace glm /// Double-precision floating-point vector of 3 components. /// @see gtc_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 24); + GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32); /// Double-precision floating-point vector of 4 components. /// @see gtc_type_aligned diff --git a/test/gtc/gtc_type_aligned.cpp b/test/gtc/gtc_type_aligned.cpp index d1b2bcf7..7c2b2c03 100644 --- a/test/gtc/gtc_type_aligned.cpp +++ b/test/gtc/gtc_type_aligned.cpp @@ -9,10 +9,6 @@ #include -#define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name - -GLM_ALIGNED_TYPEDEF(glm::lowp_vec4, aligned_lowp_vec4, 16); - int test_decl() { From c79394b89903bf95e28da4db46cee30b188bf481 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 23 Nov 2014 20:44:54 +0100 Subject: [PATCH 22/64] More tests and comments for type_aligned --- glm/gtc/type_aligned.hpp | 434 +++++++++++++++++----------------- test/gtc/gtc_type_aligned.cpp | 95 +++++++- 2 files changed, 310 insertions(+), 219 deletions(-) diff --git a/glm/gtc/type_aligned.hpp b/glm/gtc/type_aligned.hpp index 3e6b6a76..4fa39381 100644 --- a/glm/gtc/type_aligned.hpp +++ b/glm/gtc/type_aligned.hpp @@ -55,291 +55,291 @@ namespace glm /// @addtogroup gtc_type_aligned /// @{ - /// Low precision 8 bit signed integer type. + /// Low precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1); - /// Low precision 16 bit signed integer type. + /// Low precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2); - /// Low precision 32 bit signed integer type. + /// Low precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4); - /// Low precision 64 bit signed integer type. + /// Low precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8); - /// Low precision 8 bit signed integer type. + /// Low precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1); - /// Low precision 16 bit signed integer type. + /// Low precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2); - /// Low precision 32 bit signed integer type. + /// Low precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4); - /// Low precision 64 bit signed integer type. + /// Low precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8); - /// Low precision 8 bit signed integer type. + /// Low precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1); - /// Low precision 16 bit signed integer type. + /// Low precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2); - /// Low precision 32 bit signed integer type. + /// Low precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4); - /// Low precision 64 bit signed integer type. + /// Low precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8); - /// Medium precision 8 bit signed integer type. + /// Medium precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1); - /// Medium precision 16 bit signed integer type. + /// Medium precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2); - /// Medium precision 32 bit signed integer type. + /// Medium precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4); - /// Medium precision 64 bit signed integer type. + /// Medium precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8); - /// Medium precision 8 bit signed integer type. + /// Medium precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1); - /// Medium precision 16 bit signed integer type. + /// Medium precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2); - /// Medium precision 32 bit signed integer type. + /// Medium precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4); - /// Medium precision 64 bit signed integer type. + /// Medium precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8); - /// Medium precision 8 bit signed integer type. + /// Medium precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1); - /// Medium precision 16 bit signed integer type. + /// Medium precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2); - /// Medium precision 32 bit signed integer type. + /// Medium precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4); - /// Medium precision 64 bit signed integer type. + /// Medium precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8); - /// High precision 8 bit signed integer type. + /// High precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1); - /// High precision 16 bit signed integer type. + /// High precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2); - /// High precision 32 bit signed integer type. + /// High precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4); - /// High precision 64 bit signed integer type. + /// High precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8); - /// High precision 8 bit signed integer type. + /// High precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1); - /// High precision 16 bit signed integer type. + /// High precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2); - /// High precision 32 bit signed integer type. + /// High precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4); - /// High precision 64 bit signed integer type. + /// High precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8); - /// High precision 8 bit signed integer type. + /// High precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1); - /// High precision 16 bit signed integer type. + /// High precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2); - /// High precision 32 bit signed integer type. + /// High precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4); - /// High precision 64 bit signed integer type. + /// High precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8); - /// Default precision 8 bit signed integer type. + /// Default precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1); - /// Default precision 16 bit signed integer type. + /// Default precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2); - /// Default precision 32 bit signed integer type. + /// Default precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4); - /// Default precision 64 bit signed integer type. + /// Default precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8); - /// Default precision 8 bit signed integer type. + /// Default precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1); - /// Default precision 16 bit signed integer type. + /// Default precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2); - /// Default precision 32 bit signed integer type. + /// Default precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4); - /// Default precision 64 bit signed integer type. + /// Default precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8); - /// Default precision 8 bit signed integer type. + /// Default precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1); - /// Default precision 16 bit signed integer type. + /// Default precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2); - /// Default precision 32 bit signed integer type. + /// Default precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4); - /// Default precision 64 bit signed integer type. + /// Default precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); - /// Default precision 32 bit signed integer scalar type. + /// Default precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4); - /// Default precision 32 bit signed integer vector of 2 components type. + /// Default precision 32 bit signed integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8); - /// Default precision 32 bit signed integer vector of 3 components type. + /// Default precision 32 bit signed integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16); - /// Default precision 32 bit signed integer vector of 4 components type. + /// Default precision 32 bit signed integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16); - /// Default precision 8 bit signed integer scalar type. + /// Default precision 8 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); - /// Default precision 8 bit signed integer vector of 2 components type. + /// Default precision 8 bit signed integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2); - /// Default precision 8 bit signed integer vector of 3 components type. + /// Default precision 8 bit signed integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4); - /// Default precision 8 bit signed integer vector of 4 components type. + /// Default precision 8 bit signed integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4); - /// Default precision 16 bit signed integer scalar type. + /// Default precision 16 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2); - /// Default precision 16 bit signed integer vector of 2 components type. + /// Default precision 16 bit signed integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4); - /// Default precision 16 bit signed integer vector of 3 components type. + /// Default precision 16 bit signed integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8); - /// Default precision 16 bit signed integer vector of 4 components type. + /// Default precision 16 bit signed integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8); - /// Default precision 32 bit signed integer scalar type. + /// Default precision 32 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4); - /// Default precision 32 bit signed integer vector of 2 components type. + /// Default precision 32 bit signed integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8); - /// Default precision 32 bit signed integer vector of 3 components type. + /// Default precision 32 bit signed integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16); - /// Default precision 32 bit signed integer vector of 4 components type. + /// Default precision 32 bit signed integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16); - /// Default precision 64 bit signed integer scalar type. + /// Default precision 64 bit signed integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8); - /// Default precision 64 bit signed integer vector of 2 components type. + /// Default precision 64 bit signed integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16); - /// Default precision 64 bit signed integer vector of 3 components type. + /// Default precision 64 bit signed integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32); - /// Default precision 64 bit signed integer vector of 4 components type. + /// Default precision 64 bit signed integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32); @@ -347,291 +347,291 @@ namespace glm ///////////////////////////// // Unsigned int vector types - /// Low precision 8 bit unsigned integer type. + /// Low precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1); - /// Low precision 16 bit unsigned integer type. + /// Low precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2); - /// Low precision 32 bit unsigned integer type. + /// Low precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4); - /// Low precision 64 bit unsigned integer type. + /// Low precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8); - /// Low precision 8 bit unsigned integer type. + /// Low precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1); - /// Low precision 16 bit unsigned integer type. + /// Low precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2); - /// Low precision 32 bit unsigned integer type. + /// Low precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4); - /// Low precision 64 bit unsigned integer type. + /// Low precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8); - /// Low precision 8 bit unsigned integer type. + /// Low precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1); - /// Low precision 16 bit unsigned integer type. + /// Low precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2); - /// Low precision 32 bit unsigned integer type. + /// Low precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4); - /// Low precision 64 bit unsigned integer type. + /// Low precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8); - /// Medium precision 8 bit unsigned integer type. + /// Medium precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1); - /// Medium precision 16 bit unsigned integer type. + /// Medium precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2); - /// Medium precision 32 bit unsigned integer type. + /// Medium precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4); - /// Medium precision 64 bit unsigned integer type. + /// Medium precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8); - /// Medium precision 8 bit unsigned integer type. + /// Medium precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1); - /// Medium precision 16 bit unsigned integer type. + /// Medium precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2); - /// Medium precision 32 bit unsigned integer type. + /// Medium precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4); - /// Medium precision 64 bit unsigned integer type. + /// Medium precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8); - /// Medium precision 8 bit unsigned integer type. + /// Medium precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1); - /// Medium precision 16 bit unsigned integer type. + /// Medium precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2); - /// Medium precision 32 bit unsigned integer type. + /// Medium precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4); - /// Medium precision 64 bit unsigned integer type. + /// Medium precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8); - /// High precision 8 bit unsigned integer type. + /// High precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1); - /// High precision 16 bit unsigned integer type. + /// High precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2); - /// High precision 32 bit unsigned integer type. + /// High precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4); - /// High precision 64 bit unsigned integer type. + /// High precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8); - /// High precision 8 bit unsigned integer type. + /// High precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1); - /// High precision 16 bit unsigned integer type. + /// High precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2); - /// High precision 32 bit unsigned integer type. + /// High precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4); - /// High precision 64 bit unsigned integer type. + /// High precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8); - /// High precision 8 bit unsigned integer type. + /// High precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1); - /// High precision 16 bit unsigned integer type. + /// High precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2); - /// High precision 32 bit unsigned integer type. + /// High precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4); - /// High precision 64 bit unsigned integer type. + /// High precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8); - /// Default precision 8 bit unsigned integer type. + /// Default precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1); - /// Default precision 16 bit unsigned integer type. + /// Default precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2); - /// Default precision 32 bit unsigned integer type. + /// Default precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4); - /// Default precision 64 bit unsigned integer type. + /// Default precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8); - /// Default precision 8 bit unsigned integer type. + /// Default precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1); - /// Default precision 16 bit unsigned integer type. + /// Default precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2); - /// Default precision 32 bit unsigned integer type. + /// Default precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4); - /// Default precision 64 bit unsigned integer type. + /// Default precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8); - /// Default precision 8 bit unsigned integer type. + /// Default precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1); - /// Default precision 16 bit unsigned integer type. + /// Default precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2); - /// Default precision 32 bit unsigned integer type. + /// Default precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4); - /// Default precision 64 bit unsigned integer type. + /// Default precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); - /// Default precision 32 bit unsigned integer scalar type. + /// Default precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4); - /// Default precision 32 bit unsigned integer vector of 2 components type. + /// Default precision 32 bit unsigned integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8); - /// Default precision 32 bit unsigned integer vector of 3 components type. + /// Default precision 32 bit unsigned integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16); - /// Default precision 32 bit unsigned integer vector of 4 components type. + /// Default precision 32 bit unsigned integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16); - /// Default precision 8 bit unsigned integer scalar type. + /// Default precision 8 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); - /// Default precision 8 bit unsigned integer vector of 2 components type. + /// Default precision 8 bit unsigned integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2); - /// Default precision 8 bit unsigned integer vector of 3 components type. + /// Default precision 8 bit unsigned integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4); - /// Default precision 8 bit unsigned integer vector of 4 components type. + /// Default precision 8 bit unsigned integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4); - /// Default precision 16 bit unsigned integer scalar type. + /// Default precision 16 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2); - /// Default precision 16 bit unsigned integer vector of 2 components type. + /// Default precision 16 bit unsigned integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4); - /// Default precision 16 bit unsigned integer vector of 3 components type. + /// Default precision 16 bit unsigned integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8); - /// Default precision 16 bit unsigned integer vector of 4 components type. + /// Default precision 16 bit unsigned integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8); - /// Default precision 32 bit unsigned integer scalar type. + /// Default precision 32 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4); - /// Default precision 32 bit unsigned integer vector of 2 components type. + /// Default precision 32 bit unsigned integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8); - /// Default precision 32 bit unsigned integer vector of 3 components type. + /// Default precision 32 bit unsigned integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16); - /// Default precision 32 bit unsigned integer vector of 4 components type. + /// Default precision 32 bit unsigned integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16); - /// Default precision 64 bit unsigned integer scalar type. + /// Default precision 64 bit unsigned integer aligned scalar type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8); - /// Default precision 64 bit unsigned integer vector of 2 components type. + /// Default precision 64 bit unsigned integer aligned vector of 2 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16); - /// Default precision 64 bit unsigned integer vector of 3 components type. + /// Default precision 64 bit unsigned integer aligned vector of 3 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32); - /// Default precision 64 bit unsigned integer vector of 4 components type. + /// Default precision 64 bit unsigned integer aligned vector of 4 components type. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32); @@ -639,114 +639,114 @@ namespace glm ////////////////////// // Float vector types - /// 32 bit single-precision floating-point scalar. + /// 32 bit single-precision floating-point aligned scalar. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4); - /// 64 bit double-precision floating-point scalar. + /// 64 bit double-precision floating-point aligned scalar. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8); - /// 32 bit single-precision floating-point scalar. + /// 32 bit single-precision floating-point aligned scalar. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4); - /// 64 bit double-precision floating-point scalar. + /// 64 bit double-precision floating-point aligned scalar. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8); - /// 32 bit single-precision floating-point scalar. + /// 32 bit single-precision floating-point aligned scalar. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4); - /// 64 bit double-precision floating-point scalar. + /// 64 bit double-precision floating-point aligned scalar. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); - /// Single-precision floating-point vector of 1 component. + /// Single-precision floating-point aligned vector of 1 component. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4); - /// Single-precision floating-point vector of 2 components. + /// Single-precision floating-point aligned vector of 2 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8); - /// Single-precision floating-point vector of 3 components. + /// Single-precision floating-point aligned vector of 3 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16); - /// Single-precision floating-point vector of 4 components. + /// Single-precision floating-point aligned vector of 4 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16); - /// Single-precision floating-point vector of 1 component. + /// Single-precision floating-point aligned vector of 1 component. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); - /// Single-precision floating-point vector of 2 components. + /// Single-precision floating-point aligned vector of 2 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8); - /// Single-precision floating-point vector of 3 components. + /// Single-precision floating-point aligned vector of 3 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16); - /// Single-precision floating-point vector of 4 components. + /// Single-precision floating-point aligned vector of 4 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16); - /// Single-precision floating-point vector of 1 component. + /// Single-precision floating-point aligned vector of 1 component. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4); - /// Single-precision floating-point vector of 2 components. + /// Single-precision floating-point aligned vector of 2 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8); - /// Single-precision floating-point vector of 3 components. + /// Single-precision floating-point aligned vector of 3 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16); - /// Single-precision floating-point vector of 4 components. + /// Single-precision floating-point aligned vector of 4 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); - /// Double-precision floating-point vector of 1 component. + /// Double-precision floating-point aligned vector of 1 component. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8); - /// Double-precision floating-point vector of 2 components. + /// Double-precision floating-point aligned vector of 2 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16); - /// Double-precision floating-point vector of 3 components. + /// Double-precision floating-point aligned vector of 3 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32); - /// Double-precision floating-point vector of 4 components. + /// Double-precision floating-point aligned vector of 4 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32); - /// Double-precision floating-point vector of 1 component. + /// Double-precision floating-point aligned vector of 1 component. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); - /// Double-precision floating-point vector of 2 components. + /// Double-precision floating-point aligned vector of 2 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16); - /// Double-precision floating-point vector of 3 components. + /// Double-precision floating-point aligned vector of 3 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32); - /// Double-precision floating-point vector of 4 components. + /// Double-precision floating-point aligned vector of 4 components. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32); @@ -754,210 +754,210 @@ namespace glm ////////////////////// // Float matrix types - /// Single-precision floating-point 1x1 matrix. + /// Single-precision floating-point aligned 1x1 matrix. /// @see gtc_type_aligned //typedef detail::tmat1 mat1; - /// Single-precision floating-point 2x2 matrix. + /// Single-precision floating-point aligned 2x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16); - /// Single-precision floating-point 3x3 matrix. + /// Single-precision floating-point aligned 3x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16); - /// Single-precision floating-point 4x4 matrix. + /// Single-precision floating-point aligned 4x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16); - /// Single-precision floating-point 1x1 matrix. + /// Single-precision floating-point aligned 1x1 matrix. /// @see gtc_type_aligned //typedef detail::tmat1x1 mat1; - /// Single-precision floating-point 2x2 matrix. + /// Single-precision floating-point aligned 2x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16); - /// Single-precision floating-point 3x3 matrix. + /// Single-precision floating-point aligned 3x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16); - /// Single-precision floating-point 4x4 matrix. + /// Single-precision floating-point aligned 4x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16); - /// Single-precision floating-point 1x1 matrix. + /// Single-precision floating-point aligned 1x1 matrix. /// @see gtc_type_aligned //typedef detail::tmat1x1 fmat1; - /// Single-precision floating-point 2x2 matrix. + /// Single-precision floating-point aligned 2x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16); - /// Single-precision floating-point 3x3 matrix. + /// Single-precision floating-point aligned 3x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16); - /// Single-precision floating-point 4x4 matrix. + /// Single-precision floating-point aligned 4x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16); - /// Single-precision floating-point 1x1 matrix. + /// Single-precision floating-point aligned 1x1 matrix. /// @see gtc_type_aligned //typedef f32 fmat1x1; - /// Single-precision floating-point 2x2 matrix. + /// Single-precision floating-point aligned 2x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16); - /// Single-precision floating-point 2x3 matrix. + /// Single-precision floating-point aligned 2x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16); - /// Single-precision floating-point 2x4 matrix. + /// Single-precision floating-point aligned 2x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16); - /// Single-precision floating-point 3x2 matrix. + /// Single-precision floating-point aligned 3x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16); - /// Single-precision floating-point 3x3 matrix. + /// Single-precision floating-point aligned 3x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16); - /// Single-precision floating-point 3x4 matrix. + /// Single-precision floating-point aligned 3x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16); - /// Single-precision floating-point 4x2 matrix. + /// Single-precision floating-point aligned 4x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16); - /// Single-precision floating-point 4x3 matrix. + /// Single-precision floating-point aligned 4x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16); - /// Single-precision floating-point 4x4 matrix. + /// Single-precision floating-point aligned 4x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16); - /// Single-precision floating-point 1x1 matrix. + /// Single-precision floating-point aligned 1x1 matrix. /// @see gtc_type_aligned //typedef detail::tmat1x1 f32mat1; - /// Single-precision floating-point 2x2 matrix. + /// Single-precision floating-point aligned 2x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16); - /// Single-precision floating-point 3x3 matrix. + /// Single-precision floating-point aligned 3x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16); - /// Single-precision floating-point 4x4 matrix. + /// Single-precision floating-point aligned 4x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16); - /// Single-precision floating-point 1x1 matrix. + /// Single-precision floating-point aligned 1x1 matrix. /// @see gtc_type_aligned //typedef f32 f32mat1x1; - /// Single-precision floating-point 2x2 matrix. + /// Single-precision floating-point aligned 2x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16); - /// Single-precision floating-point 2x3 matrix. + /// Single-precision floating-point aligned 2x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16); - /// Single-precision floating-point 2x4 matrix. + /// Single-precision floating-point aligned 2x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16); - /// Single-precision floating-point 3x2 matrix. + /// Single-precision floating-point aligned 3x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16); - /// Single-precision floating-point 3x3 matrix. + /// Single-precision floating-point aligned 3x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16); - /// Single-precision floating-point 3x4 matrix. + /// Single-precision floating-point aligned 3x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16); - /// Single-precision floating-point 4x2 matrix. + /// Single-precision floating-point aligned 4x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16); - /// Single-precision floating-point 4x3 matrix. + /// Single-precision floating-point aligned 4x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16); - /// Single-precision floating-point 4x4 matrix. + /// Single-precision floating-point aligned 4x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16); - /// Double-precision floating-point 1x1 matrix. + /// Double-precision floating-point aligned 1x1 matrix. /// @see gtc_type_aligned //typedef detail::tmat1x1 f64mat1; - /// Double-precision floating-point 2x2 matrix. + /// Double-precision floating-point aligned 2x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32); - /// Double-precision floating-point 3x3 matrix. + /// Double-precision floating-point aligned 3x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32); - /// Double-precision floating-point 4x4 matrix. + /// Double-precision floating-point aligned 4x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32); - /// Double-precision floating-point 1x1 matrix. + /// Double-precision floating-point aligned 1x1 matrix. /// @see gtc_type_aligned //typedef f64 f64mat1x1; - /// Double-precision floating-point 2x2 matrix. + /// Double-precision floating-point aligned 2x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32); - /// Double-precision floating-point 2x3 matrix. + /// Double-precision floating-point aligned 2x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32); - /// Double-precision floating-point 2x4 matrix. + /// Double-precision floating-point aligned 2x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32); - /// Double-precision floating-point 3x2 matrix. + /// Double-precision floating-point aligned 3x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32); - /// Double-precision floating-point 3x3 matrix. + /// Double-precision floating-point aligned 3x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32); - /// Double-precision floating-point 3x4 matrix. + /// Double-precision floating-point aligned 3x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32); - /// Double-precision floating-point 4x2 matrix. + /// Double-precision floating-point aligned 4x2 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32); - /// Double-precision floating-point 4x3 matrix. + /// Double-precision floating-point aligned 4x3 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32); - /// Double-precision floating-point 4x4 matrix. + /// Double-precision floating-point aligned 4x4 matrix. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32); @@ -965,23 +965,23 @@ namespace glm ////////////////////////// // Quaternion types - /// Single-precision floating-point quaternion. + /// Single-precision floating-point aligned quaternion. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16); - /// Single-precision floating-point quaternion. + /// Single-precision floating-point aligned quaternion. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(fquat, aligned_fquat, 16); - /// Double-precision floating-point quaternion. + /// Double-precision floating-point aligned quaternion. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32); - /// Single-precision floating-point quaternion. + /// Single-precision floating-point aligned quaternion. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); - /// Double-precision floating-point quaternion. + /// Double-precision floating-point aligned quaternion. /// @see gtc_type_aligned GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32); diff --git a/test/gtc/gtc_type_aligned.cpp b/test/gtc/gtc_type_aligned.cpp index 7c2b2c03..12ac5949 100644 --- a/test/gtc/gtc_type_aligned.cpp +++ b/test/gtc/gtc_type_aligned.cpp @@ -8,12 +8,103 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// #include +#include + +typedef __declspec(align(1)) glm::vec3 unaligned_vec3; int test_decl() { - + int Error(0); - return 0; + { + struct S1 + { + glm::aligned_vec4 B; + }; + + struct S2 + { + glm::vec4 B; + }; + + printf("vec4 - Aligned: %d, unaligned: %d\n", sizeof(S1), sizeof(S2)); + + Error += sizeof(S1) >= sizeof(S2) ? 0 : 1; + } + + { + struct S1 + { + bool A; + glm::vec3 B; + }; + + struct S2 + { + bool A; + glm::aligned_vec3 B; + }; + + struct S3 + { + bool A; + unaligned_vec3 B; + }; + + struct S4 + { + short B; + bool A; + }; + + struct S5 + { + bool A; + float B[3]; + }; + + printf("vec3: %d, aligned: %d, unaligned: %d, bool: %d, array: %d\n", sizeof(S1), sizeof(S2), sizeof(S3), sizeof(S4), sizeof(S5)); + + Error += sizeof(S1) <= sizeof(S2) ? 0 : 1; + } + + { + struct S1 + { + bool A; + glm::aligned_vec4 B; + }; + + struct S2 + { + bool A; + glm::vec4 B; + }; + + printf("vec4 - Aligned: %d, unaligned: %d\n", sizeof(S1), sizeof(S2)); + + Error += sizeof(S1) >= sizeof(S2) ? 0 : 1; + } + + { + struct S1 + { + bool A; + glm::aligned_dvec4 B; + }; + + struct S2 + { + bool A; + glm::dvec4 B; + }; + + printf("dvec4 - Aligned: %d, unaligned: %d\n", sizeof(S1), sizeof(S2)); + + Error += sizeof(S1) >= sizeof(S2) ? 0 : 1; + } + + return Error; } int main() From 7621a735a3f59d70b86aebc247e66540eed8d7c4 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 23 Nov 2014 20:58:09 +0100 Subject: [PATCH 23/64] Move GTC_type_aligned to GTX extensions --- glm/{gtc => gtx}/type_aligned.hpp | 0 glm/{gtc => gtx}/type_aligned.inl | 0 readme.txt | 2 +- test/gtc/CMakeLists.txt | 1 - test/gtx/CMakeLists.txt | 1 + test/{gtc/gtc_type_aligned.cpp => gtx/gtx_type_aligned.cpp} | 0 6 files changed, 2 insertions(+), 2 deletions(-) rename glm/{gtc => gtx}/type_aligned.hpp (100%) rename glm/{gtc => gtx}/type_aligned.inl (100%) rename test/{gtc/gtc_type_aligned.cpp => gtx/gtx_type_aligned.cpp} (100%) diff --git a/glm/gtc/type_aligned.hpp b/glm/gtx/type_aligned.hpp similarity index 100% rename from glm/gtc/type_aligned.hpp rename to glm/gtx/type_aligned.hpp diff --git a/glm/gtc/type_aligned.inl b/glm/gtx/type_aligned.inl similarity index 100% rename from glm/gtc/type_aligned.inl rename to glm/gtx/type_aligned.inl diff --git a/readme.txt b/readme.txt index 32c8f410..45e18d41 100644 --- a/readme.txt +++ b/readme.txt @@ -58,7 +58,7 @@ Features: - Added GTC_integer extension, promoted GTX_bit and GTX_integer - Added GTC_round extension, promoted GTX_bit - Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269 -- Added GTC_type_aligned for aligned vector and matrix types +- Added GTX_type_aligned for aligned vector, matrix and quaternion types Improvements: - Rely on C++11 to implement isinf and isnan diff --git a/test/gtc/CMakeLists.txt b/test/gtc/CMakeLists.txt index 42c2e84d..224b8eb5 100644 --- a/test/gtc/CMakeLists.txt +++ b/test/gtc/CMakeLists.txt @@ -12,7 +12,6 @@ glmCreateTestGTC(gtc_quaternion) glmCreateTestGTC(gtc_random) glmCreateTestGTC(gtc_round) glmCreateTestGTC(gtc_reciprocal) -glmCreateTestGTC(gtc_type_aligned) glmCreateTestGTC(gtc_type_precision) glmCreateTestGTC(gtc_type_ptr) glmCreateTestGTC(gtc_ulp) diff --git a/test/gtx/CMakeLists.txt b/test/gtx/CMakeLists.txt index 1b72c6ff..e5e109c6 100644 --- a/test/gtx/CMakeLists.txt +++ b/test/gtx/CMakeLists.txt @@ -46,5 +46,6 @@ glmCreateTestGTC(gtx_simd_vec4) glmCreateTestGTC(gtx_simd_mat4) glmCreateTestGTC(gtx_spline) glmCreateTestGTC(gtx_string_cast) +glmCreateTestGTC(gtx_type_aligned) glmCreateTestGTC(gtx_vector_angle) glmCreateTestGTC(gtx_vector_query) diff --git a/test/gtc/gtc_type_aligned.cpp b/test/gtx/gtx_type_aligned.cpp similarity index 100% rename from test/gtc/gtc_type_aligned.cpp rename to test/gtx/gtx_type_aligned.cpp From 97182990a7473067887a535cca06110defb0c95a Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 23 Nov 2014 21:00:17 +0100 Subject: [PATCH 24/64] Move GTC_type_aligned to GTX extensions --- glm/ext.hpp | 1 + test/gtx/gtx_type_aligned.cpp | 24 ++---------------------- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/glm/ext.hpp b/glm/ext.hpp index ea0b009e..7a9dde77 100644 --- a/glm/ext.hpp +++ b/glm/ext.hpp @@ -125,6 +125,7 @@ #endif #include "./gtx/transform.hpp" #include "./gtx/transform2.hpp" +#include "./gtx/type_aligned.hpp" #include "./gtx/vector_angle.hpp" #include "./gtx/vector_query.hpp" #include "./gtx/wrap.hpp" diff --git a/test/gtx/gtx_type_aligned.cpp b/test/gtx/gtx_type_aligned.cpp index 12ac5949..061cf3f5 100644 --- a/test/gtx/gtx_type_aligned.cpp +++ b/test/gtx/gtx_type_aligned.cpp @@ -7,11 +7,9 @@ // File : test/gtc/type_aligned.cpp /////////////////////////////////////////////////////////////////////////////////////////////////// -#include +#include #include -typedef __declspec(align(1)) glm::vec3 unaligned_vec3; - int test_decl() { int Error(0); @@ -45,25 +43,7 @@ int test_decl() glm::aligned_vec3 B; }; - struct S3 - { - bool A; - unaligned_vec3 B; - }; - - struct S4 - { - short B; - bool A; - }; - - struct S5 - { - bool A; - float B[3]; - }; - - printf("vec3: %d, aligned: %d, unaligned: %d, bool: %d, array: %d\n", sizeof(S1), sizeof(S2), sizeof(S3), sizeof(S4), sizeof(S5)); + printf("vec3: %d, aligned: %d\n", sizeof(S1), sizeof(S2)); Error += sizeof(S1) <= sizeof(S2) ? 0 : 1; } From bddce172f728a572b96b20164689033ad658ea95 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 23 Nov 2014 21:14:08 +0100 Subject: [PATCH 25/64] Fixed Clang and LLVM detections --- glm/detail/_features.hpp | 4 ++-- glm/detail/func_common.inl | 4 ++-- glm/detail/setup.hpp | 13 ++++++++----- glm/detail/type_int.hpp | 7 ++----- glm/gtc/packing.inl | 8 ++++---- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/glm/detail/_features.hpp b/glm/detail/_features.hpp index 936672fd..a745fd5e 100644 --- a/glm/detail/_features.hpp +++ b/glm/detail/_features.hpp @@ -280,7 +280,7 @@ # define GLM_CXX11_STATIC_ASSERT # endif -#elif(GLM_COMPILER & GLM_COMPILER_CLANG) +#elif(GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) # if(__has_feature(cxx_exceptions)) # define GLM_CXX98_EXCEPTIONS # endif @@ -421,4 +421,4 @@ # define GLM_CXX11_VARIADIC_TEMPLATES # endif -#endif//(GLM_COMPILER & GLM_COMPILER_CLANG) +#endif//(GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index c26c0b51..ea689db6 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -539,7 +539,7 @@ namespace detail return std::isnan(x); # elif GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL) return _isnan(x) != 0; -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) +# elif GLM_COMPILER & (GLM_COMPILER_GCC | (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) # if GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L return _isnan(x) != 0; # else @@ -573,7 +573,7 @@ namespace detail return std::isinf(x); # elif(GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)) return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; -# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) +# elif(GLM_COMPILER & (GLM_COMPILER_GCC | (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM))) # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L) return _isinf(x) != 0; # else diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index cbd306e5..2bea91a0 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -292,8 +292,10 @@ # pragma message("GLM: CUDA compiler detected") # elif GLM_COMPILER & GLM_COMPILER_VC # pragma message("GLM: Visual C++ compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_CLANG +# elif GLM_COMPILER & GLM_COMPILER_APPLE_CLANG # pragma message("GLM: Clang compiler detected") +# elif GLM_COMPILER & GLM_COMPILER_LLVM +# pragma message("GLM: LLVM compiler detected") # elif GLM_COMPILER & GLM_COMPILER_INTEL # pragma message("GLM: Intel Compiler detected") # elif GLM_COMPILER & GLM_COMPILER_GCC @@ -470,7 +472,8 @@ (GLM_LANG & GLM_LANG_CXX11_FLAG) || \ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012)) || \ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG) && (GLM_COMPILER >= GLM_COMPILER_CLANG29))) + ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_LLVM) && (GLM_COMPILER >= GLM_COMPILER_LLVM30)) || \ + ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_APPLE_CLANG) && (GLM_COMPILER >= GLM_COMPILER_APPLE_CLANG40))) // N2235 #define GLM_HAS_CONSTEXPR ( \ @@ -579,7 +582,7 @@ # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2) #elif defined(GLM_FORCE_SSE2) # define GLM_ARCH (GLM_ARCH_SSE2) -#elif (GLM_COMPILER & GLM_COMPILER_CLANG) || (GLM_COMPILER & GLM_COMPILER_GCC) +#elif GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM | GLM_COMPILER_GCC) # if(__AVX2__) # define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2) # elif(__AVX__) @@ -703,7 +706,7 @@ # elif GLM_COMPILER & GLM_COMPILER_GCC # define GLM_INLINE inline __attribute__((__always_inline__)) # define GLM_NEVER_INLINE __attribute__((__noinline__)) -# elif GLM_COMPILER & GLM_COMPILER_CLANG +# elif GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM) # define GLM_INLINE __attribute__((__always_inline__)) # define GLM_NEVER_INLINE __attribute__((__noinline__)) # else @@ -742,7 +745,7 @@ # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name # define GLM_RESTRICT __declspec(restrict) # define GLM_RESTRICT_VAR __restrict -#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_CUDA | GLM_COMPILER_INTEL) +#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM | GLM_COMPILER_CUDA | GLM_COMPILER_INTEL) # define GLM_DEPRECATED __attribute__((__deprecated__)) # define GLM_ALIGN(x) __attribute__((aligned(x))) # define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x))) diff --git a/glm/detail/type_int.hpp b/glm/detail/type_int.hpp index 26dc6ac6..17d4d7c9 100644 --- a/glm/detail/type_int.hpp +++ b/glm/detail/type_int.hpp @@ -52,15 +52,12 @@ namespace detail # if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available typedef int64_t sint64; typedef uint64_t uint64; -# elif(GLM_COMPILER & GLM_COMPILER_VC) +# elif GLM_COMPILER & GLM_COMPILER_VC typedef signed __int64 sint64; typedef unsigned __int64 uint64; -# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG)) +# elif GLM_COMPILER & GLM_COMPILER_GCC __extension__ typedef signed long long sint64; __extension__ typedef unsigned long long uint64; -# elif(GLM_COMPILER & GLM_COMPILER_BC) - typedef Int64 sint64; - typedef Uint64 uint64; # else//unknown compiler typedef signed long long sint64; typedef unsigned long long uint64; diff --git a/glm/gtc/packing.inl b/glm/gtc/packing.inl index 571d0f4d..e8ee5676 100644 --- a/glm/gtc/packing.inl +++ b/glm/gtc/packing.inl @@ -146,7 +146,7 @@ namespace detail else if(glm::isinf(x)) return 0x1f << 6; -# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & GLM_COMPILER_CLANG) +# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) uint Pack = 0; memcpy(&Pack, &x, sizeof(Pack)); # else @@ -167,7 +167,7 @@ namespace detail uint Result = packed11ToFloat(x); -# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & GLM_COMPILER_CLANG) +# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) float Temp = 0; memcpy(&Temp, &Result, sizeof(Temp)); return Temp; @@ -185,7 +185,7 @@ namespace detail else if(glm::isinf(x)) return 0x1f << 5; -# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & GLM_COMPILER_CLANG) +# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) uint Pack = 0; memcpy(&Pack, &x, sizeof(Pack)); # else @@ -206,7 +206,7 @@ namespace detail uint Result = packed10ToFloat(x); -# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & GLM_COMPILER_CLANG) +# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) float Temp = 0; memcpy(&Temp, &Result, sizeof(Temp)); return Temp; From 117634c7eaadf50f18d032326ba3206ee772049d Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 23 Nov 2014 22:13:22 +0100 Subject: [PATCH 26/64] Fixed GCC build issue on new alignment types. More simd stuff to vec4 --- glm/detail/func_common.inl | 3 +-- glm/detail/setup.hpp | 2 +- glm/detail/type_vec4.hpp | 31 +++++++++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index ea689db6..d36b2b15 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -526,9 +526,8 @@ namespace detail return tmp * tmp * (static_cast(3) - static_cast(2) * tmp); } - // TODO: Not working on MinGW... # if GLM_HAS_CXX11_STL - usign std::isnan; + using std::isnan; # else template GLM_FUNC_QUALIFIER bool isnan(genType x) diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index 2bea91a0..a7af28b8 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -749,7 +749,7 @@ # define GLM_DEPRECATED __attribute__((__deprecated__)) # define GLM_ALIGN(x) __attribute__((aligned(x))) # define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x))) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(x))) +# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment))) # define GLM_RESTRICT __restrict__ # define GLM_RESTRICT_VAR __restrict__ #else diff --git a/glm/detail/type_vec4.hpp b/glm/detail/type_vec4.hpp index 75ced992..9edd8f5b 100644 --- a/glm/detail/type_vec4.hpp +++ b/glm/detail/type_vec4.hpp @@ -49,21 +49,48 @@ namespace detail typedef T type[4]; }; -# if(GLM_ARCH & GLM_ARCH_SSE2) +# if GLM_ARCH & GLM_ARCH_SSE2 template <> struct simd { typedef __m128 type; }; + + template <> + struct simd + { + typedef __m128i type; + }; + + template <> + struct simd + { + typedef __m128i type; + }; # endif -# if(GLM_ARCH & GLM_ARCH_AVX) +# if GLM_ARCH & GLM_ARCH_AVX template <> struct simd { typedef __m256d type; }; # endif + +# if GLM_ARCH & GLM_ARCH_AVX2 + template <> + struct simd + { + typedef __m256i type; + }; + + template <> + struct simd + { + typedef __m256i type; + }; +# endif + }//namespace detail template From e8fbcf76ddcee6862165a37b602df4aabbba5f63 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Mon, 24 Nov 2014 01:56:36 +0100 Subject: [PATCH 27/64] Optimizations of log2 for ivec4 --- glm/detail/func_exponential.inl | 36 +++++----- glm/detail/setup.hpp | 11 +-- glm/gtc/integer.inl | 36 +++++++--- test/core/core_func_common.cpp | 6 -- test/gtc/gtc_integer.cpp | 122 ++++++++++++++++++++++++++++++++ 5 files changed, 171 insertions(+), 40 deletions(-) diff --git a/glm/detail/func_exponential.inl b/glm/detail/func_exponential.inl index 806c4ba4..80230960 100644 --- a/glm/detail/func_exponential.inl +++ b/glm/detail/func_exponential.inl @@ -35,20 +35,22 @@ namespace glm{ namespace detail { - template - struct compute_log2{}; - - template <> - struct compute_log2 - { - template - GLM_FUNC_QUALIFIER T operator() (T Value) const +# if GLM_LANG & GLM_LANG_CXX11_FLAG + using std::log2; +# else + template + genType log2(genType Value) { -# if GLM_LANG & GLM_LANG_CXX11_FLAG - return std::log2(Value); -# else - return std::log(Value) * static_cast(1.4426950408889634073599246810019); -# endif + return std::log(Value) * static_cast(1.4426950408889634073599246810019); + } +# endif + + template class vecType, bool isFloat = true> + struct compute_log2 + { + GLM_FUNC_QUALIFIER static vecType call(vecType const & vec) + { + return detail::functor1::call(log2, vec); } }; @@ -121,17 +123,13 @@ namespace detail template GLM_FUNC_QUALIFIER genType log2(genType x) { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, - "GLM core 'log2' only accept floating-point inputs. Include for additional integer support."); - - assert(x > genType(0)); // log2 is only defined on the range (0, inf] - return detail::compute_log2::is_iec559>()(x); + return log2(tvec1(x)).x; } template class vecType> GLM_FUNC_QUALIFIER vecType log2(vecType const & x) { - return detail::functor1::call(log2, x); + return detail::compute_log2::is_iec559>::call(x); } // sqrt diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index a7af28b8..ed825ef7 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -564,11 +564,12 @@ // User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2 #define GLM_ARCH_PURE 0x0000 -#define GLM_ARCH_SSE2 0x0001 -#define GLM_ARCH_SSE3 0x0002 -#define GLM_ARCH_SSE4 0x0004 -#define GLM_ARCH_AVX 0x0008 -#define GLM_ARCH_AVX2 0x0010 +#define GLM_ARCH_X86 0x0001 +#define GLM_ARCH_SSE2 0x0002 +#define GLM_ARCH_SSE3 0x0004 +#define GLM_ARCH_SSE4 0x0008 +#define GLM_ARCH_AVX 0x0010 +#define GLM_ARCH_AVX2 0x0020 #if defined(GLM_FORCE_PURE) # define GLM_ARCH GLM_ARCH_PURE diff --git a/glm/gtc/integer.inl b/glm/gtc/integer.inl index db2d7ff3..5ef3b14f 100644 --- a/glm/gtc/integer.inl +++ b/glm/gtc/integer.inl @@ -29,19 +29,35 @@ namespace glm{ namespace detail { - GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) + template class vecType> + struct compute_log2 { - return 31u - findMSB(x); - } - - template <> - struct compute_log2 - { - template - GLM_FUNC_QUALIFIER T operator() (T const & Value) const + GLM_FUNC_QUALIFIER static vecType call(vecType const & vec) { - return Value <= static_cast(1) ? T(0) : T(32) - nlz(Value - T(1)); + //Equivalent to return findMSB(vec); but save one function call in ASM with VC + //return findMSB(vec); + return detail::compute_findMSB_vec::call(vec); } }; + +# if(GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) + + template + struct compute_log2 + { + GLM_FUNC_QUALIFIER static tvec4 call(tvec4 const & vec) + { + tvec4 Result(glm::uninitialize); + + _BitScanReverse(reinterpret_cast(&Result.x), vec.x); + _BitScanReverse(reinterpret_cast(&Result.y), vec.y); + _BitScanReverse(reinterpret_cast(&Result.z), vec.z); + _BitScanReverse(reinterpret_cast(&Result.w), vec.w); + + return Result; + } + }; + +# endif//GLM_ARCH != GLM_ARCH_PURE }//namespace detail }//namespace glm diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index 3ed22cc1..c542bff5 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -887,12 +887,6 @@ namespace sign Error += Data[i].Return == Result ? 0 : 1; } - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) - { - glm::int32 Result = sign_sub(Data[i].Value); - Error += Data[i].Return == Result ? 0 : 1; - } - return Error; } diff --git a/test/gtc/gtc_integer.cpp b/test/gtc/gtc_integer.cpp index fc89504f..011af9a7 100644 --- a/test/gtc/gtc_integer.cpp +++ b/test/gtc/gtc_integer.cpp @@ -7,9 +7,11 @@ // File : test/gtc/integer.cpp /////////////////////////////////////////////////////////////////////////////////////////////////// +#define GLM_FORCE_INLINE #include #include #include +#include #include #include #include @@ -48,6 +50,126 @@ namespace log2_ int perf() { int Error = 0; + std::size_t const Count(100000000); + + { + std::vector Result; + Result.resize(Count); + + std::clock_t Begin = clock(); + + for(std::size_t i = 0; i < Count; ++i) + Result[i] = glm::log2(static_cast(i)); + + std::clock_t End = clock(); + + printf("glm::log2: %d clocks\n", End - Begin); + } + + { + std::vector Result; + Result.resize(Count); + + std::clock_t Begin = clock(); + + for(std::size_t i = 0; i < Count; ++i) + Result[i] = glm::log2(glm::ivec4(i)); + + std::clock_t End = clock(); + + printf("glm::log2: %d clocks\n", End - Begin); + } + +# if(GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) + { + std::vector Result; + Result.resize(Count); + + std::clock_t Begin = clock(); + + for(std::size_t i = 0; i < Count; ++i) + { + glm::tvec4 Tmp(glm::uninitialize); + _BitScanReverse(&Tmp.x, i); + _BitScanReverse(&Tmp.y, i); + _BitScanReverse(&Tmp.z, i); + _BitScanReverse(&Tmp.w, i); + Result[i] = glm::ivec4(Tmp); + } + + std::clock_t End = clock(); + + printf("glm::log2 inlined: %d clocks\n", End - Begin); + } + + + { + std::vector > Result; + Result.resize(Count); + + std::clock_t Begin = clock(); + + for(std::size_t i = 0; i < Count; ++i) + { + _BitScanReverse(&Result[i].x, i); + _BitScanReverse(&Result[i].y, i); + _BitScanReverse(&Result[i].z, i); + _BitScanReverse(&Result[i].w, i); + } + + std::clock_t End = clock(); + + printf("glm::log2 inlined no cast: %d clocks\n", End - Begin); + } + + + { + std::vector Result; + Result.resize(Count); + + std::clock_t Begin = clock(); + + for(std::size_t i = 0; i < Count; ++i) + { + _BitScanReverse(reinterpret_cast(&Result[i].x), i); + _BitScanReverse(reinterpret_cast(&Result[i].y), i); + _BitScanReverse(reinterpret_cast(&Result[i].z), i); + _BitScanReverse(reinterpret_cast(&Result[i].w), i); + } + + std::clock_t End = clock(); + + printf("glm::log2 reinterpret: %d clocks\n", End - Begin); + } +# endif//GLM_ARCH != GLM_ARCH_PURE + + { + std::vector Result; + Result.resize(Count); + + std::clock_t Begin = clock(); + + for(std::size_t i = 0; i < Count; ++i) + Result[i] = glm::log2(static_cast(i)); + + std::clock_t End = clock(); + + printf("glm::log2: %d clocks\n", End - Begin); + } + + { + std::vector Result; + Result.resize(Count); + + std::clock_t Begin = clock(); + + for(std::size_t i = 0; i < Count; ++i) + Result[i] = glm::log2(glm::vec4(i)); + + std::clock_t End = clock(); + + printf("glm::log2: %d clocks\n", End - Begin); + } return Error; } From d65fb97e47941a59189bb0563a5cdb168e853af3 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Mon, 24 Nov 2014 21:45:47 +0100 Subject: [PATCH 28/64] Added explicit matrix cast to quaternion, updated readme #275 --- readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.txt b/readme.txt index 45e18d41..d456f022 100644 --- a/readme.txt +++ b/readme.txt @@ -78,6 +78,7 @@ Improvements: - Used std features within GLM without redeclaring - Optimized cot function #272 - Optimized sign function #272 +- Added explicit cast from quat to mat3 and mat4 #275 Fixes: - Fixed std::nextafter not supported with C++11 on Android #217 From d12f8330174006575e8b6c33fd6530bb80209dc1 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Mon, 24 Nov 2014 23:19:03 +0100 Subject: [PATCH 29/64] Updated doxygen doc --- doc/pages.doxy | 51 ++++++++++++++------------------------------------ 1 file changed, 14 insertions(+), 37 deletions(-) diff --git a/doc/pages.doxy b/doc/pages.doxy index bb29ac85..148df167 100644 --- a/doc/pages.doxy +++ b/doc/pages.doxy @@ -2,22 +2,21 @@ @mainpage OpenGL Mathematics OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification. - + GLM provides classes and functions designed and implemented with the same naming conventions and functionalities than GLSL so that when a programmer knows GLSL, he knows GLM as well which makes it really easy to use. - - This project isn't limited to GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, half-based types, random numbers, procedural noise functions, etc... - - This library works perfectly with OpenGL but it also ensures interoperability with third party libraries and SDKs. - It is a good candidate for software rendering (Raytracing / Rasterisation), image processing, physic simulations and any context that requires a simple and convenient mathematics library. - GLM is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and officially supports the following compilers: - - Clang 2.6 and higher - - CUDA 3.0 and higher - - GCC 3.4 and higher + This project isn't limited to GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, half-based types, random numbers, noise, etc... + + This library works perfectly with OpenGL but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterisation), image processing, physic simulations and any development context that requires a simple and convenient mathematics library. + + GLM is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers: + - Apple Clang 4.0 and higher + - CUDA 4.0 and higher + - GCC 4.2 and higher + - LLVM 3.0 and higher - Intel C++ Composer XE 2013 and higher - - LLVM 2.3 through GCC 4.2 front-end and higher - - Visual Studio 2005 and higher - - Any conform C++98 or C++11 compiler + - Visual Studio 2010 and higher + - Any conform C++98 compiler @note The Doxygen-generated documentation will often state that a type or function is defined in a namespace that is a child of the @link glm glm @endlink namespace. @@ -28,28 +27,6 @@ These pages are the API reference only. For more information about how to use GLM, please have a look at the manual. - Thanks for contributing to the project by submitting tickets for bug reports and feature requests. - (SF.net account required). Any feedback is welcome at glm@g-truc.net. -**/ - -/*! - @page pg_differences Differences between GLSL and GLM core - - GLM comes very close to replicating GLSL, but it is not exact. Here is a list of - differences between GLM and GLSL: - -

      -
    • - Precision qualifiers. In GLSL numeric types can have qualifiers that define - the precision of that type. While OpenGL's GLSL ignores these qualifiers, OpenGL - ES's version of GLSL uses them. - - C++ has no language equivalent to precision qualifiers. Instead, GLM provides - a set of typedefs for each kind of precision qualifier and type. These types can - be found in @ref core_precision "their own section". - - Functions that take types tend to be templated on those types, so they can - take these qualified types just as well as the regular ones. -
    • -
    + Thanks for contributing to the project by submitting tickets for bug reports and feature requests. + Any feedback is welcome at glm@g-truc.net. **/ From 4f5bd21a5e81e1810203a191eec21b8776b63e6b Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 25 Nov 2014 00:16:03 +0100 Subject: [PATCH 30/64] Doxygen doc fixes --- glm/detail/func_integer.hpp | 31 +++++++++++++----- glm/detail/func_matrix.hpp | 2 -- glm/ext.hpp | 6 +--- glm/gtc/constants.hpp | 1 - glm/gtc/vec1.hpp | 4 +-- glm/gtx/dual_quaternion.hpp | 52 ++++++++++++------------------ glm/gtx/rotate_normalized_axis.hpp | 2 +- glm/gtx/scalar_relational.hpp | 2 +- 8 files changed, 49 insertions(+), 51 deletions(-) diff --git a/glm/detail/func_integer.hpp b/glm/detail/func_integer.hpp index 55552149..7785d559 100644 --- a/glm/detail/func_integer.hpp +++ b/glm/detail/func_integer.hpp @@ -164,8 +164,6 @@ namespace glm /// /// @see GLSL bitCount man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - /// - /// @todo Clarify the declaration to specify that scalars are suported. template GLM_FUNC_DECL int bitCount(genType v); @@ -175,8 +173,6 @@ namespace glm /// /// @see GLSL bitCount man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - /// - /// @todo Clarify the declaration to specify that scalars are suported. template class vecType> GLM_FUNC_DECL vecType bitCount(vecType const & v); @@ -184,12 +180,21 @@ namespace glm /// 1 in the binary representation of value. /// If value is zero, -1 will be returned. /// - /// @tparam T Signed or unsigned integer scalar or vector types. + /// @tparam T Signed or unsigned integer scalar types. /// /// @see GLSL findLSB man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL int findLSB(genIUType x); + + /// Returns the bit number of the least significant bit set to + /// 1 in the binary representation of value. + /// If value is zero, -1 will be returned. /// - /// @todo Clarify the declaration to specify that scalars are suported. + /// @tparam T Signed or unsigned integer scalar types. + /// + /// @see GLSL findLSB man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template class vecType> GLM_FUNC_DECL vecType findLSB(vecType const & v); @@ -198,12 +203,22 @@ namespace glm /// For negative integers, the result will be the bit number of the most significant /// bit set to 0. For a value of zero or negative one, -1 will be returned. /// - /// @tparam T Signed or unsigned integer scalar or vector types. + /// @tparam T Signed or unsigned integer scalar types. /// /// @see GLSL findMSB man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL int findMSB(genIUType x); + + /// Returns the bit number of the most significant bit in the binary representation of value. + /// For positive integers, the result will be the bit number of the most significant bit set to 1. + /// For negative integers, the result will be the bit number of the most significant + /// bit set to 0. For a value of zero or negative one, -1 will be returned. /// - /// @todo Clarify the declaration to specify that scalars are suported. + /// @tparam T Signed or unsigned integer scalar types. + /// + /// @see GLSL findMSB man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template class vecType> GLM_FUNC_DECL vecType findMSB(vecType const & v); diff --git a/glm/detail/func_matrix.hpp b/glm/detail/func_matrix.hpp index 6ad388a9..358bec42 100644 --- a/glm/detail/func_matrix.hpp +++ b/glm/detail/func_matrix.hpp @@ -136,8 +136,6 @@ namespace detail /// /// @see GLSL outerProduct man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - /// - /// @todo Clarify the declaration to specify that matType doesn't have to be provided when used. template class vecTypeA, template class vecTypeB> GLM_FUNC_DECL typename detail::outerProduct_trait::type outerProduct(vecTypeA const & c, vecTypeB const & r); diff --git a/glm/ext.hpp b/glm/ext.hpp index 7a9dde77..4eecb12b 100644 --- a/glm/ext.hpp +++ b/glm/ext.hpp @@ -48,11 +48,6 @@ /// Even if it's highly unrecommended, it's possible to include all the extensions /// at once by including . Otherwise, each extension needs to be /// included a specific file. -/// -/// @defgroup virtrev VIRTREV Extensions -/// -/// @brief Extensions develop and maintain by Mathieu [matrem] Roumillac -/// (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showprofile&User=22660). /////////////////////////////////////////////////////////////////////////////////// #pragma once @@ -65,6 +60,7 @@ #include "./gtc/bitfield.hpp" #include "./gtc/constants.hpp" #include "./gtc/epsilon.hpp" +#include "./gtc/integer.hpp" #include "./gtc/matrix_access.hpp" #include "./gtc/matrix_integer.hpp" #include "./gtc/matrix_inverse.hpp" diff --git a/glm/gtc/constants.hpp b/glm/gtc/constants.hpp index a39c9bd1..b61aacee 100644 --- a/glm/gtc/constants.hpp +++ b/glm/gtc/constants.hpp @@ -51,7 +51,6 @@ namespace glm /// @{ /// Return the epsilon constant for floating point types. - /// @todo Implement epsilon for half-precision floating point type. /// @see gtc_constants template GLM_FUNC_DECL genType epsilon(); diff --git a/glm/gtc/vec1.hpp b/glm/gtc/vec1.hpp index 9ff69cfb..15a5db91 100644 --- a/glm/gtc/vec1.hpp +++ b/glm/gtc/vec1.hpp @@ -27,8 +27,8 @@ /// /// @see core (dependence) /// -/// @defgroup gtc_vec1 GLM_GTX_vec1 -/// @ingroup gtx +/// @defgroup gtc_vec1 GLM_GTC_vec1 +/// @ingroup gtc /// /// @brief Add vec1, ivec1, uvec1 and bvec1 types. /// need to be included to use these functionalities. diff --git a/glm/gtx/dual_quaternion.hpp b/glm/gtx/dual_quaternion.hpp index c12af399..c6915196 100644 --- a/glm/gtx/dual_quaternion.hpp +++ b/glm/gtx/dual_quaternion.hpp @@ -30,8 +30,8 @@ /// @see gtc_constants (dependence) /// @see gtc_quaternion (dependence) /// -/// @defgroup gtc_dual_quaternion GLM_GTX_dual_quaternion -/// @ingroup gtc +/// @defgroup gtx_dual_quaternion GLM_GTX_dual_quaternion +/// @ingroup gtx /// /// @brief Defines a templated dual-quaternion type and several dual-quaternion operations. /// @@ -51,7 +51,7 @@ namespace glm { - /// @addtogroup gtc_dual_quaternion + /// @addtogroup gtx_dual_quaternion /// @{ template @@ -160,7 +160,7 @@ namespace glm /// Returns the normalized quaternion. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion template GLM_FUNC_DECL tdualquat normalize( tdualquat const & q); @@ -176,45 +176,35 @@ namespace glm /// Returns the q inverse. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion template GLM_FUNC_DECL tdualquat inverse( tdualquat const & q); - /* - /// Extracts a rotation part from dual-quaternion to a 3 * 3 matrix. - /// TODO - /// - /// @see gtc_dual_quaternion - template - tmat3x3 mat3_cast( - tdualquat const & x); - */ - /// Converts a quaternion to a 2 * 4 matrix. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion template GLM_FUNC_DECL tmat2x4 mat2x4_cast( tdualquat const & x); /// Converts a quaternion to a 3 * 4 matrix. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion template GLM_FUNC_DECL tmat3x4 mat3x4_cast( tdualquat const & x); /// Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion template GLM_FUNC_DECL tdualquat dualquat_cast( tmat2x4 const & x); /// Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion template GLM_FUNC_DECL tdualquat dualquat_cast( tmat3x4 const & x); @@ -222,61 +212,61 @@ namespace glm /// Dual-quaternion of low single-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef tdualquat lowp_dualquat; /// Dual-quaternion of medium single-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef tdualquat mediump_dualquat; /// Dual-quaternion of high single-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef tdualquat highp_dualquat; /// Dual-quaternion of low single-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef tdualquat lowp_fdualquat; /// Dual-quaternion of medium single-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef tdualquat mediump_fdualquat; /// Dual-quaternion of high single-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef tdualquat highp_fdualquat; /// Dual-quaternion of low double-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef tdualquat lowp_ddualquat; /// Dual-quaternion of medium double-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef tdualquat mediump_ddualquat; /// Dual-quaternion of high double-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef tdualquat highp_ddualquat; #if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) /// Dual-quaternion of floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef highp_fdualquat dualquat; /// Dual-quaternion of single-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef highp_fdualquat fdualquat; #elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) typedef highp_fdualquat dualquat; @@ -295,7 +285,7 @@ namespace glm #if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) /// Dual-quaternion of default double-precision floating-point numbers. /// - /// @see gtc_dual_quaternion + /// @see gtx_dual_quaternion typedef highp_ddualquat ddualquat; #elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) typedef highp_ddualquat ddualquat; diff --git a/glm/gtx/rotate_normalized_axis.hpp b/glm/gtx/rotate_normalized_axis.hpp index 6eaffce4..3591b481 100644 --- a/glm/gtx/rotate_normalized_axis.hpp +++ b/glm/gtx/rotate_normalized_axis.hpp @@ -30,7 +30,7 @@ /// @see gtc_quaternion /// /// @defgroup gtx_rotate_normalized_axis GLM_GTX_rotate_normalized_axis -/// @ingroup gtc +/// @ingroup gtx /// /// @brief Quaternions and matrices rotations around normalized axis. /// diff --git a/glm/gtx/scalar_relational.hpp b/glm/gtx/scalar_relational.hpp index 08c7470e..1eeccd33 100644 --- a/glm/gtx/scalar_relational.hpp +++ b/glm/gtx/scalar_relational.hpp @@ -27,7 +27,7 @@ /// /// @see core (dependence) /// -/// @defgroup gtx_extend GLM_GTX_scalar_relational +/// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational /// @ingroup gtx /// /// @brief Extend a position from a source to a position at a defined length. From d276bf3b98fe2807e1ebbe3f5dc377f994601e46 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 25 Nov 2014 00:56:37 +0100 Subject: [PATCH 31/64] Doxygen fixes --- glm/detail/_features.hpp | 2 +- glm/detail/_fixes.hpp | 2 +- glm/detail/_literals.hpp | 2 +- glm/detail/_swizzle.hpp | 2 +- glm/detail/_swizzle_func.hpp | 2 +- glm/detail/_vectorize.hpp | 2 +- glm/detail/func_common.hpp | 2 +- glm/detail/func_common.inl | 2 +- glm/detail/func_exponential.hpp | 26 +- glm/detail/func_exponential.inl | 2 +- glm/detail/func_geometric.hpp | 2 +- glm/detail/func_geometric.inl | 2 +- glm/detail/func_integer.hpp | 2 +- glm/detail/func_integer.inl | 2 +- glm/detail/func_matrix.hpp | 2 +- glm/detail/func_matrix.inl | 2 +- glm/detail/func_noise.hpp | 2 +- glm/detail/func_noise.inl | 2 +- glm/detail/func_packing.hpp | 2 +- glm/detail/func_packing.inl | 2 +- glm/detail/func_trigonometric.hpp | 2 +- glm/detail/func_trigonometric.inl | 2 +- glm/detail/func_vector_relational.hpp | 2 +- glm/detail/func_vector_relational.inl | 2 +- glm/detail/hint.hpp | 2 +- glm/glm.hpp | 7 +- glm/gtc/matrix_transform.hpp | 55 ++-- glm/gtc/round.hpp | 6 +- glm/gtx/range.hpp | 10 + glm/gtx/simd_quat.hpp | 60 ++-- glm/gtx/transform.hpp | 14 +- glm/gtx/type_aligned.hpp | 448 +++++++++++++------------- 32 files changed, 337 insertions(+), 337 deletions(-) diff --git a/glm/detail/_features.hpp b/glm/detail/_features.hpp index a745fd5e..fb29ffa8 100644 --- a/glm/detail/_features.hpp +++ b/glm/detail/_features.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/_features.hpp +/// @file glm/detail/_features.hpp /// @date 2013-02-20 / 2013-02-20 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/_fixes.hpp b/glm/detail/_fixes.hpp index ce13bb1b..a7efceb5 100644 --- a/glm/detail/_fixes.hpp +++ b/glm/detail/_fixes.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/_fixes.hpp +/// @file glm/detail/_fixes.hpp /// @date 2011-02-21 / 2011-11-22 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/_literals.hpp b/glm/detail/_literals.hpp index 82220874..fa4bd8c5 100644 --- a/glm/detail/_literals.hpp +++ b/glm/detail/_literals.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/_literals.hpp +/// @file glm/detail/_literals.hpp /// @date 2013-05-06 / 2013-05-06 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/_swizzle.hpp b/glm/detail/_swizzle.hpp index d52b1807..57e916f3 100644 --- a/glm/detail/_swizzle.hpp +++ b/glm/detail/_swizzle.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/_swizzle.hpp +/// @file glm/detail/_swizzle.hpp /// @date 2006-04-20 / 2011-02-16 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/_swizzle_func.hpp b/glm/detail/_swizzle_func.hpp index a3f6993c..ccb0c1b4 100644 --- a/glm/detail/_swizzle_func.hpp +++ b/glm/detail/_swizzle_func.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/_swizzle_func.hpp +/// @file glm/detail/_swizzle_func.hpp /// @date 2011-10-16 / 2011-10-16 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/_vectorize.hpp b/glm/detail/_vectorize.hpp index 9604e695..5edfc537 100644 --- a/glm/detail/_vectorize.hpp +++ b/glm/detail/_vectorize.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/_vectorize.hpp +/// @file glm/detail/_vectorize.hpp /// @date 2011-10-14 / 2011-10-14 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/func_common.hpp b/glm/detail/func_common.hpp index 97e64ebe..660daf03 100644 --- a/glm/detail/func_common.hpp +++ b/glm/detail/func_common.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_common.hpp +/// @file glm/detail/func_common.hpp /// @date 2008-03-08 / 2010-01-26 /// @author Christophe Riccio /// diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index d36b2b15..fafa3c9d 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_common.inl +/// @file glm/detail/func_common.inl /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/func_exponential.hpp b/glm/detail/func_exponential.hpp index 2adcb8ec..550ac414 100644 --- a/glm/detail/func_exponential.hpp +++ b/glm/detail/func_exponential.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_exponential.hpp +/// @file glm/detail/func_exponential.hpp /// @date 2008-08-08 / 2011-06-14 /// @author Christophe Riccio /// @@ -48,7 +48,7 @@ namespace glm /// Returns 'base' raised to the power 'exponent'. /// - /// @param base Floating point value. pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type precision. /// @param exponent Floating point value representing the 'exponent'. /// @tparam genType Floating-point scalar or vector types. /// @@ -59,7 +59,7 @@ namespace glm /// Returns the natural exponentiation of x, i.e., e^x. /// - /// @param x exp function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL exp man page @@ -67,11 +67,11 @@ namespace glm template class vecType> GLM_FUNC_DECL vecType exp(vecType const & v); - /// Returns the natural logarithm of x, i.e., + /// Returns the natural logarithm of v, i.e., /// returns the value y which satisfies the equation x = e^y. - /// Results are undefined if x <= 0. + /// Results are undefined if v <= 0. /// - /// @param x log function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. + /// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL log man page @@ -79,9 +79,9 @@ namespace glm template class vecType> GLM_FUNC_DECL vecType log(vecType const & v); - /// Returns 2 raised to the x power. + /// Returns 2 raised to the v power. /// - /// @param x exp2 function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL exp2 man page @@ -92,7 +92,7 @@ namespace glm /// Returns the base 2 log of x, i.e., returns the value y, /// which satisfies the equation x = 2 ^ y. /// - /// @param x log2 function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. + /// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL log2 man page @@ -100,9 +100,9 @@ namespace glm template class vecType> GLM_FUNC_DECL vecType log2(vecType const & v); - /// Returns the positive square root of x. + /// Returns the positive square root of v. /// - /// @param x sqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. + /// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL sqrt man page @@ -112,9 +112,9 @@ namespace glm template class vecType> GLM_FUNC_DECL vecType sqrt(vecType const & v); - /// Returns the reciprocal of the positive square root of x. + /// Returns the reciprocal of the positive square root of v. /// - /// @param x inversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. + /// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL inversesqrt man page diff --git a/glm/detail/func_exponential.inl b/glm/detail/func_exponential.inl index 80230960..f7255cde 100644 --- a/glm/detail/func_exponential.inl +++ b/glm/detail/func_exponential.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_exponential.inl +/// @file glm/detail/func_exponential.inl /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/func_geometric.hpp b/glm/detail/func_geometric.hpp index 784ada77..dd0b4c97 100644 --- a/glm/detail/func_geometric.hpp +++ b/glm/detail/func_geometric.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_geometric.hpp +/// @file glm/detail/func_geometric.hpp /// @date 2008-08-03 / 2011-06-14 /// @author Christophe Riccio /// diff --git a/glm/detail/func_geometric.inl b/glm/detail/func_geometric.inl index 1d51df91..7dd60e0a 100644 --- a/glm/detail/func_geometric.inl +++ b/glm/detail/func_geometric.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_geometric.inl +/// @file glm/detail/func_geometric.inl /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/func_integer.hpp b/glm/detail/func_integer.hpp index 7785d559..9aa55096 100644 --- a/glm/detail/func_integer.hpp +++ b/glm/detail/func_integer.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_integer.hpp +/// @file glm/detail/func_integer.hpp /// @date 2010-03-17 / 2011-06-18 /// @author Christophe Riccio /// diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index c2c07563..652e5d41 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_integer.inl +/// @file glm/detail/func_integer.inl /// @date 2010-03-17 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/func_matrix.hpp b/glm/detail/func_matrix.hpp index 358bec42..076714c3 100644 --- a/glm/detail/func_matrix.hpp +++ b/glm/detail/func_matrix.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_matrix.hpp +/// @file glm/detail/func_matrix.hpp /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /// diff --git a/glm/detail/func_matrix.inl b/glm/detail/func_matrix.inl index 4d96db95..076bbb66 100644 --- a/glm/detail/func_matrix.inl +++ b/glm/detail/func_matrix.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_matrix.inl +/// @file glm/detail/func_matrix.inl /// @date 2008-03-08 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/func_noise.hpp b/glm/detail/func_noise.hpp index d0869ec7..e005d49d 100644 --- a/glm/detail/func_noise.hpp +++ b/glm/detail/func_noise.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_noise.hpp +/// @file glm/detail/func_noise.hpp /// @date 2008-08-01 / 2011-06-18 /// @author Christophe Riccio /// diff --git a/glm/detail/func_noise.inl b/glm/detail/func_noise.inl index cab1414d..99a3562f 100644 --- a/glm/detail/func_noise.inl +++ b/glm/detail/func_noise.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_noise.inl +/// @file glm/detail/func_noise.inl /// @date 2008-08-01 / 2011-09-27 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/func_packing.hpp b/glm/detail/func_packing.hpp index aa08f5ac..409c19b9 100644 --- a/glm/detail/func_packing.hpp +++ b/glm/detail/func_packing.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_packing.hpp +/// @file glm/detail/func_packing.hpp /// @date 2010-03-17 / 2011-06-15 /// @author Christophe Riccio /// diff --git a/glm/detail/func_packing.inl b/glm/detail/func_packing.inl index 60dfc63b..97b4a524 100644 --- a/glm/detail/func_packing.inl +++ b/glm/detail/func_packing.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_packing.inl +/// @file glm/detail/func_packing.inl /// @date 2010-03-17 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/func_trigonometric.hpp b/glm/detail/func_trigonometric.hpp index 97ef9d70..86c76942 100644 --- a/glm/detail/func_trigonometric.hpp +++ b/glm/detail/func_trigonometric.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_trigonometric.hpp +/// @file glm/detail/func_trigonometric.hpp /// @date 2008-08-01 / 2011-06-15 /// @author Christophe Riccio /// diff --git a/glm/detail/func_trigonometric.inl b/glm/detail/func_trigonometric.inl index 1d50181c..a533b2a2 100644 --- a/glm/detail/func_trigonometric.inl +++ b/glm/detail/func_trigonometric.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_trigonometric.inl +/// @file glm/detail/func_trigonometric.inl /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/func_vector_relational.hpp b/glm/detail/func_vector_relational.hpp index a1a409cf..8a297520 100644 --- a/glm/detail/func_vector_relational.hpp +++ b/glm/detail/func_vector_relational.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_vector_relational.hpp +/// @file glm/detail/func_vector_relational.hpp /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /// diff --git a/glm/detail/func_vector_relational.inl b/glm/detail/func_vector_relational.inl index 9c83de5e..de3dc8b6 100644 --- a/glm/detail/func_vector_relational.inl +++ b/glm/detail/func_vector_relational.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/func_vector_relational.inl +/// @file glm/detail/func_vector_relational.inl /// @date 2008-08-03 / 2011-09-09 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/hint.hpp b/glm/detail/hint.hpp index 2b96c0f6..8706320d 100644 --- a/glm/detail/hint.hpp +++ b/glm/detail/hint.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/hint.hpp +/// @file glm/detail/hint.hpp /// @date 2008-08-14 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/glm.hpp b/glm/glm.hpp index 5526a1fd..7a761d8c 100644 --- a/glm/glm.hpp +++ b/glm/glm.hpp @@ -25,9 +25,9 @@ /// @date 2005-01-14 / 2011-10-24 /// @author Christophe Riccio /// -/// @defgroup core GLM Core -/// -/// @brief The core of GLM, which implements exactly and only the GLSL specification to the degree possible. +/// @defgroup core GLM Core +/// +/// @brief The core of GLM, which implements exactly and only the GLSL specification to the degree possible. /// /// The GLM core consists of @ref core_types "C++ types that mirror GLSL types" and /// C++ functions that mirror the GLSL functions. It also includes @@ -37,7 +37,6 @@ /// The best documentation for GLM Core is the current GLSL specification, /// version 4.2 /// (pdf file). -/// There are a few @ref pg_differences "differences" between GLM core and GLSL. /// /// GLM core functionnalities require to be included to be used. /// diff --git a/glm/gtc/matrix_transform.hpp b/glm/gtc/matrix_transform.hpp index 83f22b0d..a780668c 100644 --- a/glm/gtc/matrix_transform.hpp +++ b/glm/gtc/matrix_transform.hpp @@ -77,8 +77,6 @@ namespace glm /// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f /// @endcode /// @see gtc_matrix_transform - /// @see gtx_transform - /// @see - translate(T x, T y, T z) /// @see - translate(tmat4x4 const & m, T x, T y, T z) /// @see - translate(tvec3 const & v) template @@ -93,8 +91,6 @@ namespace glm /// @param axis Rotation axis, recommanded to be normalized. /// @tparam T Value type used to build the matrix. Supported: half, float or double. /// @see gtc_matrix_transform - /// @see gtx_transform - /// @see - rotate(T angle, T x, T y, T z) /// @see - rotate(tmat4x4 const & m, T angle, T x, T y, T z) /// @see - rotate(T angle, tvec3 const & v) template @@ -109,8 +105,6 @@ namespace glm /// @param v Ratio of scaling for each axis. /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double. /// @see gtc_matrix_transform - /// @see gtx_transform - /// @see - scale(T x, T y, T z) scale(T const & x, T const & y, T const & z) /// @see - scale(tmat4x4 const & m, T x, T y, T z) /// @see - scale(tvec3 const & v) template @@ -175,10 +169,10 @@ namespace glm /// Creates a matrix for a symetric perspective-view frustum. /// - /// @param fovy Expressed in radians. - /// @param aspect - /// @param near - /// @param far + /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. + /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). + /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). + /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double. /// @see gtc_matrix_transform template @@ -193,8 +187,8 @@ namespace glm /// @param fov Expressed in radians. /// @param width /// @param height - /// @param near - /// @param far + /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). + /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double. /// @see gtc_matrix_transform template @@ -207,9 +201,9 @@ namespace glm /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite. /// - /// @param fovy Expressed in radians. - /// @param aspect - /// @param near + /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. + /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). + /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double. /// @see gtc_matrix_transform template @@ -218,9 +212,9 @@ namespace glm /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. /// - /// @param fovy Expressed in radians. - /// @param aspect - /// @param near + /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. + /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). + /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double. /// @see gtc_matrix_transform template @@ -229,9 +223,10 @@ namespace glm /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. /// - /// @param fovy Expressed in radians. - /// @param aspect - /// @param near + /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. + /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). + /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). + /// @param ep /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double. /// @see gtc_matrix_transform template @@ -240,10 +235,11 @@ namespace glm /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. /// - /// @param obj - /// @param model - /// @param proj - /// @param viewport + /// @param obj Specify the object coordinates. + /// @param model Specifies the current modelview matrix + /// @param proj Specifies the current projection matrix + /// @param viewport Specifies the current viewport + /// @return Return the computed window coordinates. /// @tparam T Native type used for the computation. Currently supported: half (not recommanded), float or double. /// @tparam U Currently supported: Floating-point types and integer types. /// @see gtc_matrix_transform @@ -256,10 +252,11 @@ namespace glm /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. /// - /// @param win - /// @param model - /// @param proj - /// @param viewport + /// @param win Specify the window coordinates to be mapped. + /// @param model Specifies the modelview matrix + /// @param proj Specifies the projection matrix + /// @param viewport Specifies the viewport + /// @return Returns the computed object coordinates. /// @tparam T Native type used for the computation. Currently supported: half (not recommanded), float or double. /// @tparam U Currently supported: Floating-point types and integer types. /// @see gtc_matrix_transform diff --git a/glm/gtc/round.hpp b/glm/gtc/round.hpp index 9e8eee77..ee26ffe2 100644 --- a/glm/gtc/round.hpp +++ b/glm/gtc/round.hpp @@ -107,19 +107,19 @@ namespace glm template class vecType> GLM_FUNC_DECL vecType roundPowerOfTwo(vecType const & value); - /// Return true if the is a multiple of . + /// Return true if the 'Value' is a multiple of 'Multiple'. /// /// @see gtc_round template GLM_FUNC_DECL bool isMultiple(genIUType Value, genIUType Multiple); - /// Return true if the is a multiple of . + /// Return true if the 'Value' is a multiple of 'Multiple'. /// /// @see gtc_round template class vecType> GLM_FUNC_DECL vecType isMultiple(vecType const & Value, T Multiple); - /// Return true if the is a multiple of . + /// Return true if the 'Value' is a multiple of 'Multiple'. /// /// @see gtc_round template class vecType> diff --git a/glm/gtx/range.hpp b/glm/gtx/range.hpp index 097e8501..f2fc01ba 100644 --- a/glm/gtx/range.hpp +++ b/glm/gtx/range.hpp @@ -25,13 +25,18 @@ /// @date 2014-09-19 / 2014-09-19 /// @author Joshua Moerman /// +/// @defgroup gtx_range GLM_GTX_range +/// @ingroup gtx +/// /// @brief 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). /// +/// need to be included to use these functionalities. /////////////////////////////////////////////////////////////////////////////////// #pragma once +// Dependencies #include "../detail/setup.hpp" #if !GLM_HAS_RANGE_FOR @@ -66,6 +71,9 @@ namespace detail } }//namespace + /// @addtogroup gtx_range + /// @{ + template const typename genType::value_type * begin(genType const & v){ return value_ptr(v); @@ -85,4 +93,6 @@ namespace detail typename genType::value_type * end(genType& v){ return begin(v) + detail::number_of_elements_(v); } + + /// @} }//namespace glm diff --git a/glm/gtx/simd_quat.hpp b/glm/gtx/simd_quat.hpp index f3aa2938..ffdf0a9e 100644 --- a/glm/gtx/simd_quat.hpp +++ b/glm/gtx/simd_quat.hpp @@ -27,7 +27,7 @@ /// /// @see core (dependence) /// -/// @defgroup gtx_simd_vec4 GLM_GTX_simd_quat +/// @defgroup gtx_simd_quat GLM_GTX_simd_quat /// @ingroup gtx /// /// @brief SIMD implementation of quat type. @@ -54,19 +54,15 @@ # pragma message("GLM: GLM_GTX_simd_quat extension included") #endif - // Warning silencer for nameless struct/union. #if (GLM_COMPILER & GLM_COMPILER_VC) # pragma warning(push) # pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union #endif - namespace glm{ namespace detail { - /// Quaternion implemented using SIMD SEE intrinsics. - /// \ingroup gtx_simd_vec4 GLM_ALIGNED_STRUCT(16) fquatSIMD { typedef __m128 value_type; @@ -77,13 +73,13 @@ namespace detail typedef tquat bool_type; #ifdef GLM_SIMD_ENABLE_XYZW_UNION - union - { - __m128 Data; - struct {float x, y, z, w;}; - }; + union + { + __m128 Data; + struct {float x, y, z, w;}; + }; #else - __m128 Data; + __m128 Data; #endif ////////////////////////////////////// @@ -105,7 +101,7 @@ namespace detail float const & z); explicit fquatSIMD( quat const & v); - explicit fquatSIMD( + explicit fquatSIMD( vec3 const & eulerAngles); @@ -154,59 +150,59 @@ namespace detail }//namespace detail - typedef glm::detail::fquatSIMD simdQuat; - /// @addtogroup gtx_simd_quat /// @{ + typedef glm::detail::fquatSIMD simdQuat; + //! Convert a simdQuat to a quat. - //! (From GLM_GTX_simd_quat extension) + /// @see gtx_simd_quat quat quat_cast( detail::fquatSIMD const & x); //! Convert a simdMat4 to a simdQuat. - //! (From GLM_GTX_simd_quat extension) + /// @see gtx_simd_quat detail::fquatSIMD quatSIMD_cast( detail::fmat4x4SIMD const & m); //! Converts a mat4 to a simdQuat. - //! (From GLM_GTX_simd_quat extension) + /// @see gtx_simd_quat template detail::fquatSIMD quatSIMD_cast( tmat4x4 const & m); //! Converts a mat3 to a simdQuat. - //! (From GLM_GTX_simd_quat extension) + /// @see gtx_simd_quat template detail::fquatSIMD quatSIMD_cast( tmat3x3 const & m); //! Convert a simdQuat to a simdMat4 - //! (From GLM_GTX_simd_quat extension) + /// @see gtx_simd_quat detail::fmat4x4SIMD mat4SIMD_cast( detail::fquatSIMD const & q); //! Converts a simdQuat to a standard mat4. - //! (From GLM_GTX_simd_quat extension) + /// @see gtx_simd_quat mat4 mat4_cast( detail::fquatSIMD const & q); /// Returns the length of the quaternion. /// - /// @see gtc_quaternion + /// @see gtx_simd_quat float length( detail::fquatSIMD const & x); /// Returns the normalized quaternion. /// - /// @see gtc_quaternion + /// @see gtx_simd_quat detail::fquatSIMD normalize( detail::fquatSIMD const & x); /// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... /// - /// @see gtc_quaternion + /// @see gtx_simd_quat float dot( detail::fquatSIMD const & q1, detail::fquatSIMD const & q2); @@ -219,7 +215,7 @@ namespace detail /// @param y A quaternion /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. /// @tparam T Value type used to build the quaternion. Supported: half, float or double. - /// @see gtc_quaternion + /// @see gtx_simd_quat /// @see - slerp(detail::fquatSIMD const & x, detail::fquatSIMD const & y, T const & a) detail::fquatSIMD mix( detail::fquatSIMD const & x, @@ -233,7 +229,7 @@ namespace detail /// @param y A quaternion /// @param a Interpolation factor. The interpolation is defined in the range [0, 1]. /// @tparam T Value type used to build the quaternion. Supported: half, float or double. - /// @see gtc_quaternion + /// @see gtx_simd_quat detail::fquatSIMD lerp( detail::fquatSIMD const & x, detail::fquatSIMD const & y, @@ -246,7 +242,7 @@ namespace detail /// @param y A quaternion /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. /// @tparam T Value type used to build the quaternion. Supported: half, float or double. - /// @see gtc_quaternion + /// @see gtx_simd_quat detail::fquatSIMD slerp( detail::fquatSIMD const & x, detail::fquatSIMD const & y, @@ -261,7 +257,7 @@ namespace detail /// /// This will use the equivalent to fastAcos() and fastSin(). /// - /// @see gtc_quaternion + /// @see gtx_simd_quat /// @see - mix(detail::fquatSIMD const & x, detail::fquatSIMD const & y, T const & a) detail::fquatSIMD fastMix( detail::fquatSIMD const & x, @@ -283,13 +279,13 @@ namespace detail /// Returns the q conjugate. /// - /// @see gtc_quaternion + /// @see gtx_simd_quat detail::fquatSIMD conjugate( detail::fquatSIMD const & q); /// Returns the q inverse. /// - /// @see gtc_quaternion + /// @see gtx_simd_quat detail::fquatSIMD inverse( detail::fquatSIMD const & q); @@ -298,7 +294,7 @@ namespace detail /// @param angle Angle expressed in radians. /// @param axis Axis of the quaternion, must be normalized. /// - /// @see gtc_quaternion + /// @see gtx_simd_quat detail::fquatSIMD angleAxisSIMD( float const & angle, vec3 const & axis); @@ -310,19 +306,17 @@ namespace detail /// @param y y component of the y-axis, x, y, z must be a normalized axis /// @param z z component of the z-axis, x, y, z must be a normalized axis /// - /// @see gtc_quaternion + /// @see gtx_simd_quat detail::fquatSIMD angleAxisSIMD( float const & angle, float const & x, float const & y, float const & z); - // TODO: Move this to somewhere more appropriate. Used with fastMix() and fastSlerp(). /// Performs the equivalent of glm::fastSin() on each component of the given __m128. __m128 fastSin(__m128 x); - /// @} }//namespace glm diff --git a/glm/gtx/transform.hpp b/glm/gtx/transform.hpp index 602c8ce1..d0ff300d 100644 --- a/glm/gtx/transform.hpp +++ b/glm/gtx/transform.hpp @@ -53,24 +53,24 @@ namespace glm /// @addtogroup gtx_transform /// @{ - /// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. - /// - From \link gtx_transform GLM_GTX_transform \endlink extension - /// - See also: \link glm::translate GLM_GTC_matrix_transform \endlink + /// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. + /// @see gtc_matrix_transform + /// @see gtx_transform template GLM_FUNC_DECL tmat4x4 translate( tvec3 const & v); /// Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees. - /// - From \link gtx_transform GLM_GTX_transform \endlink extension - /// - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink + /// @see gtc_matrix_transform + /// @see gtx_transform template GLM_FUNC_DECL tmat4x4 rotate( T angle, tvec3 const & v); /// Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. - /// - From \link gtx_transform GLM_GTX_transform \endlink extension - /// - See also: \link glm::scale GLM_GTC_matrix_transform \endlink + /// @see gtc_matrix_transform + /// @see gtx_transform template GLM_FUNC_DECL tmat4x4 scale( tvec3 const & v); diff --git a/glm/gtx/type_aligned.hpp b/glm/gtx/type_aligned.hpp index 4fa39381..bfe4b3d4 100644 --- a/glm/gtx/type_aligned.hpp +++ b/glm/gtx/type_aligned.hpp @@ -20,22 +20,22 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// -/// @ref gtc_type_aligned -/// @file glm/gtc/type_aligned.hpp +/// @ref gtx_type_aligned +/// @file glm/gtx/type_aligned.hpp /// @date 2014-11-23 / 2014-12-23 /// @author Christophe Riccio /// /// @see core (dependence) /// @see gtc_quaternion (dependence) /// -/// @defgroup gtc_type_aligned GLM_GTC_type_aligned -/// @ingroup gtc +/// @defgroup gtx_type_aligned GLM_GTX_type_aligned +/// @ingroup gtx /// /// @brief Defines aligned types. /// /// @ref core_precision defines aligned types. /// -/// need to be included to use these functionalities. +/// need to be included to use these functionalities. /////////////////////////////////////////////////////////////////////////////////// #pragma once @@ -44,7 +44,7 @@ #include "../gtc/type_precision.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) -# pragma message("GLM: GLM_GTC_type_aligned extension included") +# pragma message("GLM: GLM_GTX_type_aligned extension included") #endif namespace glm @@ -52,295 +52,295 @@ namespace glm /////////////////////////// // Signed int vector types - /// @addtogroup gtc_type_aligned + /// @addtogroup gtx_type_aligned /// @{ /// Low precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1); /// Low precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2); /// Low precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4); /// Low precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8); /// Low precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1); /// Low precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2); /// Low precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4); /// Low precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8); /// Low precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1); /// Low precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2); /// Low precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4); /// Low precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8); /// Medium precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1); /// Medium precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2); /// Medium precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4); /// Medium precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8); /// Medium precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1); /// Medium precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2); /// Medium precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4); /// Medium precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8); /// Medium precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1); /// Medium precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2); /// Medium precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4); /// Medium precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8); /// High precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1); /// High precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2); /// High precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4); /// High precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8); /// High precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1); /// High precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2); /// High precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4); /// High precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8); /// High precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1); /// High precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2); /// High precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4); /// High precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8); /// Default precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1); /// Default precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2); /// Default precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4); /// Default precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8); /// Default precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1); /// Default precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2); /// Default precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4); /// Default precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8); /// Default precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1); /// Default precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2); /// Default precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4); /// Default precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); /// Default precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4); /// Default precision 32 bit signed integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8); /// Default precision 32 bit signed integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16); /// Default precision 32 bit signed integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16); /// Default precision 8 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); /// Default precision 8 bit signed integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2); /// Default precision 8 bit signed integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4); /// Default precision 8 bit signed integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4); /// Default precision 16 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2); /// Default precision 16 bit signed integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4); /// Default precision 16 bit signed integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8); /// Default precision 16 bit signed integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8); /// Default precision 32 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4); /// Default precision 32 bit signed integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8); /// Default precision 32 bit signed integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16); /// Default precision 32 bit signed integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16); /// Default precision 64 bit signed integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8); /// Default precision 64 bit signed integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16); /// Default precision 64 bit signed integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32); /// Default precision 64 bit signed integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32); @@ -348,291 +348,291 @@ namespace glm // Unsigned int vector types /// Low precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1); /// Low precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2); /// Low precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4); /// Low precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8); /// Low precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1); /// Low precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2); /// Low precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4); /// Low precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8); /// Low precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1); /// Low precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2); /// Low precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4); /// Low precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8); /// Medium precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1); /// Medium precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2); /// Medium precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4); /// Medium precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8); /// Medium precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1); /// Medium precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2); /// Medium precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4); /// Medium precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8); /// Medium precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1); /// Medium precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2); /// Medium precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4); /// Medium precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8); /// High precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1); /// High precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2); /// High precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4); /// High precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8); /// High precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1); /// High precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2); /// High precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4); /// High precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8); /// High precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1); /// High precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2); /// High precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4); /// High precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8); /// Default precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1); /// Default precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2); /// Default precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4); /// Default precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8); /// Default precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1); /// Default precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2); /// Default precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4); /// Default precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8); /// Default precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1); /// Default precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2); /// Default precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4); /// Default precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); /// Default precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4); /// Default precision 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8); /// Default precision 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16); /// Default precision 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16); /// Default precision 8 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); /// Default precision 8 bit unsigned integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2); /// Default precision 8 bit unsigned integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4); /// Default precision 8 bit unsigned integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4); /// Default precision 16 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2); /// Default precision 16 bit unsigned integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4); /// Default precision 16 bit unsigned integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8); /// Default precision 16 bit unsigned integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8); /// Default precision 32 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4); /// Default precision 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8); /// Default precision 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16); /// Default precision 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16); /// Default precision 64 bit unsigned integer aligned scalar type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8); /// Default precision 64 bit unsigned integer aligned vector of 2 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16); /// Default precision 64 bit unsigned integer aligned vector of 3 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32); /// Default precision 64 bit unsigned integer aligned vector of 4 components type. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32); @@ -640,114 +640,114 @@ namespace glm // Float vector types /// 32 bit single-precision floating-point aligned scalar. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4); /// 64 bit double-precision floating-point aligned scalar. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8); /// 32 bit single-precision floating-point aligned scalar. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4); /// 64 bit double-precision floating-point aligned scalar. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8); /// 32 bit single-precision floating-point aligned scalar. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4); /// 64 bit double-precision floating-point aligned scalar. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); /// Single-precision floating-point aligned vector of 1 component. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4); /// Single-precision floating-point aligned vector of 2 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8); /// Single-precision floating-point aligned vector of 3 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16); /// Single-precision floating-point aligned vector of 4 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16); /// Single-precision floating-point aligned vector of 1 component. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); /// Single-precision floating-point aligned vector of 2 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8); /// Single-precision floating-point aligned vector of 3 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16); /// Single-precision floating-point aligned vector of 4 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16); /// Single-precision floating-point aligned vector of 1 component. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4); /// Single-precision floating-point aligned vector of 2 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8); /// Single-precision floating-point aligned vector of 3 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16); /// Single-precision floating-point aligned vector of 4 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); /// Double-precision floating-point aligned vector of 1 component. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8); /// Double-precision floating-point aligned vector of 2 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16); /// Double-precision floating-point aligned vector of 3 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32); /// Double-precision floating-point aligned vector of 4 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32); /// Double-precision floating-point aligned vector of 1 component. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); /// Double-precision floating-point aligned vector of 2 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16); /// Double-precision floating-point aligned vector of 3 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32); /// Double-precision floating-point aligned vector of 4 components. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32); @@ -755,210 +755,210 @@ namespace glm // Float matrix types /// Single-precision floating-point aligned 1x1 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned //typedef detail::tmat1 mat1; /// Single-precision floating-point aligned 2x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16); /// Single-precision floating-point aligned 3x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16); /// Single-precision floating-point aligned 4x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16); /// Single-precision floating-point aligned 1x1 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned //typedef detail::tmat1x1 mat1; /// Single-precision floating-point aligned 2x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16); /// Single-precision floating-point aligned 3x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16); /// Single-precision floating-point aligned 4x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16); /// Single-precision floating-point aligned 1x1 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned //typedef detail::tmat1x1 fmat1; /// Single-precision floating-point aligned 2x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16); /// Single-precision floating-point aligned 3x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16); /// Single-precision floating-point aligned 4x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16); /// Single-precision floating-point aligned 1x1 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned //typedef f32 fmat1x1; /// Single-precision floating-point aligned 2x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16); /// Single-precision floating-point aligned 2x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16); /// Single-precision floating-point aligned 2x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16); /// Single-precision floating-point aligned 3x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16); /// Single-precision floating-point aligned 3x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16); /// Single-precision floating-point aligned 3x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16); /// Single-precision floating-point aligned 4x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16); /// Single-precision floating-point aligned 4x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16); /// Single-precision floating-point aligned 4x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16); /// Single-precision floating-point aligned 1x1 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned //typedef detail::tmat1x1 f32mat1; /// Single-precision floating-point aligned 2x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16); /// Single-precision floating-point aligned 3x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16); /// Single-precision floating-point aligned 4x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16); /// Single-precision floating-point aligned 1x1 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned //typedef f32 f32mat1x1; /// Single-precision floating-point aligned 2x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16); /// Single-precision floating-point aligned 2x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16); /// Single-precision floating-point aligned 2x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16); /// Single-precision floating-point aligned 3x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16); /// Single-precision floating-point aligned 3x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16); /// Single-precision floating-point aligned 3x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16); /// Single-precision floating-point aligned 4x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16); /// Single-precision floating-point aligned 4x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16); /// Single-precision floating-point aligned 4x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16); /// Double-precision floating-point aligned 1x1 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned //typedef detail::tmat1x1 f64mat1; /// Double-precision floating-point aligned 2x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32); /// Double-precision floating-point aligned 3x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32); /// Double-precision floating-point aligned 4x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32); /// Double-precision floating-point aligned 1x1 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned //typedef f64 f64mat1x1; /// Double-precision floating-point aligned 2x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32); /// Double-precision floating-point aligned 2x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32); /// Double-precision floating-point aligned 2x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32); /// Double-precision floating-point aligned 3x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32); /// Double-precision floating-point aligned 3x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32); /// Double-precision floating-point aligned 3x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32); /// Double-precision floating-point aligned 4x2 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32); /// Double-precision floating-point aligned 4x3 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32); /// Double-precision floating-point aligned 4x4 matrix. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32); @@ -966,23 +966,23 @@ namespace glm // Quaternion types /// Single-precision floating-point aligned quaternion. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16); /// Single-precision floating-point aligned quaternion. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fquat, aligned_fquat, 16); /// Double-precision floating-point aligned quaternion. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32); /// Single-precision floating-point aligned quaternion. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); /// Double-precision floating-point aligned quaternion. - /// @see gtc_type_aligned + /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32); /// @} From 3aa3da07274d5ac6ae6df33664afb8d1b534fd3d Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 25 Nov 2014 00:58:36 +0100 Subject: [PATCH 32/64] Deleted dead files --- doc/man.doxy | 227 ++++++++++++++++++++++++--------------- glm/detail/_literals.hpp | 48 --------- glm/detail/hint.hpp | 37 ------- 3 files changed, 139 insertions(+), 173 deletions(-) delete mode 100644 glm/detail/_literals.hpp delete mode 100644 glm/detail/hint.hpp diff --git a/doc/man.doxy b/doc/man.doxy index f9274071..5cb35f9c 100644 --- a/doc/man.doxy +++ b/doc/man.doxy @@ -1,11 +1,11 @@ -# Doxyfile 1.8.5 +# Doxyfile 1.8.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. -# +# # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. -# +# # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] @@ -32,13 +32,13 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = GLM +PROJECT_NAME = 0.9.6 # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.9.5 +PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -51,7 +51,7 @@ PROJECT_BRIEF = # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo # to the output directory. -PROJECT_LOGO = G:/Repository/glm/doc/logo.png +PROJECT_LOGO = E:/Source/G-Truc/glm/doc/logo.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is @@ -70,15 +70,25 @@ OUTPUT_DIRECTORY = . CREATE_SUBDIRS = NO +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese- -# Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, Farsi, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en, -# Korean, Korean-en, Latvian, Norwegian, Macedonian, Persian, Polish, -# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, -# Turkish, Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English @@ -92,7 +102,7 @@ BRIEF_MEMBER_DESC = NO # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief # description of a member or function before the detailed description -# +# # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. @@ -147,7 +157,7 @@ FULL_PATH_NAMES = NO # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. -# +# # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. @@ -192,7 +202,7 @@ QT_AUTOBRIEF = NO # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. -# +# # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. @@ -269,12 +279,15 @@ OPTIMIZE_OUTPUT_VHDL = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. -# +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# # Note For files without extension you can use no_extension as a placeholder. -# +# # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. @@ -353,7 +366,7 @@ SUBGROUPING = NO # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). -# +# # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. @@ -510,6 +523,13 @@ HIDE_SCOPE_NAMES = YES SHOW_INCLUDE_FILES = NO +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. @@ -531,7 +551,8 @@ SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. +# name. If set to NO the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = YES @@ -656,7 +677,7 @@ FILE_VERSION_FILTER = # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. -# +# # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. @@ -669,8 +690,7 @@ LAYOUT_FILE = # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. +# search path. See also \cite for info how to create references. CITE_BIB_FILES = @@ -688,7 +708,7 @@ QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. -# +# # Tip: Turn warnings on while writing the documentation. # The default value is: YES. @@ -776,7 +796,7 @@ RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. -# +# # Note that relative paths are relative to the directory from which doxygen is # run. @@ -792,7 +812,7 @@ EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. -# +# # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* @@ -803,7 +823,7 @@ EXCLUDE_PATTERNS = # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test -# +# # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* @@ -838,14 +858,14 @@ IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: -# +# # -# +# # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. -# +# # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. @@ -889,7 +909,7 @@ USE_MDFILE_AS_MAINPAGE = # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. -# +# # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. @@ -944,16 +964,16 @@ SOURCE_TOOLTIPS = YES # source browser. The htags tool is part of GNU's global source tagging system # (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. -# +# # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal -# +# # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). -# +# # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. @@ -970,7 +990,7 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES # If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more acurate parsing at the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the # cost of reduced performance. This can be particularly helpful with template # rich C++ code for which doxygen's built-in parser lacks the necessary type # information. @@ -1041,7 +1061,7 @@ HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. -# +# # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a @@ -1080,13 +1100,15 @@ HTML_FOOTER = HTML_STYLESHEET = -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra stylesheet files is of importance (e.g. the last +# stylesheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1209,7 +1231,7 @@ DOCSET_PUBLISHER_NAME = Publisher # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. -# +# # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old @@ -1251,7 +1273,8 @@ GENERATE_CHI = NO CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. +# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1377,7 +1400,7 @@ GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. -# +# # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. @@ -1411,7 +1434,7 @@ FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. -# +# # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. @@ -1491,11 +1514,11 @@ SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using Javascript. There -# are two flavours of web server based searching depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. See -# the section "External Indexing and Searching" for details. +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1506,11 +1529,11 @@ SERVER_BASED_SEARCH = NO # which needs to be processed by an external indexer. Doxygen will invoke an # external search engine pointed to by the SEARCHENGINE_URL option to obtain the # search results. -# +# # Doxygen ships with an example indexer ( doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: http://xapian.org/). -# +# # See the section "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1519,7 +1542,7 @@ EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. -# +# # Doxygen ships with an example indexer ( doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: http://xapian.org/). See the section "External Indexing and @@ -1573,7 +1596,7 @@ LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. -# +# # Note that when enabling USE_PDFLATEX this option is only used for generating # bitmaps for formulas in the HTML output, but not in the Makefile that is # written to the output directory. @@ -1620,21 +1643,23 @@ EXTRA_PACKAGES = # chapter. If it is left blank doxygen will generate a standard header. See # section "Doxygen usage" for information on how to let doxygen write the # default header to a separate file. -# +# # Note: Only use a user-defined header if you know what you are doing! The # following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will -# replace them by respectively the title of the page, the current date and time, -# only the current date, the version number of doxygen, the project name (see -# PROJECT_NAME), or the project number (see PROJECT_NUMBER). +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string, +# for the replacement values of the other commands the user is refered to +# HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. -# +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. +# # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1657,7 +1682,7 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = NO -# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate # the PDF file directly from the LaTeX files. Set this option to YES to get a # higher quality PDF documentation. # The default value is: YES. @@ -1683,7 +1708,7 @@ LATEX_HIDE_INDICES = NO # If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source # code with syntax highlighting in the LaTeX output. -# +# # Note that which sources are shown also depends on other settings such as # SOURCE_BROWSER. # The default value is: NO. @@ -1731,7 +1756,7 @@ COMPACT_RTF = NO # output) instead of page references. This makes the output suitable for online # browsing using Word or some other Word compatible readers that support those # fields. -# +# # Note: WordPad (write) and others do not support links. # The default value is: NO. # This tag requires that the tag GENERATE_RTF is set to YES. @@ -1741,7 +1766,7 @@ RTF_HYPERLINKS = YES # Load stylesheet definitions from file. Syntax is similar to doxygen's config # file, i.e. a series of assignments. You only have to provide replacements, # missing definitions are set to their default value. -# +# # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. # This tag requires that the tag GENERATE_RTF is set to YES. @@ -1783,6 +1808,13 @@ MAN_OUTPUT = man MAN_EXTENSION = .3 +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # will generate one additional man file for each entity documented in the real # man page(s). These additional files only source the real man page, but without @@ -1810,18 +1842,6 @@ GENERATE_XML = NO XML_OUTPUT = xml -# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify a XML DTD, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_DTD = - # If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to # the XML output. Note that enabling this will significantly increase the size @@ -1849,6 +1869,15 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook +# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- @@ -1867,7 +1896,7 @@ GENERATE_AUTOGEN_DEF = NO # If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module # file that captures the structure of the code including all documentation. -# +# # Note that this feature is still experimental and incomplete at the moment. # The default value is: NO. @@ -1968,9 +1997,9 @@ PREDEFINED = EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all refrences to function-like macros that are alone on a line, have an -# all uppercase name, and do not end with a semicolon. Such function macros are -# typically used for boiler-plate code, and will confuse the parser if not +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not # removed. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1990,7 +2019,7 @@ SKIP_FUNCTION_MACROS = YES # where loc1 and loc2 can be relative or absolute paths or URLs. See the # section "Linking to external documentation" for more information about the use # of tag files. -# Note: Each tag file must have an unique name (where the name does NOT include +# Note: Each tag file must have a unique name (where the name does NOT include # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. @@ -2050,6 +2079,13 @@ CLASS_DIAGRAMS = YES MSCGEN_PATH = +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. + +DIA_PATH = + # If set to YES, the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2075,7 +2111,7 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font n the dot files that doxygen +# When you want a differently looking font in the dot files that doxygen # generates you can specify the font name using DOT_FONTNAME. You need to make # sure dot is able to find the font, which can be done by putting it in a # standard location or by setting the DOTFONTPATH environment variable or by @@ -2172,7 +2208,7 @@ INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH tag is set to YES then doxygen will generate a call # dependency graph for every global function or class method. -# +# # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. @@ -2183,7 +2219,7 @@ CALL_GRAPH = YES # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller # dependency graph for every global function or class method. -# +# # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. @@ -2221,7 +2257,7 @@ DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. -# +# # Note that this requires a modern browser other than Internet Explorer. Tested # and working are Firefox, Chrome, Safari, and Opera. # Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make @@ -2250,6 +2286,21 @@ DOTFILE_DIRS = MSCFILE_DIRS = +# The DIAFILE_DIRS tag can be used to specify one or more directories that +# contain dia files that are included in the documentation (see the \diafile +# command). + +DIAFILE_DIRS = + +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. +# This tag requires that the tag HAVE_DOT is set to YES. + +PLANTUML_JAR_PATH = + # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes # larger than this value, doxygen will truncate the graph, which is visualized @@ -2277,7 +2328,7 @@ MAX_DOT_GRAPH_DEPTH = 1000 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not seem # to support this out of the box. -# +# # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). diff --git a/glm/detail/_literals.hpp b/glm/detail/_literals.hpp deleted file mode 100644 index fa4bd8c5..00000000 --- a/glm/detail/_literals.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/detail/_literals.hpp -/// @date 2013-05-06 / 2013-05-06 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#pragma once - -namespace glm -{ -#define GLM_CXX11_USER_LITERALS -#ifdef GLM_CXX11_USER_LITERALS -/* - GLM_FUNC_QUALIFIER detail::half operator "" _h(long double const s) - { - return detail::half(s); - } - - GLM_FUNC_QUALIFIER float operator "" _f(long double const s) - { - return static_cast(s); - } -*/ -#endif//GLM_CXX11_USER_LITERALS - -}//namespace glm diff --git a/glm/detail/hint.hpp b/glm/detail/hint.hpp deleted file mode 100644 index 8706320d..00000000 --- a/glm/detail/hint.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/detail/hint.hpp -/// @date 2008-08-14 / 2011-06-15 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#pragma once - -namespace glm -{ - // Use dont_care, nicest and fastest to optimize implementations. - class dont_care {}; - class nicest {}; - class fastest {}; -}//namespace glm From c273be264c05f3eee9cef5e4b505750642c0f6f8 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 25 Nov 2014 01:08:52 +0100 Subject: [PATCH 33/64] More fixes for doxygen --- doc/man.doxy | 2 +- glm/detail/intrinsic_common.hpp | 2 +- glm/detail/intrinsic_common.inl | 2 +- glm/detail/intrinsic_exponential.hpp | 2 +- glm/detail/intrinsic_exponential.inl | 2 +- glm/detail/intrinsic_geometric.hpp | 2 +- glm/detail/intrinsic_geometric.inl | 2 +- glm/detail/intrinsic_integer.hpp | 2 +- glm/detail/intrinsic_integer.inl | 2 +- glm/detail/intrinsic_matrix.hpp | 2 +- glm/detail/intrinsic_matrix.inl | 2 +- glm/detail/intrinsic_trigonometric.hpp | 2 +- glm/detail/intrinsic_trigonometric.inl | 2 +- glm/detail/intrinsic_vector_relational.hpp | 2 +- glm/detail/intrinsic_vector_relational.inl | 2 +- glm/detail/precision.hpp | 2 +- glm/detail/precision.inl | 0 glm/detail/setup.hpp | 2 +- glm/detail/type_float.hpp | 2 +- glm/detail/type_gentype.hpp | 2 +- glm/detail/type_gentype.inl | 2 +- glm/detail/type_half.hpp | 6 +----- glm/detail/type_half.inl | 2 +- glm/detail/type_int.hpp | 2 +- glm/detail/type_mat.hpp | 2 +- glm/detail/type_mat.inl | 2 +- glm/detail/type_mat2x2.hpp | 4 ++-- glm/detail/type_mat2x2.inl | 2 +- glm/detail/type_mat2x3.hpp | 2 +- glm/detail/type_mat2x3.inl | 2 +- glm/detail/type_mat2x4.hpp | 2 +- glm/detail/type_mat2x4.inl | 2 +- glm/detail/type_mat3x2.hpp | 2 +- glm/detail/type_mat3x2.inl | 2 +- glm/detail/type_mat3x3.hpp | 2 +- glm/detail/type_mat3x3.inl | 2 +- glm/detail/type_mat3x4.hpp | 2 +- glm/detail/type_mat3x4.inl | 2 +- glm/detail/type_mat4x2.hpp | 2 +- glm/detail/type_mat4x2.inl | 2 +- glm/detail/type_mat4x3.hpp | 2 +- glm/detail/type_mat4x3.inl | 2 +- glm/detail/type_mat4x4.hpp | 2 +- glm/detail/type_mat4x4.inl | 2 +- glm/detail/type_vec.hpp | 2 +- glm/detail/type_vec.inl | 2 +- glm/detail/type_vec1.hpp | 2 +- glm/detail/type_vec1.inl | 2 +- glm/detail/type_vec2.hpp | 2 +- glm/detail/type_vec2.inl | 2 +- glm/detail/type_vec3.hpp | 2 +- glm/detail/type_vec3.inl | 2 +- glm/detail/type_vec4.hpp | 2 +- glm/detail/type_vec4.inl | 2 +- glm/gtx/matrix_decompose.hpp | 12 ++++++------ glm/gtx/matrix_decompose.inl | 4 ++-- 56 files changed, 62 insertions(+), 66 deletions(-) delete mode 100644 glm/detail/precision.inl diff --git a/doc/man.doxy b/doc/man.doxy index 5cb35f9c..f5d97fc7 100644 --- a/doc/man.doxy +++ b/doc/man.doxy @@ -2119,7 +2119,7 @@ DOT_NUM_THREADS = 0 # The default value is: Helvetica. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = FreeSans +DOT_FONTNAME = # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of # dot graphs. diff --git a/glm/detail/intrinsic_common.hpp b/glm/detail/intrinsic_common.hpp index 405bb59a..5521c193 100644 --- a/glm/detail/intrinsic_common.hpp +++ b/glm/detail/intrinsic_common.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_common.hpp +/// @file glm/detail/intrinsic_common.hpp /// @date 2009-05-11 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_common.inl b/glm/detail/intrinsic_common.inl index b596b7fc..6d16cf43 100644 --- a/glm/detail/intrinsic_common.inl +++ b/glm/detail/intrinsic_common.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_common.inl +/// @file glm/detail/intrinsic_common.inl /// @date 2009-05-08 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_exponential.hpp b/glm/detail/intrinsic_exponential.hpp index 7194c3cf..abb15157 100644 --- a/glm/detail/intrinsic_exponential.hpp +++ b/glm/detail/intrinsic_exponential.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_exponential.hpp +/// @file glm/detail/intrinsic_exponential.hpp /// @date 2009-05-11 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_exponential.inl b/glm/detail/intrinsic_exponential.inl index cb2f20e6..17fccb83 100644 --- a/glm/detail/intrinsic_exponential.inl +++ b/glm/detail/intrinsic_exponential.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_exponential.inl +/// @file glm/detail/intrinsic_exponential.inl /// @date 2011-06-15 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_geometric.hpp b/glm/detail/intrinsic_geometric.hpp index e2175389..1a76fd96 100644 --- a/glm/detail/intrinsic_geometric.hpp +++ b/glm/detail/intrinsic_geometric.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_geometric.hpp +/// @file glm/detail/intrinsic_geometric.hpp /// @date 2009-05-08 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_geometric.inl b/glm/detail/intrinsic_geometric.inl index a75c31c8..ae8c7928 100644 --- a/glm/detail/intrinsic_geometric.inl +++ b/glm/detail/intrinsic_geometric.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_geometric.inl +/// @file glm/detail/intrinsic_geometric.inl /// @date 2009-05-08 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_integer.hpp b/glm/detail/intrinsic_integer.hpp index b542ac4a..e4f07bc5 100644 --- a/glm/detail/intrinsic_integer.hpp +++ b/glm/detail/intrinsic_integer.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_integer.hpp +/// @file glm/detail/intrinsic_integer.hpp /// @date 2009-05-11 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_integer.inl b/glm/detail/intrinsic_integer.inl index 05b24db5..90426e34 100644 --- a/glm/detail/intrinsic_integer.inl +++ b/glm/detail/intrinsic_integer.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_integer.inl +/// @file glm/detail/intrinsic_integer.inl /// @date 2009-05-08 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_matrix.hpp b/glm/detail/intrinsic_matrix.hpp index 082f4980..4d92a4e0 100644 --- a/glm/detail/intrinsic_matrix.hpp +++ b/glm/detail/intrinsic_matrix.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_common.hpp +/// @file glm/detail/intrinsic_common.hpp /// @date 2009-06-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_matrix.inl b/glm/detail/intrinsic_matrix.inl index 26c43b38..fb89a53e 100644 --- a/glm/detail/intrinsic_matrix.inl +++ b/glm/detail/intrinsic_matrix.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_common.inl +/// @file glm/detail/intrinsic_common.inl /// @date 2009-06-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_trigonometric.hpp b/glm/detail/intrinsic_trigonometric.hpp index 9176291c..41b7c30d 100644 --- a/glm/detail/intrinsic_trigonometric.hpp +++ b/glm/detail/intrinsic_trigonometric.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_trigonometric.hpp +/// @file glm/detail/intrinsic_trigonometric.hpp /// @date 2009-06-09 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_trigonometric.inl b/glm/detail/intrinsic_trigonometric.inl index 44dfd23b..9f8ead1e 100644 --- a/glm/detail/intrinsic_trigonometric.inl +++ b/glm/detail/intrinsic_trigonometric.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_trigonometric.inl +/// @file glm/detail/intrinsic_trigonometric.inl /// @date 2011-06-15 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_vector_relational.hpp b/glm/detail/intrinsic_vector_relational.hpp index af6620d6..a19ad681 100644 --- a/glm/detail/intrinsic_vector_relational.hpp +++ b/glm/detail/intrinsic_vector_relational.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_vector_relational.hpp +/// @file glm/detail/intrinsic_vector_relational.hpp /// @date 2009-06-09 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/intrinsic_vector_relational.inl b/glm/detail/intrinsic_vector_relational.inl index ecbb322a..1042661d 100644 --- a/glm/detail/intrinsic_vector_relational.inl +++ b/glm/detail/intrinsic_vector_relational.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/intrinsic_vector_relational.inl +/// @file glm/detail/intrinsic_vector_relational.inl /// @date 2009-06-09 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/precision.hpp b/glm/detail/precision.hpp index 6be15a34..33430af6 100644 --- a/glm/detail/precision.hpp +++ b/glm/detail/precision.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/precision.hpp +/// @file glm/detail/precision.hpp /// @date 2013-04-01 / 2013-04-01 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/precision.inl b/glm/detail/precision.inl deleted file mode 100644 index e69de29b..00000000 diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index ed825ef7..784ef1c7 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/setup.hpp +/// @file glm/detail/setup.hpp /// @date 2006-11-13 / 2014-10-05 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_float.hpp b/glm/detail/type_float.hpp index 495dbc92..82d6c366 100644 --- a/glm/detail/type_float.hpp +++ b/glm/detail/type_float.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_float.hpp +/// @file glm/detail/type_float.hpp /// @date 2008-08-22 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_gentype.hpp b/glm/detail/type_gentype.hpp index 59882e4c..4b15f0f6 100644 --- a/glm/detail/type_gentype.hpp +++ b/glm/detail/type_gentype.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_gentype.hpp +/// @file glm/detail/type_gentype.hpp /// @date 2008-10-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_gentype.inl b/glm/detail/type_gentype.inl index 73aa4cd6..692f4e4c 100644 --- a/glm/detail/type_gentype.inl +++ b/glm/detail/type_gentype.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_gentype.inl +/// @file glm/detail/type_gentype.inl /// @date 2008-10-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_half.hpp b/glm/detail/type_half.hpp index 827c28cb..3d378195 100644 --- a/glm/detail/type_half.hpp +++ b/glm/detail/type_half.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_half.hpp +/// @file glm/detail/type_half.hpp /// @date 2008-08-17 / 2011-09-20 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// @@ -39,10 +39,6 @@ namespace detail GLM_FUNC_DECL hdata toFloat16(float const & value); }//namespace detail - - /// half-precision floating-point numbers. - //typedef detail::hdata half; - }//namespace glm #include "type_half.inl" diff --git a/glm/detail/type_half.inl b/glm/detail/type_half.inl index 29801357..bd61be07 100644 --- a/glm/detail/type_half.inl +++ b/glm/detail/type_half.inl @@ -25,7 +25,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_half.inl +/// @file glm/detail/type_half.inl /// @date 2008-08-17 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_int.hpp b/glm/detail/type_int.hpp index 17d4d7c9..a993bfd0 100644 --- a/glm/detail/type_int.hpp +++ b/glm/detail/type_int.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_int.hpp +/// @file glm/detail/type_int.hpp /// @date 2008-08-22 / 2013-03-30 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat.hpp b/glm/detail/type_mat.hpp index e7033295..c8c77395 100644 --- a/glm/detail/type_mat.hpp +++ b/glm/detail/type_mat.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat.hpp +/// @file glm/detail/type_mat.hpp /// @date 2010-01-26 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat.inl b/glm/detail/type_mat.inl index 620b6d9c..73120fc9 100644 --- a/glm/detail/type_mat.inl +++ b/glm/detail/type_mat.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat.inl +/// @file glm/detail/type_mat.inl /// @date 2011-06-15 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat2x2.hpp b/glm/detail/type_mat2x2.hpp index 0f9c0b2f..a75bec71 100644 --- a/glm/detail/type_mat2x2.hpp +++ b/glm/detail/type_mat2x2.hpp @@ -20,8 +20,8 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// -/// @ref core -/// @file glm/core/type_mat2x2.hpp +/// @ref core +/// @file glm/detail/type_mat2x2.hpp /// @date 2005-01-27 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat2x2.inl b/glm/detail/type_mat2x2.inl index 95c88c9e..ac1a6af4 100644 --- a/glm/detail/type_mat2x2.inl +++ b/glm/detail/type_mat2x2.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat2x2.inl +/// @file glm/detail/type_mat2x2.inl /// @date 2005-01-16 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat2x3.hpp b/glm/detail/type_mat2x3.hpp index 8699a5b6..a875c7ce 100644 --- a/glm/detail/type_mat2x3.hpp +++ b/glm/detail/type_mat2x3.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat2x3.hpp +/// @file glm/detail/type_mat2x3.hpp /// @date 2006-10-01 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat2x3.inl b/glm/detail/type_mat2x3.inl index 64813c15..323af8b6 100644 --- a/glm/detail/type_mat2x3.inl +++ b/glm/detail/type_mat2x3.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat2x3.inl +/// @file glm/detail/type_mat2x3.inl /// @date 2006-08-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat2x4.hpp b/glm/detail/type_mat2x4.hpp index b97d1e91..d2de32c7 100644 --- a/glm/detail/type_mat2x4.hpp +++ b/glm/detail/type_mat2x4.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat2x4.hpp +/// @file glm/detail/type_mat2x4.hpp /// @date 2006-08-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat2x4.inl b/glm/detail/type_mat2x4.inl index e2ef8d90..13cac472 100644 --- a/glm/detail/type_mat2x4.inl +++ b/glm/detail/type_mat2x4.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat2x4.inl +/// @file glm/detail/type_mat2x4.inl /// @date 2006-08-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat3x2.hpp b/glm/detail/type_mat3x2.hpp index 1a2b0c66..2829549a 100644 --- a/glm/detail/type_mat3x2.hpp +++ b/glm/detail/type_mat3x2.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat3x2.hpp +/// @file glm/detail/type_mat3x2.hpp /// @date 2006-08-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat3x2.inl b/glm/detail/type_mat3x2.inl index 956bc866..19a46199 100644 --- a/glm/detail/type_mat3x2.inl +++ b/glm/detail/type_mat3x2.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat3x2.inl +/// @file glm/detail/type_mat3x2.inl /// @date 2006-08-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat3x3.hpp b/glm/detail/type_mat3x3.hpp index 97d1ed2e..bc1ec22e 100644 --- a/glm/detail/type_mat3x3.hpp +++ b/glm/detail/type_mat3x3.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat3x3.hpp +/// @file glm/detail/type_mat3x3.hpp /// @date 2005-01-27 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat3x3.inl b/glm/detail/type_mat3x3.inl index 5fd41d0f..4f045bc9 100644 --- a/glm/detail/type_mat3x3.inl +++ b/glm/detail/type_mat3x3.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat3x3.inl +/// @file glm/detail/type_mat3x3.inl /// @date 2005-01-27 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat3x4.hpp b/glm/detail/type_mat3x4.hpp index 4574f563..30a702df 100644 --- a/glm/detail/type_mat3x4.hpp +++ b/glm/detail/type_mat3x4.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat3x4.hpp +/// @file glm/detail/type_mat3x4.hpp /// @date 2006-08-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat3x4.inl b/glm/detail/type_mat3x4.inl index a8ff77d8..0a8ca7b8 100644 --- a/glm/detail/type_mat3x4.inl +++ b/glm/detail/type_mat3x4.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat3x4.inl +/// @file glm/detail/type_mat3x4.inl /// @date 2006-08-05 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat4x2.hpp b/glm/detail/type_mat4x2.hpp index 6de10768..69d83a6e 100644 --- a/glm/detail/type_mat4x2.hpp +++ b/glm/detail/type_mat4x2.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat4x2.hpp +/// @file glm/detail/type_mat4x2.hpp /// @date 2006-10-01 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat4x2.inl b/glm/detail/type_mat4x2.inl index b81bd747..8e73d987 100644 --- a/glm/detail/type_mat4x2.inl +++ b/glm/detail/type_mat4x2.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat4x2.inl +/// @file glm/detail/type_mat4x2.inl /// @date 2006-10-01 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat4x3.hpp b/glm/detail/type_mat4x3.hpp index a9210e7f..c49dc3df 100644 --- a/glm/detail/type_mat4x3.hpp +++ b/glm/detail/type_mat4x3.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat4x3.hpp +/// @file glm/detail/type_mat4x3.hpp /// @date 2006-08-04 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat4x3.inl b/glm/detail/type_mat4x3.inl index dd49c231..b8044254 100644 --- a/glm/detail/type_mat4x3.inl +++ b/glm/detail/type_mat4x3.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat4x3.inl +/// @file glm/detail/type_mat4x3.inl /// @date 2006-04-17 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat4x4.hpp b/glm/detail/type_mat4x4.hpp index dcb2a6a7..6ed0d230 100644 --- a/glm/detail/type_mat4x4.hpp +++ b/glm/detail/type_mat4x4.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat4x4.hpp +/// @file glm/detail/type_mat4x4.hpp /// @date 2005-01-27 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_mat4x4.inl b/glm/detail/type_mat4x4.inl index 6a1a0cd2..0902ae3c 100644 --- a/glm/detail/type_mat4x4.inl +++ b/glm/detail/type_mat4x4.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_mat4x4.inl +/// @file glm/detail/type_mat4x4.inl /// @date 2005-01-27 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec.hpp b/glm/detail/type_vec.hpp index 95e1e9f5..1d7affc1 100644 --- a/glm/detail/type_vec.hpp +++ b/glm/detail/type_vec.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_vec.hpp +/// @file glm/detail/type_vec.hpp /// @date 2010-01-26 / 2014-10-05 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec.inl b/glm/detail/type_vec.inl index 4f691b62..6028efd2 100644 --- a/glm/detail/type_vec.inl +++ b/glm/detail/type_vec.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_vec.inl +/// @file glm/detail/type_vec.inl /// @date 2011-06-15 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec1.hpp b/glm/detail/type_vec1.hpp index bd7aed19..7d73a2bb 100644 --- a/glm/detail/type_vec1.hpp +++ b/glm/detail/type_vec1.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_vec1.hpp +/// @file glm/detail/type_vec1.hpp /// @date 2008-08-25 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec1.inl b/glm/detail/type_vec1.inl index 6932c6dd..3c5c3eb7 100644 --- a/glm/detail/type_vec1.inl +++ b/glm/detail/type_vec1.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_vec1.inl +/// @file glm/detail/type_vec1.inl /// @date 2008-08-25 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec2.hpp b/glm/detail/type_vec2.hpp index a0446246..012e5556 100644 --- a/glm/detail/type_vec2.hpp +++ b/glm/detail/type_vec2.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_vec2.hpp +/// @file glm/detail/type_vec2.hpp /// @date 2008-08-18 / 2013-08-27 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec2.inl b/glm/detail/type_vec2.inl index 9a2326a8..98610b9d 100644 --- a/glm/detail/type_vec2.inl +++ b/glm/detail/type_vec2.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_tvec2.inl +/// @file glm/detail/type_tvec2.inl /// @date 2008-08-18 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec3.hpp b/glm/detail/type_vec3.hpp index fba9d015..ef4fc60d 100644 --- a/glm/detail/type_vec3.hpp +++ b/glm/detail/type_vec3.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_vec3.hpp +/// @file glm/detail/type_vec3.hpp /// @date 2008-08-22 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec3.inl b/glm/detail/type_vec3.inl index 75459d7b..188932d1 100644 --- a/glm/detail/type_vec3.inl +++ b/glm/detail/type_vec3.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_tvec3.inl +/// @file glm/detail/type_tvec3.inl /// @date 2008-08-22 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec4.hpp b/glm/detail/type_vec4.hpp index 9edd8f5b..69043410 100644 --- a/glm/detail/type_vec4.hpp +++ b/glm/detail/type_vec4.hpp @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_vec4.hpp +/// @file glm/detail/type_vec4.hpp /// @date 2008-08-22 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/detail/type_vec4.inl b/glm/detail/type_vec4.inl index 04135f8d..001230f2 100644 --- a/glm/detail/type_vec4.inl +++ b/glm/detail/type_vec4.inl @@ -21,7 +21,7 @@ /// THE SOFTWARE. /// /// @ref core -/// @file glm/core/type_tvec4.inl +/// @file glm/detail/type_tvec4.inl /// @date 2008-08-23 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/gtx/matrix_decompose.hpp b/glm/gtx/matrix_decompose.hpp index 11a0f39d..c68c94a5 100644 --- a/glm/gtx/matrix_decompose.hpp +++ b/glm/gtx/matrix_decompose.hpp @@ -20,14 +20,14 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// -/// @ref gtx_decomposition -/// @file glm/gtx/decomposition.hpp +/// @ref gtx_matrix_decompose +/// @file glm/gtx/matrix_decompose.hpp /// @date 2014-08-29 / 2014-08-29 /// @author Christophe Riccio /// /// @see core (dependence) /// -/// @defgroup gtx_decomposition GLM_GTX_decomposition +/// @defgroup gtx_matrix_decompose GLM_GTX_matrix_decompose /// @ingroup gtx /// /// @brief Decomposes a model matrix to translations, rotation and scale components @@ -45,16 +45,16 @@ #include "../gtc/matrix_transform.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) -# pragma message("GLM: GLM_GTX_decomposition extension included") +# pragma message("GLM: GLM_GTX_matrix_decompose extension included") #endif namespace glm { - /// @addtogroup gtx_decomposition + /// @addtogroup gtx_matrix_decompose /// @{ /// Decomposes a model matrix to translations, rotation and scale components - /// @see gtx_decomposition + /// @see gtx_matrix_decompose template GLM_FUNC_DECL bool decompose( tmat4x4 const & modelMatrix, diff --git a/glm/gtx/matrix_decompose.inl b/glm/gtx/matrix_decompose.inl index 39c4a87e..2490762d 100644 --- a/glm/gtx/matrix_decompose.inl +++ b/glm/gtx/matrix_decompose.inl @@ -20,8 +20,8 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// -/// @ref gtx_decomposition -/// @file glm/gtx/decomposition.inl +/// @ref gtx_matrix_decompose +/// @file glm/gtx/matrix_decompose.inl /// @date 2014-08-29 / 2014-08-29 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// From 39334f282c5aee00201e5e6c6362ec468beeb3d4 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 25 Nov 2014 01:28:32 +0100 Subject: [PATCH 34/64] Updated doxygen for 0.9.6 API --- doc/api/a00001.html | 72 + doc/api/a00001_source.html | 457 + doc/api/a00002.html | 47 +- doc/api/a00002_source.html | 83 + doc/api/{a00148.html => a00003.html} | 24 +- doc/api/a00003_source.html | 162 + doc/api/a00004.html | 72 + doc/api/a00004_source.html | 1200 ++- doc/api/a00005.html | 72 + doc/api/a00005_source.html | 733 +- doc/api/a00006.html | 72 + doc/api/a00006_source.html | 174 +- doc/api/a00007.html | 103 +- doc/api/a00007_source.html | 265 +- doc/api/a00008.html | 112 + doc/api/a00008_source.html | 875 +- doc/api/a00009.html | 143 + doc/api/a00009_source.html | 802 +- doc/api/a00010_source.html | 212 +- doc/api/a00011.html | 71 +- doc/api/a00011_source.html | 120 +- doc/api/a00012.html | 119 +- doc/api/a00012_source.html | 160 +- doc/api/{a00064.html => a00013.html} | 32 +- doc/api/a00013_source.html | 49 +- doc/api/a00014.html | 55 +- doc/api/a00014_source.html | 89 +- doc/api/a00015.html | 295 +- doc/api/a00015_source.html | 227 +- doc/api/a00016.html | 45 +- doc/api/a00016_source.html | 60 +- doc/api/a00017.html | 427 +- doc/api/a00017_source.html | 327 +- doc/api/a00018.html | 100 +- doc/api/a00018_source.html | 273 +- doc/api/a00019.html | 123 +- doc/api/a00019_source.html | 168 +- doc/api/a00020.html | 139 + doc/api/a00020_source.html | 130 +- doc/api/a00021.html | 103 +- doc/api/a00021_source.html | 232 +- doc/api/a00022.html | 103 - doc/api/a00022_source.html | 221 +- doc/api/a00023.html | 82 + doc/api/a00023_source.html | 49 +- doc/api/a00024.html | 115 +- doc/api/a00024_source.html | 212 +- doc/api/a00025.html | 71 +- doc/api/a00025_source.html | 81 +- doc/api/a00026.html | 100 + doc/api/a00026_source.html | 203 +- doc/api/a00027.html | 59 +- doc/api/a00027_source.html | 84 +- doc/api/a00028.html | 159 +- doc/api/a00028_source.html | 321 +- doc/api/a00029.html | 76 +- doc/api/a00029_source.html | 116 +- doc/api/a00030.html | 71 +- doc/api/a00030_source.html | 114 +- doc/api/a00031.html | 92 +- doc/api/a00031_source.html | 152 +- doc/api/a00032.html | 93 + doc/api/a00032_source.html | 295 +- doc/api/a00033.html | 94 + doc/api/a00033_source.html | 93 +- doc/api/a00034.html | 105 + doc/api/a00034_source.html | 138 +- doc/api/a00035.html | 124 + doc/api/a00035_source.html | 169 +- doc/api/a00036.html | 106 + doc/api/a00036_source.html | 165 +- doc/api/a00037.html | 985 ++ doc/api/a00037_source.html | 1973 +++- doc/api/a00038.html | 72 + doc/api/a00038_source.html | 78 +- doc/api/a00039.html | 78 + doc/api/a00039_source.html | 149 +- doc/api/a00040.html | 87 + doc/api/a00040_source.html | 104 +- doc/api/a00041.html | 1096 +- doc/api/a00041_source.html | 1978 +--- doc/api/a00042.html | 29 +- doc/api/a00042_source.html | 81 +- doc/api/a00043.html | 42 +- doc/api/a00043_source.html | 102 +- doc/api/a00044.html | 63 +- doc/api/a00044_source.html | 96 +- doc/api/a00045.html | 45 +- doc/api/a00045_source.html | 54 +- doc/api/a00046.html | 99 + doc/api/a00046_source.html | 91 +- doc/api/a00047.html | 41 +- doc/api/a00047_source.html | 138 +- doc/api/a00048.html | 72 + doc/api/a00048_source.html | 92 +- doc/api/a00049.html | 67 +- doc/api/a00049_source.html | 112 +- doc/api/a00050.html | 26 +- doc/api/a00050_source.html | 46 +- doc/api/a00051.html | 107 - doc/api/a00051_source.html | 121 +- doc/api/a00052.html | 72 + doc/api/a00052_source.html | 101 +- doc/api/a00053.html | 72 + doc/api/a00053_source.html | 91 +- doc/api/a00054.html | 75 + doc/api/a00054_source.html | 238 +- doc/api/a00055.html | 85 + doc/api/a00055_source.html | 69 +- doc/api/a00056_source.html | 2415 ++++- doc/api/a00057.html | 72 + doc/api/a00057_source.html | 67 +- doc/api/a00058.html | 72 + doc/api/a00058_source.html | 57 +- doc/api/a00059.html | 37 +- doc/api/a00059_source.html | 145 +- doc/api/a00060.html | 42 +- doc/api/a00060_source.html | 60 +- doc/api/a00061.html | 72 + doc/api/a00061_source.html | 2357 +---- doc/api/a00062.html | 30 +- doc/api/a00062_source.html | 64 +- doc/api/a00063.html | 30 +- doc/api/a00063_source.html | 55 +- doc/api/a00064_source.html | 57 +- doc/api/a00065.html | 30 +- doc/api/a00065_source.html | 64 +- doc/api/a00066.html | 30 +- doc/api/a00066_source.html | 50 +- doc/api/a00067.html | 47 +- doc/api/a00067_source.html | 77 +- doc/api/a00068.html | 43 +- doc/api/a00068_source.html | 63 +- doc/api/a00069.html | 82 + doc/api/a00069_source.html | 68 +- doc/api/a00070.html | 227 +- doc/api/a00070_source.html | 423 +- doc/api/a00071.html | 45 +- doc/api/a00071_source.html | 67 +- doc/api/a00072.html | 50 +- doc/api/a00072_source.html | 80 +- doc/api/a00073.html | 76 +- doc/api/a00073_source.html | 122 +- doc/api/a00074.html | 329 +- doc/api/a00074_source.html | 446 +- doc/api/a00075.html | 72 +- doc/api/a00075_source.html | 106 +- doc/api/a00076.html | 96 +- doc/api/a00076_source.html | 175 +- doc/api/a00077.html | 87 +- doc/api/a00077_source.html | 141 +- doc/api/a00078.html | 63 +- doc/api/a00078_source.html | 102 +- doc/api/a00079.html | 74 +- doc/api/a00079_source.html | 101 +- doc/api/a00080.html | 99 +- doc/api/a00080_source.html | 177 +- doc/api/a00081.html | 68 +- doc/api/a00081_source.html | 106 +- doc/api/a00082.html | 43 +- doc/api/a00082_source.html | 71 +- doc/api/a00083.html | 49 +- doc/api/a00083_source.html | 79 +- doc/api/a00084.html | 113 + doc/api/a00084_source.html | 80 +- doc/api/a00085.html | 82 +- doc/api/a00085_source.html | 131 +- doc/api/a00086.html | 41 +- doc/api/a00086_source.html | 69 +- doc/api/a00087.html | 100 +- doc/api/a00087_source.html | 161 +- doc/api/a00088.html | 73 +- doc/api/a00088_source.html | 78 +- doc/api/a00089.html | 107 - doc/api/a00089_source.html | 64 +- doc/api/a00090.html | 41 +- doc/api/a00090_source.html | 61 +- doc/api/a00091.html | 98 +- doc/api/a00091_source.html | 163 +- doc/api/a00092.html | 24 +- doc/api/a00092_source.html | 37 +- doc/api/a00093.html | 82 + doc/api/a00093_source.html | 42 +- doc/api/a00094.html | 117 +- doc/api/a00094_source.html | 250 +- doc/api/a00095.html | 94 +- doc/api/a00095_source.html | 168 +- doc/api/a00096.html | 101 + doc/api/a00096_source.html | 89 +- doc/api/a00097.html | 42 +- doc/api/a00097_source.html | 101 +- doc/api/a00098.html | 136 +- doc/api/a00098_source.html | 314 +- doc/api/a00099.html | 124 +- doc/api/a00099_source.html | 211 +- doc/api/a00100.html | 66 +- doc/api/a00100_source.html | 96 +- doc/api/a00101.html | 114 + doc/api/a00101_source.html | 108 +- doc/api/a00102.html | 99 +- doc/api/a00102_source.html | 130 +- doc/api/a00103.html | 77 +- doc/api/a00103_source.html | 153 +- doc/api/a00104.html | 73 + doc/api/a00104_source.html | 41 +- doc/api/a00105.html | 51 +- doc/api/a00105_source.html | 833 +- doc/api/a00106.html | 119 - doc/api/a00106_source.html | 247 +- doc/api/a00107.html | 36 +- doc/api/a00107_source.html | 256 +- doc/api/a00108.html | 73 + doc/api/a00108_source.html | 1108 +- doc/api/{a00149.html => a00109.html} | 52 +- doc/api/a00109_source.html | 214 +- doc/api/a00110.html | 58 +- doc/api/a00110_source.html | 287 +- doc/api/a00111.html | 41 +- doc/api/a00111_source.html | 385 +- doc/api/a00112.html | 56 +- doc/api/a00112_source.html | 99 +- doc/api/a00113.html | 85 +- doc/api/a00113_source.html | 128 +- doc/api/a00114.html | 48 +- doc/api/a00114_source.html | 47 +- doc/api/a00115.html | 465 +- doc/api/a00115_source.html | 745 +- doc/api/a00116.html | 78 +- doc/api/a00116_source.html | 155 +- doc/api/a00117.html | 24 +- doc/api/a00117_source.html | 211 +- doc/api/a00118.html | 72 + doc/api/a00118_source.html | 91 +- doc/api/a00119.html | 108 + doc/api/a00119_source.html | 487 +- doc/api/a00120.html | 270 + doc/api/a00120_source.html | 446 +- doc/api/a00121.html | 72 + doc/api/a00121_source.html | 343 +- doc/api/a00122.html | 72 + doc/api/a00122_source.html | 610 +- doc/api/a00123.html | 72 + doc/api/a00123_source.html | 383 +- doc/api/a00124.html | 72 + doc/api/a00124_source.html | 394 +- doc/api/a00125.html | 72 + doc/api/a00125_source.html | 388 +- doc/api/a00126.html | 72 + doc/api/a00126_source.html | 336 +- doc/api/a00127.html | 72 + doc/api/a00127_source.html | 401 +- doc/api/a00128.html | 72 + doc/api/a00128_source.html | 365 +- doc/api/a00129.html | 72 + doc/api/a00129_source.html | 402 +- doc/api/a00130.html | 77 + doc/api/a00130_source.html | 841 +- doc/api/a00131.html | 147 + doc/api/a00131_source.html | 354 +- doc/api/a00132.html | 159 +- doc/api/a00132_source.html | 894 +- doc/api/a00133.html | 111 +- doc/api/a00133_source.html | 381 +- doc/api/a00134.html | 72 + doc/api/a00134_source.html | 648 +- doc/api/a00135.html | 72 + doc/api/a00135_source.html | 610 +- doc/api/a00136.html | 72 + doc/api/a00136_source.html | 750 +- doc/api/a00137.html | 97 + doc/api/a00137_source.html | 349 +- doc/api/a00138.html | 113 + doc/api/a00138_source.html | 452 +- doc/api/a00139.html | 57 +- doc/api/a00139_source.html | 65 +- doc/api/a00140.html | 72 + doc/api/a00140_source.html | 30 +- doc/api/a00141.html | 72 + doc/api/a00141_source.html | 27 +- doc/api/a00142.html | 77 +- doc/api/a00142_source.html | 152 +- doc/api/a00143.html | 51 +- doc/api/a00143_source.html | 67 +- doc/api/a00144.html | 22 +- doc/api/a00144_source.html | 28 +- doc/api/a00145.html | 42 +- doc/api/a00145_source.html | 52 +- doc/api/a00146.html | 101 - doc/api/a00146_source.html | 102 - doc/api/a00147.html | 105 - doc/api/a00147_source.html | 108 - doc/api/a00148_source.html | 69 - doc/api/a00149_source.html | 93 - doc/api/a00150.html | 1112 +- doc/api/a00150_source.html | 191 - doc/api/a00151.html | 4144 +------- doc/api/a00152.html | 367 + doc/api/a00153.html | 577 + doc/api/a00154.html | 212 + doc/api/a00155.html | 1039 +- doc/api/a00156.html | 419 +- doc/api/a00157.html | 670 +- doc/api/a00158.html | 482 +- doc/api/a00159.html | 64 +- doc/api/a00160.html | 270 +- doc/api/a00161.html | 356 +- doc/api/a00162.html | 914 +- doc/api/a00163.html | 2898 ++++- doc/api/a00164.html | 60 +- doc/api/a00165.html | 1052 +- doc/api/a00166.html | 637 +- doc/api/a00167.html | 209 +- doc/api/a00168.html | 775 +- doc/api/a00169.html | 2911 +---- doc/api/a00170.html | 1852 +++- doc/api/a00171.html | 562 +- doc/api/a00172.html | 867 +- doc/api/a00173.html | 167 +- doc/api/a00174.html | 2179 ++-- doc/api/a00175.html | 843 +- doc/api/a00176.html | 925 +- doc/api/a00177.html | 310 +- doc/api/a00178.html | 1269 +-- doc/api/a00179.html | 9368 +++++++++++++++-- doc/api/a00180.html | 511 +- doc/api/a00181.html | 361 +- doc/api/a00182.html | 8923 +--------------- doc/api/a00183.html | 1213 ++- doc/api/a00184.html | 264 +- doc/api/a00185.html | 344 +- doc/api/a00186.html | 980 +- doc/api/a00187.html | 124 +- doc/api/a00188.html | 177 +- doc/api/a00189.html | 360 +- doc/api/a00190.html | 425 +- doc/api/a00191.html | 408 +- doc/api/a00192.html | 719 +- doc/api/a00193.html | 438 +- doc/api/a00194.html | 501 +- doc/api/a00195.html | 648 +- doc/api/a00196.html | 279 +- doc/api/a00197.html | 182 +- doc/api/a00198.html | 182 +- doc/api/a00199.html | 78 +- doc/api/a00200.html | 104 +- doc/api/a00201.html | 281 +- doc/api/a00202.html | 409 +- doc/api/a00203.html | 364 +- doc/api/a00204.html | 92 +- doc/api/a00205.html | 71 +- doc/api/a00206.html | 90 +- doc/api/a00207.html | 70 +- doc/api/a00208.html | 186 +- doc/api/a00209.html | 126 +- doc/api/a00210.html | 110 +- doc/api/a00211.html | 215 +- doc/api/a00212.html | 115 +- doc/api/a00213.html | 322 +- doc/api/a00214.html | 302 +- doc/api/a00215.html | 80 +- doc/api/a00216.html | 121 +- doc/api/a00217.html | 210 +- doc/api/a00218.html | 175 +- doc/api/a00219.html | 62 +- doc/api/a00220.html | 66 +- doc/api/a00221.html | 70 +- doc/api/a00222.html | 560 +- doc/api/a00223.html | 566 +- doc/api/a00224.html | 132 +- doc/api/a00225.html | 346 +- doc/api/a00226.html | 132 +- doc/api/a00227.html | 408 +- doc/api/a00228.html | 178 +- doc/api/a00229.html | 148 +- doc/api/a00230.html | 50 +- doc/api/a00231.html | 113 +- doc/api/a00232.html | 355 +- doc/api/a00233.html | 188 +- doc/api/a00234.html | 120 +- doc/api/a00235.html | 218 +- doc/api/a00236.html | 319 +- doc/api/a00237.html | 7778 +++++++++++++- doc/api/a00238.html | 128 +- doc/api/a00239.html | 271 + doc/api/a00240.html | 104 +- .../dir_04e4a28b8d58785d7769817294d623f5.html | 63 - ...dir_0c6652232a835be54bedd6cfd7502504.html} | 20 +- ...dir_153b03dd71a7bff437c38ec53cb2e014.html} | 20 +- ...dir_5cf96241cdcf6779b80e104875f9716f.html} | 70 +- ...dir_5d3642ea3c7f2dae4a957f2cf472c9ae.html} | 140 +- ...dir_885cc87fac2d91e269af0a5a959fa5f6.html} | 20 +- .../dir_8aa733b201d3a9f98631fbccc86ae6c7.html | 95 + ...dir_9b22c367036d391e575f56d067c9855b.html} | 106 +- ...dir_e2c7faa62a52820b5be8795affd6e495.html} | 20 +- .../dir_e3ecd7863bd215c92a17f47e2ae3be43.html | 63 - ...dir_e6d11964c5662039c68343b35ca5648c.html} | 20 +- .../dir_f7324829a002c536307b42a892c06451.html | 89 - doc/api/dynsections.js | 54 +- doc/api/files.html | 306 +- doc/api/ftv2cl.png | Bin 453 -> 0 bytes doc/api/ftv2mo.png | Bin 403 -> 0 bytes doc/api/ftv2ns.png | Bin 388 -> 0 bytes doc/api/index.html | 37 +- doc/api/logo.png | Bin 0 -> 8453 bytes doc/api/modules.html | 191 +- doc/api/namespacemembers.html | 174 - doc/api/namespacemembers_0x62.html | 177 - doc/api/namespacemembers_0x63.html | 159 - doc/api/namespacemembers_0x64.html | 237 - doc/api/namespacemembers_0x65.html | 162 - doc/api/namespacemembers_0x66.html | 411 - doc/api/namespacemembers_0x67.html | 105 - doc/api/namespacemembers_0x68.html | 672 -- doc/api/namespacemembers_0x69.html | 333 - doc/api/namespacemembers_0x6c.html | 717 -- doc/api/namespacemembers_0x6d.html | 783 -- doc/api/namespacemembers_0x6e.html | 123 - doc/api/namespacemembers_0x6f.html | 123 - doc/api/namespacemembers_0x70.html | 207 - doc/api/namespacemembers_0x71.html | 105 - doc/api/namespacemembers_0x72.html | 180 - doc/api/namespacemembers_0x73.html | 180 - doc/api/namespacemembers_0x74.html | 135 - doc/api/namespacemembers_0x75.html | 309 - doc/api/namespacemembers_0x76.html | 108 - doc/api/namespacemembers_0x77.html | 96 - doc/api/namespacemembers_0x79.html | 105 - doc/api/namespacemembers_0x7a.html | 96 - doc/api/namespacemembers_func.html | 173 - doc/api/namespacemembers_func_0x62.html | 119 - doc/api/namespacemembers_func_0x63.html | 158 - doc/api/namespacemembers_func_0x64.html | 137 - doc/api/namespacemembers_func_0x65.html | 161 - doc/api/namespacemembers_func_0x66.html | 194 - doc/api/namespacemembers_func_0x67.html | 104 - doc/api/namespacemembers_func_0x68.html | 107 - doc/api/namespacemembers_func_0x69.html | 158 - doc/api/namespacemembers_func_0x6c.html | 152 - doc/api/namespacemembers_func_0x6d.html | 182 - doc/api/namespacemembers_func_0x6e.html | 122 - doc/api/namespacemembers_func_0x6f.html | 122 - doc/api/namespacemembers_func_0x70.html | 206 - doc/api/namespacemembers_func_0x71.html | 98 - doc/api/namespacemembers_func_0x72.html | 179 - doc/api/namespacemembers_func_0x73.html | 158 - doc/api/namespacemembers_func_0x74.html | 134 - doc/api/namespacemembers_func_0x75.html | 173 - doc/api/namespacemembers_func_0x76.html | 95 - doc/api/namespacemembers_func_0x79.html | 104 - doc/api/namespacemembers_func_0x7a.html | 95 - doc/api/namespacemembers_type.html | 139 - doc/api/namespacemembers_type_0x64.html | 181 - doc/api/namespacemembers_type_0x66.html | 298 - doc/api/namespacemembers_type_0x68.html | 646 -- doc/api/namespacemembers_type_0x69.html | 256 - doc/api/namespacemembers_type_0x6c.html | 646 -- doc/api/namespacemembers_type_0x6d.html | 682 -- doc/api/namespacemembers_type_0x71.html | 88 - doc/api/namespacemembers_type_0x73.html | 103 - doc/api/namespacemembers_type_0x75.html | 217 - doc/api/namespacemembers_type_0x76.html | 94 - doc/api/namespacemembers_type_0x77.html | 85 - doc/api/namespaces.html | 64 - doc/api/pages.html | 59 - 464 files changed, 68872 insertions(+), 70562 deletions(-) create mode 100644 doc/api/a00001.html create mode 100644 doc/api/a00001_source.html create mode 100644 doc/api/a00002_source.html rename doc/api/{a00148.html => a00003.html} (71%) create mode 100644 doc/api/a00003_source.html create mode 100644 doc/api/a00004.html create mode 100644 doc/api/a00005.html create mode 100644 doc/api/a00006.html create mode 100644 doc/api/a00008.html create mode 100644 doc/api/a00009.html rename doc/api/{a00064.html => a00013.html} (64%) create mode 100644 doc/api/a00020.html delete mode 100644 doc/api/a00022.html create mode 100644 doc/api/a00023.html create mode 100644 doc/api/a00026.html create mode 100644 doc/api/a00032.html create mode 100644 doc/api/a00033.html create mode 100644 doc/api/a00034.html create mode 100644 doc/api/a00035.html create mode 100644 doc/api/a00036.html create mode 100644 doc/api/a00037.html create mode 100644 doc/api/a00038.html create mode 100644 doc/api/a00039.html create mode 100644 doc/api/a00040.html create mode 100644 doc/api/a00046.html create mode 100644 doc/api/a00048.html delete mode 100644 doc/api/a00051.html create mode 100644 doc/api/a00052.html create mode 100644 doc/api/a00053.html create mode 100644 doc/api/a00054.html create mode 100644 doc/api/a00055.html create mode 100644 doc/api/a00057.html create mode 100644 doc/api/a00058.html create mode 100644 doc/api/a00061.html create mode 100644 doc/api/a00069.html create mode 100644 doc/api/a00084.html delete mode 100644 doc/api/a00089.html create mode 100644 doc/api/a00093.html create mode 100644 doc/api/a00096.html create mode 100644 doc/api/a00101.html create mode 100644 doc/api/a00104.html delete mode 100644 doc/api/a00106.html create mode 100644 doc/api/a00108.html rename doc/api/{a00149.html => a00109.html} (58%) create mode 100644 doc/api/a00118.html create mode 100644 doc/api/a00119.html create mode 100644 doc/api/a00120.html create mode 100644 doc/api/a00121.html create mode 100644 doc/api/a00122.html create mode 100644 doc/api/a00123.html create mode 100644 doc/api/a00124.html create mode 100644 doc/api/a00125.html create mode 100644 doc/api/a00126.html create mode 100644 doc/api/a00127.html create mode 100644 doc/api/a00128.html create mode 100644 doc/api/a00129.html create mode 100644 doc/api/a00130.html create mode 100644 doc/api/a00131.html create mode 100644 doc/api/a00134.html create mode 100644 doc/api/a00135.html create mode 100644 doc/api/a00136.html create mode 100644 doc/api/a00137.html create mode 100644 doc/api/a00138.html create mode 100644 doc/api/a00140.html create mode 100644 doc/api/a00141.html delete mode 100644 doc/api/a00146.html delete mode 100644 doc/api/a00146_source.html delete mode 100644 doc/api/a00147.html delete mode 100644 doc/api/a00147_source.html delete mode 100644 doc/api/a00148_source.html delete mode 100644 doc/api/a00149_source.html delete mode 100644 doc/api/a00150_source.html create mode 100644 doc/api/a00152.html create mode 100644 doc/api/a00153.html create mode 100644 doc/api/a00154.html create mode 100644 doc/api/a00239.html delete mode 100644 doc/api/dir_04e4a28b8d58785d7769817294d623f5.html rename doc/api/{dir_968fb7988749a6351e7b3d0c1783dec4.html => dir_0c6652232a835be54bedd6cfd7502504.html} (71%) rename doc/api/{dir_8ceffd4ee35c3518d4e8bdc7e638efe8.html => dir_153b03dd71a7bff437c38ec53cb2e014.html} (74%) rename doc/api/{dir_e50778361fd4ab4de52181ed9eb2b726.html => dir_5cf96241cdcf6779b80e104875f9716f.html} (56%) rename doc/api/{dir_a8d99eddac27b2368ab5252ce80ded11.html => dir_5d3642ea3c7f2dae4a957f2cf472c9ae.html} (55%) rename doc/api/{dir_6e418c18ca640a0404613de005739e2e.html => dir_885cc87fac2d91e269af0a5a959fa5f6.html} (68%) create mode 100644 doc/api/dir_8aa733b201d3a9f98631fbccc86ae6c7.html rename doc/api/{dir_4d1ca7e3aefdd5b86b5dba8da1c3d503.html => dir_9b22c367036d391e575f56d067c9855b.html} (58%) rename doc/api/{dir_edf753475b928be648c1cf1c6443cf63.html => dir_e2c7faa62a52820b5be8795affd6e495.html} (65%) delete mode 100644 doc/api/dir_e3ecd7863bd215c92a17f47e2ae3be43.html rename doc/api/{dir_89daaa151958d75313fcd89dd5f4bdb8.html => dir_e6d11964c5662039c68343b35ca5648c.html} (62%) delete mode 100644 doc/api/dir_f7324829a002c536307b42a892c06451.html delete mode 100644 doc/api/ftv2cl.png delete mode 100644 doc/api/ftv2mo.png delete mode 100644 doc/api/ftv2ns.png create mode 100644 doc/api/logo.png delete mode 100644 doc/api/namespacemembers.html delete mode 100644 doc/api/namespacemembers_0x62.html delete mode 100644 doc/api/namespacemembers_0x63.html delete mode 100644 doc/api/namespacemembers_0x64.html delete mode 100644 doc/api/namespacemembers_0x65.html delete mode 100644 doc/api/namespacemembers_0x66.html delete mode 100644 doc/api/namespacemembers_0x67.html delete mode 100644 doc/api/namespacemembers_0x68.html delete mode 100644 doc/api/namespacemembers_0x69.html delete mode 100644 doc/api/namespacemembers_0x6c.html delete mode 100644 doc/api/namespacemembers_0x6d.html delete mode 100644 doc/api/namespacemembers_0x6e.html delete mode 100644 doc/api/namespacemembers_0x6f.html delete mode 100644 doc/api/namespacemembers_0x70.html delete mode 100644 doc/api/namespacemembers_0x71.html delete mode 100644 doc/api/namespacemembers_0x72.html delete mode 100644 doc/api/namespacemembers_0x73.html delete mode 100644 doc/api/namespacemembers_0x74.html delete mode 100644 doc/api/namespacemembers_0x75.html delete mode 100644 doc/api/namespacemembers_0x76.html delete mode 100644 doc/api/namespacemembers_0x77.html delete mode 100644 doc/api/namespacemembers_0x79.html delete mode 100644 doc/api/namespacemembers_0x7a.html delete mode 100644 doc/api/namespacemembers_func.html delete mode 100644 doc/api/namespacemembers_func_0x62.html delete mode 100644 doc/api/namespacemembers_func_0x63.html delete mode 100644 doc/api/namespacemembers_func_0x64.html delete mode 100644 doc/api/namespacemembers_func_0x65.html delete mode 100644 doc/api/namespacemembers_func_0x66.html delete mode 100644 doc/api/namespacemembers_func_0x67.html delete mode 100644 doc/api/namespacemembers_func_0x68.html delete mode 100644 doc/api/namespacemembers_func_0x69.html delete mode 100644 doc/api/namespacemembers_func_0x6c.html delete mode 100644 doc/api/namespacemembers_func_0x6d.html delete mode 100644 doc/api/namespacemembers_func_0x6e.html delete mode 100644 doc/api/namespacemembers_func_0x6f.html delete mode 100644 doc/api/namespacemembers_func_0x70.html delete mode 100644 doc/api/namespacemembers_func_0x71.html delete mode 100644 doc/api/namespacemembers_func_0x72.html delete mode 100644 doc/api/namespacemembers_func_0x73.html delete mode 100644 doc/api/namespacemembers_func_0x74.html delete mode 100644 doc/api/namespacemembers_func_0x75.html delete mode 100644 doc/api/namespacemembers_func_0x76.html delete mode 100644 doc/api/namespacemembers_func_0x79.html delete mode 100644 doc/api/namespacemembers_func_0x7a.html delete mode 100644 doc/api/namespacemembers_type.html delete mode 100644 doc/api/namespacemembers_type_0x64.html delete mode 100644 doc/api/namespacemembers_type_0x66.html delete mode 100644 doc/api/namespacemembers_type_0x68.html delete mode 100644 doc/api/namespacemembers_type_0x69.html delete mode 100644 doc/api/namespacemembers_type_0x6c.html delete mode 100644 doc/api/namespacemembers_type_0x6d.html delete mode 100644 doc/api/namespacemembers_type_0x71.html delete mode 100644 doc/api/namespacemembers_type_0x73.html delete mode 100644 doc/api/namespacemembers_type_0x75.html delete mode 100644 doc/api/namespacemembers_type_0x76.html delete mode 100644 doc/api/namespacemembers_type_0x77.html delete mode 100644 doc/api/namespaces.html delete mode 100644 doc/api/pages.html diff --git a/doc/api/a00001.html b/doc/api/a00001.html new file mode 100644 index 00000000..ff3675d4 --- /dev/null +++ b/doc/api/a00001.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: _features.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    _features.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2013-02-20 / 2013-02-20
    +
    Author
    Christophe Riccio
    + +

    Definition in file _features.hpp.

    +
    + + + + diff --git a/doc/api/a00001_source.html b/doc/api/a00001_source.html new file mode 100644 index 00000000..eb6f4028 --- /dev/null +++ b/doc/api/a00001_source.html @@ -0,0 +1,457 @@ + + + + + + +0.9.6: _features.hpp Source File + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    _features.hpp
    +
    +
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 // #define GLM_CXX98_EXCEPTIONS
    +
    32 // #define GLM_CXX98_RTTI
    +
    33 
    +
    34 // #define GLM_CXX11_RVALUE_REFERENCES
    +
    35 // Rvalue references - GCC 4.3
    +
    36 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
    +
    37 
    +
    38 // GLM_CXX11_TRAILING_RETURN
    +
    39 // Rvalue references for *this - GCC not supported
    +
    40 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
    +
    41 
    +
    42 // GLM_CXX11_NONSTATIC_MEMBER_INIT
    +
    43 // Initialization of class objects by rvalues - GCC any
    +
    44 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
    +
    45 
    +
    46 // GLM_CXX11_NONSTATIC_MEMBER_INIT
    +
    47 // Non-static data member initializers - GCC 4.7
    +
    48 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
    +
    49 
    +
    50 // #define GLM_CXX11_VARIADIC_TEMPLATE
    +
    51 // Variadic templates - GCC 4.3
    +
    52 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
    +
    53 
    +
    54 //
    +
    55 // Extending variadic template template parameters - GCC 4.4
    +
    56 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf
    +
    57 
    +
    58 // #define GLM_CXX11_GENERALIZED_INITIALIZERS
    +
    59 // Initializer lists - GCC 4.4
    +
    60 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
    +
    61 
    +
    62 // #define GLM_CXX11_STATIC_ASSERT
    +
    63 // Static assertions - GCC 4.3
    +
    64 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
    +
    65 
    +
    66 // #define GLM_CXX11_AUTO_TYPE
    +
    67 // auto-typed variables - GCC 4.4
    +
    68 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
    +
    69 
    +
    70 // #define GLM_CXX11_AUTO_TYPE
    +
    71 // Multi-declarator auto - GCC 4.4
    +
    72 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf
    +
    73 
    +
    74 // #define GLM_CXX11_AUTO_TYPE
    +
    75 // Removal of auto as a storage-class specifier - GCC 4.4
    +
    76 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm
    +
    77 
    +
    78 // #define GLM_CXX11_AUTO_TYPE
    +
    79 // New function declarator syntax - GCC 4.4
    +
    80 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
    +
    81 
    +
    82 // #define GLM_CXX11_LAMBDAS
    +
    83 // New wording for C++0x lambdas - GCC 4.5
    +
    84 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf
    +
    85 
    +
    86 // #define GLM_CXX11_DECLTYPE
    +
    87 // Declared type of an expression - GCC 4.3
    +
    88 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
    +
    89 
    +
    90 //
    +
    91 // Right angle brackets - GCC 4.3
    +
    92 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
    +
    93 
    +
    94 //
    +
    95 // Default template arguments for function templates DR226 GCC 4.3
    +
    96 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
    +
    97 
    +
    98 //
    +
    99 // Solving the SFINAE problem for expressions DR339 GCC 4.4
    +
    100 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html
    +
    101 
    +
    102 // #define GLM_CXX11_ALIAS_TEMPLATE
    +
    103 // Template aliases N2258 GCC 4.7
    +
    104 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
    +
    105 
    +
    106 //
    +
    107 // Extern templates N1987 Yes
    +
    108 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
    +
    109 
    +
    110 // #define GLM_CXX11_NULLPTR
    +
    111 // Null pointer constant N2431 GCC 4.6
    +
    112 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
    +
    113 
    +
    114 // #define GLM_CXX11_STRONG_ENUMS
    +
    115 // Strongly-typed enums N2347 GCC 4.4
    +
    116 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
    +
    117 
    +
    118 //
    +
    119 // Forward declarations for enums N2764 GCC 4.6
    +
    120 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
    +
    121 
    +
    122 //
    +
    123 // Generalized attributes N2761 GCC 4.8
    +
    124 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
    +
    125 
    +
    126 //
    +
    127 // Generalized constant expressions N2235 GCC 4.6
    +
    128 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
    +
    129 
    +
    130 //
    +
    131 // Alignment support N2341 GCC 4.8
    +
    132 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
    +
    133 
    +
    134 // #define GLM_CXX11_DELEGATING_CONSTRUCTORS
    +
    135 // Delegating constructors N1986 GCC 4.7
    +
    136 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
    +
    137 
    +
    138 //
    +
    139 // Inheriting constructors N2540 GCC 4.8
    +
    140 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
    +
    141 
    +
    142 // #define GLM_CXX11_EXPLICIT_CONVERSIONS
    +
    143 // Explicit conversion operators N2437 GCC 4.5
    +
    144 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
    +
    145 
    +
    146 //
    +
    147 // New character types N2249 GCC 4.4
    +
    148 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html
    +
    149 
    +
    150 //
    +
    151 // Unicode string literals N2442 GCC 4.5
    +
    152 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
    +
    153 
    +
    154 //
    +
    155 // Raw string literals N2442 GCC 4.5
    +
    156 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
    +
    157 
    +
    158 //
    +
    159 // Universal character name literals N2170 GCC 4.5
    +
    160 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html
    +
    161 
    +
    162 // #define GLM_CXX11_USER_LITERALS
    +
    163 // User-defined literals N2765 GCC 4.7
    +
    164 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
    +
    165 
    +
    166 //
    +
    167 // Standard Layout Types N2342 GCC 4.5
    +
    168 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
    +
    169 
    +
    170 // #define GLM_CXX11_DEFAULTED_FUNCTIONS
    +
    171 // #define GLM_CXX11_DELETED_FUNCTIONS
    +
    172 // Defaulted and deleted functions N2346 GCC 4.4
    +
    173 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
    +
    174 
    +
    175 //
    +
    176 // Extended friend declarations N1791 GCC 4.7
    +
    177 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
    +
    178 
    +
    179 //
    +
    180 // Extending sizeof N2253 GCC 4.4
    +
    181 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
    +
    182 
    +
    183 // #define GLM_CXX11_INLINE_NAMESPACES
    +
    184 // Inline namespaces N2535 GCC 4.4
    +
    185 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
    +
    186 
    +
    187 // #define GLM_CXX11_UNRESTRICTED_UNIONS
    +
    188 // Unrestricted unions N2544 GCC 4.6
    +
    189 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
    +
    190 
    +
    191 // #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
    +
    192 // Local and unnamed types as template arguments N2657 GCC 4.5
    +
    193 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
    +
    194 
    +
    195 // #define GLM_CXX11_RANGE_FOR
    +
    196 // Range-based for N2930 GCC 4.6
    +
    197 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
    +
    198 
    +
    199 // #define GLM_CXX11_OVERRIDE_CONTROL
    +
    200 // Explicit virtual overrides N2928 N3206 N3272 GCC 4.7
    +
    201 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
    +
    202 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
    +
    203 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
    +
    204 
    +
    205 //
    +
    206 // Minimal support for garbage collection and reachability-based leak detection N2670 No
    +
    207 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
    +
    208 
    +
    209 // #define GLM_CXX11_NOEXCEPT
    +
    210 // Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)
    +
    211 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
    +
    212 
    +
    213 //
    +
    214 // Defining move special member functions N3053 GCC 4.6
    +
    215 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
    +
    216 
    +
    217 //
    +
    218 // Sequence points N2239 Yes
    +
    219 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
    +
    220 
    +
    221 //
    +
    222 // Atomic operations N2427 GCC 4.4
    +
    223 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
    +
    224 
    +
    225 //
    +
    226 // Strong Compare and Exchange N2748 GCC 4.5
    +
    227 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
    +
    228 
    +
    229 //
    +
    230 // Bidirectional Fences N2752 GCC 4.8
    +
    231 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm
    +
    232 
    +
    233 //
    +
    234 // Memory model N2429 GCC 4.8
    +
    235 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm
    +
    236 
    +
    237 //
    +
    238 // Data-dependency ordering: atomics and memory model N2664 GCC 4.4
    +
    239 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
    +
    240 
    +
    241 //
    +
    242 // Propagating exceptions N2179 GCC 4.4
    +
    243 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
    +
    244 
    +
    245 //
    +
    246 // Abandoning a process and at_quick_exit N2440 GCC 4.8
    +
    247 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm
    +
    248 
    +
    249 //
    +
    250 // Allow atomics use in signal handlers N2547 Yes
    +
    251 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm
    +
    252 
    +
    253 //
    +
    254 // Thread-local storage N2659 GCC 4.8
    +
    255 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
    +
    256 
    +
    257 //
    +
    258 // Dynamic initialization and destruction with concurrency N2660 GCC 4.3
    +
    259 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
    +
    260 
    +
    261 //
    +
    262 // __func__ predefined identifier N2340 GCC 4.3
    +
    263 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
    +
    264 
    +
    265 //
    +
    266 // C99 preprocessor N1653 GCC 4.3
    +
    267 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
    +
    268 
    +
    269 //
    +
    270 // long long N1811 GCC 4.3
    +
    271 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
    +
    272 
    +
    273 //
    +
    274 // Extended integral types N1988 Yes
    +
    275 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf
    +
    276 
    +
    277 #if(GLM_COMPILER & GLM_COMPILER_GCC)
    +
    278 
    +
    279 # if(GLM_COMPILER >= GLM_COMPILER_GCC43)
    +
    280 # define GLM_CXX11_STATIC_ASSERT
    +
    281 # endif
    +
    282 
    +
    283 #elif(GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM))
    +
    284 # if(__has_feature(cxx_exceptions))
    +
    285 # define GLM_CXX98_EXCEPTIONS
    +
    286 # endif
    +
    287 
    +
    288 # if(__has_feature(cxx_rtti))
    +
    289 # define GLM_CXX98_RTTI
    +
    290 # endif
    +
    291 
    +
    292 # if(__has_feature(cxx_access_control_sfinae))
    +
    293 # define GLM_CXX11_ACCESS_CONTROL_SFINAE
    +
    294 # endif
    +
    295 
    +
    296 # if(__has_feature(cxx_alias_templates))
    +
    297 # define GLM_CXX11_ALIAS_TEMPLATE
    +
    298 # endif
    +
    299 
    +
    300 # if(__has_feature(cxx_alignas))
    +
    301 # define GLM_CXX11_ALIGNAS
    +
    302 # endif
    +
    303 
    +
    304 # if(__has_feature(cxx_attributes))
    +
    305 # define GLM_CXX11_ATTRIBUTES
    +
    306 # endif
    +
    307 
    +
    308 # if(__has_feature(cxx_constexpr))
    +
    309 # define GLM_CXX11_CONSTEXPR
    +
    310 # endif
    +
    311 
    +
    312 # if(__has_feature(cxx_decltype))
    +
    313 # define GLM_CXX11_DECLTYPE
    +
    314 # endif
    +
    315 
    +
    316 # if(__has_feature(cxx_default_function_template_args))
    +
    317 # define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
    +
    318 # endif
    +
    319 
    +
    320 # if(__has_feature(cxx_defaulted_functions))
    +
    321 # define GLM_CXX11_DEFAULTED_FUNCTIONS
    +
    322 # endif
    +
    323 
    +
    324 # if(__has_feature(cxx_delegating_constructors))
    +
    325 # define GLM_CXX11_DELEGATING_CONSTRUCTORS
    +
    326 # endif
    +
    327 
    +
    328 # if(__has_feature(cxx_deleted_functions))
    +
    329 # define GLM_CXX11_DELETED_FUNCTIONS
    +
    330 # endif
    +
    331 
    +
    332 # if(__has_feature(cxx_explicit_conversions))
    +
    333 # define GLM_CXX11_EXPLICIT_CONVERSIONS
    +
    334 # endif
    +
    335 
    +
    336 # if(__has_feature(cxx_generalized_initializers))
    +
    337 # define GLM_CXX11_GENERALIZED_INITIALIZERS
    +
    338 # endif
    +
    339 
    +
    340 # if(__has_feature(cxx_implicit_moves))
    +
    341 # define GLM_CXX11_IMPLICIT_MOVES
    +
    342 # endif
    +
    343 
    +
    344 # if(__has_feature(cxx_inheriting_constructors))
    +
    345 # define GLM_CXX11_INHERITING_CONSTRUCTORS
    +
    346 # endif
    +
    347 
    +
    348 # if(__has_feature(cxx_inline_namespaces))
    +
    349 # define GLM_CXX11_INLINE_NAMESPACES
    +
    350 # endif
    +
    351 
    +
    352 # if(__has_feature(cxx_lambdas))
    +
    353 # define GLM_CXX11_LAMBDAS
    +
    354 # endif
    +
    355 
    +
    356 # if(__has_feature(cxx_local_type_template_args))
    +
    357 # define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
    +
    358 # endif
    +
    359 
    +
    360 # if(__has_feature(cxx_noexcept))
    +
    361 # define GLM_CXX11_NOEXCEPT
    +
    362 # endif
    +
    363 
    +
    364 # if(__has_feature(cxx_nonstatic_member_init))
    +
    365 # define GLM_CXX11_NONSTATIC_MEMBER_INIT
    +
    366 # endif
    +
    367 
    +
    368 # if(__has_feature(cxx_nullptr))
    +
    369 # define GLM_CXX11_NULLPTR
    +
    370 # endif
    +
    371 
    +
    372 # if(__has_feature(cxx_override_control))
    +
    373 # define GLM_CXX11_OVERRIDE_CONTROL
    +
    374 # endif
    +
    375 
    +
    376 # if(__has_feature(cxx_reference_qualified_functions))
    +
    377 # define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
    +
    378 # endif
    +
    379 
    +
    380 # if(__has_feature(cxx_range_for))
    +
    381 # define GLM_CXX11_RANGE_FOR
    +
    382 # endif
    +
    383 
    +
    384 # if(__has_feature(cxx_raw_string_literals))
    +
    385 # define GLM_CXX11_RAW_STRING_LITERALS
    +
    386 # endif
    +
    387 
    +
    388 # if(__has_feature(cxx_rvalue_references))
    +
    389 # define GLM_CXX11_RVALUE_REFERENCES
    +
    390 # endif
    +
    391 
    +
    392 # if(__has_feature(cxx_static_assert))
    +
    393 # define GLM_CXX11_STATIC_ASSERT
    +
    394 # endif
    +
    395 
    +
    396 # if(__has_feature(cxx_auto_type))
    +
    397 # define GLM_CXX11_AUTO_TYPE
    +
    398 # endif
    +
    399 
    +
    400 # if(__has_feature(cxx_strong_enums))
    +
    401 # define GLM_CXX11_STRONG_ENUMS
    +
    402 # endif
    +
    403 
    +
    404 # if(__has_feature(cxx_trailing_return))
    +
    405 # define GLM_CXX11_TRAILING_RETURN
    +
    406 # endif
    +
    407 
    +
    408 # if(__has_feature(cxx_unicode_literals))
    +
    409 # define GLM_CXX11_UNICODE_LITERALS
    +
    410 # endif
    +
    411 
    +
    412 # if(__has_feature(cxx_unrestricted_unions))
    +
    413 # define GLM_CXX11_UNRESTRICTED_UNIONS
    +
    414 # endif
    +
    415 
    +
    416 # if(__has_feature(cxx_user_literals))
    +
    417 # define GLM_CXX11_USER_LITERALS
    +
    418 # endif
    +
    419 
    +
    420 # if(__has_feature(cxx_variadic_templates))
    +
    421 # define GLM_CXX11_VARIADIC_TEMPLATES
    +
    422 # endif
    +
    423 
    +
    424 #endif//(GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM))
    +
    + + + + diff --git a/doc/api/a00002.html b/doc/api/a00002.html index cad062fd..bb37258b 100644 --- a/doc/api/a00002.html +++ b/doc/api/a00002.html @@ -3,8 +3,8 @@ - -GLM: Differences between GLSL and GLM core + +0.9.6: _fixes.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,36 +26,47 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + + +
    -
    Differences between GLSL and GLM core
    +
    _fixes.hpp File Reference
    -

    GLM comes very close to replicating GLSL, but it is not exact. Here is a list of differences between GLM and GLSL:

    -
      -
    • -

      Precision qualifiers. In GLSL numeric types can have qualifiers that define the precision of that type. While OpenGL's GLSL ignores these qualifiers, OpenGL ES's version of GLSL uses them.

      -

      C++ has no language equivalent to precision qualifiers. Instead, GLM provides a set of typedefs for each kind of precision qualifier and type. These types can be found in their own section.

      -

      Functions that take types tend to be templated on those types, so they can take these qualified types just as well as the regular ones.

      -
    • -
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2011-02-21 / 2011-11-22
    +
    Author
    Christophe Riccio
    + +

    Definition in file _fixes.hpp.

    diff --git a/doc/api/a00002_source.html b/doc/api/a00002_source.html new file mode 100644 index 00000000..589cbc23 --- /dev/null +++ b/doc/api/a00002_source.html @@ -0,0 +1,83 @@ + + + + + + +0.9.6: _fixes.hpp Source File + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    _fixes.hpp
    +
    +
    +Go to the documentation of this file.
    1 
    +
    29 #include <cmath>
    +
    30 
    +
    32 #ifdef max
    +
    33 #undef max
    +
    34 #endif
    +
    35 
    +
    37 #ifdef min
    +
    38 #undef min
    +
    39 #endif
    +
    40 
    +
    42 #ifdef isnan
    +
    43 #undef isnan
    +
    44 #endif
    +
    45 
    +
    47 #ifdef isinf
    +
    48 #undef isinf
    +
    49 #endif
    +
    50 
    +
    52 #ifdef log2
    +
    53 #undef log2
    +
    54 #endif
    +
    55 
    +
    + + + + diff --git a/doc/api/a00148.html b/doc/api/a00003.html similarity index 71% rename from doc/api/a00148.html rename to doc/api/a00003.html index 02fd0229..77c8a3b4 100644 --- a/doc/api/a00148.html +++ b/doc/api/a00003.html @@ -3,8 +3,8 @@ - -GLM: vector_relational.hpp File Reference + +0.9.6: _noise.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,32 +41,32 @@
    -
    vector_relational.hpp File Reference
    +
    _noise.hpp File Reference
    -

    Go to the source code of this file.

    +

    Go to the source code of this file.

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    +

    GLM Core

    Date
    2013-12-24 / 2013-12-24
    Author
    Christophe Riccio
    -

    Definition in file vector_relational.hpp.

    +

    Definition in file _noise.hpp.

    diff --git a/doc/api/a00003_source.html b/doc/api/a00003_source.html new file mode 100644 index 00000000..26c7cd8f --- /dev/null +++ b/doc/api/a00003_source.html @@ -0,0 +1,162 @@ + + + + + + +0.9.6: _noise.hpp Source File + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    _noise.hpp
    +
    +
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 namespace glm{
    +
    32 namespace detail
    +
    33 {
    +
    34  template <typename T>
    +
    35  GLM_FUNC_QUALIFIER T mod289(T const & x)
    +
    36  {
    +
    37  return x - floor(x * static_cast<T>(1.0) / static_cast<T>(289.0)) * static_cast<T>(289.0);
    +
    38  }
    +
    39 
    +
    40  template <typename T>
    +
    41  GLM_FUNC_QUALIFIER T permute(T const & x)
    +
    42  {
    +
    43  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
    +
    44  }
    +
    45 
    +
    46  template <typename T, precision P>
    +
    47  GLM_FUNC_QUALIFIER tvec2<T, P> permute(tvec2<T, P> const & x)
    +
    48  {
    +
    49  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
    +
    50  }
    +
    51 
    +
    52  template <typename T, precision P>
    +
    53  GLM_FUNC_QUALIFIER tvec3<T, P> permute(tvec3<T, P> const & x)
    +
    54  {
    +
    55  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
    +
    56  }
    +
    57 
    +
    58  template <typename T, precision P>
    +
    59  GLM_FUNC_QUALIFIER tvec4<T, P> permute(tvec4<T, P> const & x)
    +
    60  {
    +
    61  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
    +
    62  }
    +
    63 /*
    +
    64  template <typename T, precision P, template<typename> class vecType>
    +
    65  GLM_FUNC_QUALIFIER vecType<T, P> permute(vecType<T, P> const & x)
    +
    66  {
    +
    67  return mod289(((x * T(34)) + T(1)) * x);
    +
    68  }
    +
    69 */
    +
    70  template <typename T>
    +
    71  GLM_FUNC_QUALIFIER T taylorInvSqrt(T const & r)
    +
    72  {
    +
    73  return T(1.79284291400159) - T(0.85373472095314) * r;
    +
    74  }
    +
    75 
    +
    76  template <typename T, precision P>
    +
    77  GLM_FUNC_QUALIFIER tvec2<T, P> taylorInvSqrt(tvec2<T, P> const & r)
    +
    78  {
    +
    79  return T(1.79284291400159) - T(0.85373472095314) * r;
    +
    80  }
    +
    81 
    +
    82  template <typename T, precision P>
    +
    83  GLM_FUNC_QUALIFIER tvec3<T, P> taylorInvSqrt(tvec3<T, P> const & r)
    +
    84  {
    +
    85  return T(1.79284291400159) - T(0.85373472095314) * r;
    +
    86  }
    +
    87 
    +
    88  template <typename T, precision P>
    +
    89  GLM_FUNC_QUALIFIER tvec4<T, P> taylorInvSqrt(tvec4<T, P> const & r)
    +
    90  {
    +
    91  return T(1.79284291400159) - T(0.85373472095314) * r;
    +
    92  }
    +
    93 /*
    +
    94  template <typename T, precision P, template<typename> class vecType>
    +
    95  GLM_FUNC_QUALIFIER vecType<T, P> taylorInvSqrt(vecType<T, P> const & r)
    +
    96  {
    +
    97  return T(1.79284291400159) - T(0.85373472095314) * r;
    +
    98  }
    +
    99 */
    +
    100 
    +
    101  template <typename T, precision P>
    +
    102  GLM_FUNC_QUALIFIER tvec2<T, P> fade(tvec2<T, P> const & t)
    +
    103  {
    +
    104  return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
    +
    105  }
    +
    106 
    +
    107  template <typename T, precision P>
    +
    108  GLM_FUNC_QUALIFIER tvec3<T, P> fade(tvec3<T, P> const & t)
    +
    109  {
    +
    110  return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
    +
    111  }
    +
    112 
    +
    113  template <typename T, precision P>
    +
    114  GLM_FUNC_QUALIFIER tvec4<T, P> fade(tvec4<T, P> const & t)
    +
    115  {
    +
    116  return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
    +
    117  }
    +
    118 /*
    +
    119  template <typename T, precision P, template <typename> class vecType>
    +
    120  GLM_FUNC_QUALIFIER vecType<T, P> fade(vecType<T, P> const & t)
    +
    121  {
    +
    122  return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
    +
    123  }
    +
    124 */
    +
    125 }//namespace detail
    +
    126 }//namespace glm
    +
    127 
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vecType< T, P > floor(vecType< T, P > const &x)
    Returns a value equal to the nearest integer that is less then or equal to x.
    +
    + + + + diff --git a/doc/api/a00004.html b/doc/api/a00004.html new file mode 100644 index 00000000..32b87550 --- /dev/null +++ b/doc/api/a00004.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: _swizzle.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    _swizzle.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2006-04-20 / 2011-02-16
    +
    Author
    Christophe Riccio
    + +

    Definition in file _swizzle.hpp.

    +
    + + + + diff --git a/doc/api/a00004_source.html b/doc/api/a00004_source.html index 3710764a..f043a072 100644 --- a/doc/api/a00004_source.html +++ b/doc/api/a00004_source.html @@ -3,8 +3,8 @@ - -GLM: _features.hpp Source File + +0.9.6: _swizzle.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,420 +41,824 @@
    -
    _features.hpp
    +
    _swizzle.hpp
    -
    1 
    -
    29 #ifndef glm_core_features
    -
    30 #define glm_core_features
    -
    31 
    -
    32 // #define GLM_CXX98_EXCEPTIONS
    -
    33 // #define GLM_CXX98_RTTI
    -
    34 
    -
    35 // #define GLM_CXX11_RVALUE_REFERENCES
    -
    36 // Rvalue references - GCC 4.3
    -
    37 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
    -
    38 
    -
    39 // GLM_CXX11_TRAILING_RETURN
    -
    40 // Rvalue references for *this - GCC not supported
    -
    41 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
    -
    42 
    -
    43 // GLM_CXX11_NONSTATIC_MEMBER_INIT
    -
    44 // Initialization of class objects by rvalues - GCC any
    -
    45 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
    -
    46 
    -
    47 // GLM_CXX11_NONSTATIC_MEMBER_INIT
    -
    48 // Non-static data member initializers - GCC 4.7
    -
    49 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
    -
    50 
    -
    51 // #define GLM_CXX11_VARIADIC_TEMPLATE
    -
    52 // Variadic templates - GCC 4.3
    -
    53 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 namespace glm{
    +
    32 namespace detail
    +
    33 {
    +
    34  // Internal class for implementing swizzle operators
    +
    35  template <typename T, int N>
    +
    36  struct _swizzle_base0
    +
    37  {
    +
    38  typedef T value_type;
    +
    39 
    +
    40  protected:
    +
    41  GLM_FUNC_QUALIFIER value_type& elem (size_t i) { return (reinterpret_cast<value_type*>(_buffer))[i]; }
    +
    42  GLM_FUNC_QUALIFIER const value_type& elem (size_t i) const { return (reinterpret_cast<const value_type*>(_buffer))[i]; }
    +
    43 
    +
    44  // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
    +
    45  // The size 1 buffer is assumed to aligned to the actual members so that the
    +
    46  // elem()
    +
    47  char _buffer[1];
    +
    48  };
    +
    49 
    +
    50  template <typename T, precision P, typename V, int E0, int E1, int E2, int E3, int N>
    +
    51  struct _swizzle_base1 : public _swizzle_base0<T, N>
    +
    52  {
    +
    53  };
    54 
    -
    55 //
    -
    56 // Extending variadic template template parameters - GCC 4.4
    -
    57 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf
    -
    58 
    -
    59 // #define GLM_CXX11_GENERALIZED_INITIALIZERS
    -
    60 // Initializer lists - GCC 4.4
    -
    61 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
    -
    62 
    -
    63 // #define GLM_CXX11_STATIC_ASSERT
    -
    64 // Static assertions - GCC 4.3
    -
    65 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
    +
    55  template <typename T, precision P, typename V, int E0, int E1>
    +
    56  struct _swizzle_base1<T, P, V,E0,E1,-1,-2,2> : public _swizzle_base0<T, 2>
    +
    57  {
    +
    58  GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1)); }
    +
    59  };
    +
    60 
    +
    61  template <typename T, precision P, typename V, int E0, int E1, int E2>
    +
    62  struct _swizzle_base1<T, P, V,E0,E1,E2,-1,3> : public _swizzle_base0<T, 3>
    +
    63  {
    +
    64  GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); }
    +
    65  };
    66 
    -
    67 // #define GLM_CXX11_AUTO_TYPE
    -
    68 // auto-typed variables - GCC 4.4
    -
    69 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
    -
    70 
    -
    71 // #define GLM_CXX11_AUTO_TYPE
    -
    72 // Multi-declarator auto - GCC 4.4
    -
    73 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf
    -
    74 
    -
    75 // #define GLM_CXX11_AUTO_TYPE
    -
    76 // Removal of auto as a storage-class specifier - GCC 4.4
    -
    77 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm
    -
    78 
    -
    79 // #define GLM_CXX11_AUTO_TYPE
    -
    80 // New function declarator syntax - GCC 4.4
    -
    81 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
    -
    82 
    -
    83 // #define GLM_CXX11_LAMBDAS
    -
    84 // New wording for C++0x lambdas - GCC 4.5
    -
    85 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf
    -
    86 
    -
    87 // #define GLM_CXX11_DECLTYPE
    -
    88 // Declared type of an expression - GCC 4.3
    -
    89 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
    +
    67  template <typename T, precision P, typename V, int E0, int E1, int E2, int E3>
    +
    68  struct _swizzle_base1<T, P, V,E0,E1,E2,E3,4> : public _swizzle_base0<T, 4>
    +
    69  {
    +
    70  GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
    +
    71  };
    +
    72 
    +
    73  // Internal class for implementing swizzle operators
    +
    74  /*
    +
    75  Template parameters:
    +
    76 
    +
    77  ValueType = type of scalar values (e.g. float, double)
    +
    78  VecType = class the swizzle is applies to (e.g. tvec3<float>)
    +
    79  N = number of components in the vector (e.g. 3)
    +
    80  E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec
    +
    81 
    +
    82  DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
    +
    83  containing duplicate elements so that they cannot be used as r-values).
    +
    84  */
    +
    85  template <typename ValueType, precision P, typename VecType, int N, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
    +
    86  struct _swizzle_base2 : public _swizzle_base1<ValueType, P, VecType,E0,E1,E2,E3,N>
    +
    87  {
    +
    88  typedef VecType vec_type;
    +
    89  typedef ValueType value_type;
    90 
    -
    91 //
    -
    92 // Right angle brackets - GCC 4.3
    -
    93 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
    -
    94 
    -
    95 //
    -
    96 // Default template arguments for function templates DR226 GCC 4.3
    -
    97 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
    -
    98 
    -
    99 //
    -
    100 // Solving the SFINAE problem for expressions DR339 GCC 4.4
    -
    101 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html
    -
    102 
    -
    103 // #define GLM_CXX11_ALIAS_TEMPLATE
    -
    104 // Template aliases N2258 GCC 4.7
    -
    105 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
    +
    91  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const ValueType& t)
    +
    92  {
    +
    93  for (int i = 0; i < N; ++i)
    +
    94  (*this)[i] = t;
    +
    95  return *this;
    +
    96  }
    +
    97 
    +
    98  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const VecType& that)
    +
    99  {
    +
    100  struct op {
    +
    101  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e = t; }
    +
    102  };
    +
    103  _apply_op(that, op());
    +
    104  return *this;
    +
    105  }
    106 
    -
    107 //
    -
    108 // Extern templates N1987 Yes
    -
    109 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
    -
    110 
    -
    111 // #define GLM_CXX11_NULLPTR
    -
    112 // Null pointer constant N2431 GCC 4.6
    -
    113 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
    +
    107  GLM_FUNC_QUALIFIER void operator -= (const VecType& that)
    +
    108  {
    +
    109  struct op {
    +
    110  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e -= t; }
    +
    111  };
    +
    112  _apply_op(that, op());
    +
    113  }
    114 
    -
    115 // #define GLM_CXX11_STRONG_ENUMS
    -
    116 // Strongly-typed enums N2347 GCC 4.4
    -
    117 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
    -
    118 
    -
    119 //
    -
    120 // Forward declarations for enums N2764 GCC 4.6
    -
    121 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
    +
    115  GLM_FUNC_QUALIFIER void operator += (const VecType& that)
    +
    116  {
    +
    117  struct op {
    +
    118  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e += t; }
    +
    119  };
    +
    120  _apply_op(that, op());
    +
    121  }
    122 
    -
    123 //
    -
    124 // Generalized attributes N2761 GCC 4.8
    -
    125 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
    -
    126 
    -
    127 //
    -
    128 // Generalized constant expressions N2235 GCC 4.6
    -
    129 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
    +
    123  GLM_FUNC_QUALIFIER void operator *= (const VecType& that)
    +
    124  {
    +
    125  struct op {
    +
    126  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e *= t; }
    +
    127  };
    +
    128  _apply_op(that, op());
    +
    129  }
    130 
    -
    131 //
    -
    132 // Alignment support N2341 GCC 4.8
    -
    133 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
    -
    134 
    -
    135 // #define GLM_CXX11_DELEGATING_CONSTRUCTORS
    -
    136 // Delegating constructors N1986 GCC 4.7
    -
    137 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
    +
    131  GLM_FUNC_QUALIFIER void operator /= (const VecType& that)
    +
    132  {
    +
    133  struct op {
    +
    134  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e /= t; }
    +
    135  };
    +
    136  _apply_op(that, op());
    +
    137  }
    138 
    -
    139 //
    -
    140 // Inheriting constructors N2540 GCC 4.8
    -
    141 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
    -
    142 
    -
    143 // #define GLM_CXX11_EXPLICIT_CONVERSIONS
    -
    144 // Explicit conversion operators N2437 GCC 4.5
    -
    145 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
    -
    146 
    -
    147 //
    -
    148 // New character types N2249 GCC 4.4
    -
    149 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html
    -
    150 
    -
    151 //
    -
    152 // Unicode string literals N2442 GCC 4.5
    -
    153 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
    -
    154 
    -
    155 //
    -
    156 // Raw string literals N2442 GCC 4.5
    -
    157 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
    -
    158 
    -
    159 //
    -
    160 // Universal character name literals N2170 GCC 4.5
    -
    161 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html
    -
    162 
    -
    163 // #define GLM_CXX11_USER_LITERALS
    -
    164 // User-defined literals N2765 GCC 4.7
    -
    165 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
    -
    166 
    -
    167 //
    -
    168 // Standard Layout Types N2342 GCC 4.5
    -
    169 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
    -
    170 
    -
    171 // #define GLM_CXX11_DEFAULTED_FUNCTIONS
    -
    172 // #define GLM_CXX11_DELETED_FUNCTIONS
    -
    173 // Defaulted and deleted functions N2346 GCC 4.4
    -
    174 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
    -
    175 
    -
    176 //
    -
    177 // Extended friend declarations N1791 GCC 4.7
    -
    178 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
    -
    179 
    -
    180 //
    -
    181 // Extending sizeof N2253 GCC 4.4
    -
    182 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
    -
    183 
    -
    184 // #define GLM_CXX11_INLINE_NAMESPACES
    -
    185 // Inline namespaces N2535 GCC 4.4
    -
    186 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
    -
    187 
    -
    188 // #define GLM_CXX11_UNRESTRICTED_UNIONS
    -
    189 // Unrestricted unions N2544 GCC 4.6
    -
    190 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
    +
    139  GLM_FUNC_QUALIFIER value_type& operator[] (size_t i)
    +
    140  {
    +
    141  const int offset_dst[4] = { E0, E1, E2, E3 };
    +
    142  return this->elem(offset_dst[i]);
    +
    143  }
    +
    144  GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const
    +
    145  {
    +
    146  const int offset_dst[4] = { E0, E1, E2, E3 };
    +
    147  return this->elem(offset_dst[i]);
    +
    148  }
    +
    149 
    +
    150  protected:
    +
    151  template <typename T>
    +
    152  GLM_FUNC_QUALIFIER void _apply_op(const VecType& that, T op)
    +
    153  {
    +
    154  // Make a copy of the data in this == &that.
    +
    155  // The copier should optimize out the copy in cases where the function is
    +
    156  // properly inlined and the copy is not necessary.
    +
    157  ValueType t[N];
    +
    158  for (int i = 0; i < N; ++i)
    +
    159  t[i] = that[i];
    +
    160  for (int i = 0; i < N; ++i)
    +
    161  op( (*this)[i], t[i] );
    +
    162  }
    +
    163  };
    +
    164 
    +
    165  // Specialization for swizzles containing duplicate elements. These cannot be modified.
    +
    166  template <typename ValueType, precision P, typename VecType, int N, int E0, int E1, int E2, int E3>
    +
    167  struct _swizzle_base2<ValueType, P, VecType,N,E0,E1,E2,E3,1> : public _swizzle_base1<ValueType, P, VecType,E0,E1,E2,E3,N>
    +
    168  {
    +
    169  typedef VecType vec_type;
    +
    170  typedef ValueType value_type;
    +
    171 
    +
    172  struct Stub {};
    +
    173  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; }
    +
    174 
    +
    175  GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const
    +
    176  {
    +
    177  const int offset_dst[4] = { E0, E1, E2, E3 };
    +
    178  return this->elem(offset_dst[i]);
    +
    179  }
    +
    180  };
    +
    181 
    +
    182  template <int N,typename ValueType, precision P, typename VecType, int E0,int E1,int E2,int E3>
    +
    183  struct _swizzle : public _swizzle_base2<ValueType, P, VecType, N, E0, E1, E2, E3, (E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)>
    +
    184  {
    +
    185  typedef _swizzle_base2<ValueType, P, VecType,N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)> base_type;
    +
    186 
    +
    187  using base_type::operator=;
    +
    188 
    +
    189  GLM_FUNC_QUALIFIER operator VecType () const { return (*this)(); }
    +
    190  };
    191 
    -
    192 // #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
    -
    193 // Local and unnamed types as template arguments N2657 GCC 4.5
    -
    194 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
    -
    195 
    -
    196 // #define GLM_CXX11_RANGE_FOR
    -
    197 // Range-based for N2930 GCC 4.6
    -
    198 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
    +
    192 //
    +
    193 // To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
    +
    194 //
    +
    195 #define _GLM_SWIZZLE_TEMPLATE1 template <int N, typename T, precision P, typename V, int E0, int E1, int E2, int E3>
    +
    196 #define _GLM_SWIZZLE_TEMPLATE2 template <int N, typename T, precision P, typename V, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>
    +
    197 #define _GLM_SWIZZLE_TYPE1 _swizzle<N, T, P, V, E0, E1, E2, E3>
    +
    198 #define _GLM_SWIZZLE_TYPE2 _swizzle<N, T, P, V, F0, F1, F2, F3>
    199 
    -
    200 // #define GLM_CXX11_OVERRIDE_CONTROL
    -
    201 // Explicit virtual overrides N2928 N3206 N3272 GCC 4.7
    -
    202 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
    -
    203 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
    -
    204 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
    -
    205 
    -
    206 //
    -
    207 // Minimal support for garbage collection and reachability-based leak detection N2670 No
    -
    208 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
    -
    209 
    -
    210 // #define GLM_CXX11_NOEXCEPT
    -
    211 // Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)
    -
    212 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
    -
    213 
    -
    214 //
    -
    215 // Defining move special member functions N3053 GCC 4.6
    -
    216 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
    -
    217 
    -
    218 //
    -
    219 // Sequence points N2239 Yes
    -
    220 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
    -
    221 
    -
    222 //
    -
    223 // Atomic operations N2427 GCC 4.4
    -
    224 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
    -
    225 
    -
    226 //
    -
    227 // Strong Compare and Exchange N2748 GCC 4.5
    -
    228 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
    -
    229 
    -
    230 //
    -
    231 // Bidirectional Fences N2752 GCC 4.8
    -
    232 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm
    -
    233 
    -
    234 //
    -
    235 // Memory model N2429 GCC 4.8
    -
    236 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm
    -
    237 
    -
    238 //
    -
    239 // Data-dependency ordering: atomics and memory model N2664 GCC 4.4
    -
    240 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
    -
    241 
    -
    242 //
    -
    243 // Propagating exceptions N2179 GCC 4.4
    -
    244 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
    -
    245 
    -
    246 //
    -
    247 // Abandoning a process and at_quick_exit N2440 GCC 4.8
    -
    248 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm
    -
    249 
    -
    250 //
    -
    251 // Allow atomics use in signal handlers N2547 Yes
    -
    252 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm
    -
    253 
    -
    254 //
    -
    255 // Thread-local storage N2659 GCC 4.8
    -
    256 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
    -
    257 
    -
    258 //
    -
    259 // Dynamic initialization and destruction with concurrency N2660 GCC 4.3
    -
    260 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
    -
    261 
    -
    262 //
    -
    263 // __func__ predefined identifier N2340 GCC 4.3
    -
    264 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
    -
    265 
    -
    266 //
    -
    267 // C99 preprocessor N1653 GCC 4.3
    -
    268 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
    +
    200 //
    +
    201 // Wrapper for a binary operator (e.g. u.yy + v.zy)
    +
    202 //
    +
    203 #define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
    +
    204  _GLM_SWIZZLE_TEMPLATE2 \
    +
    205  GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
    +
    206  { \
    +
    207  return a() OPERAND b(); \
    +
    208  } \
    +
    209  _GLM_SWIZZLE_TEMPLATE1 \
    +
    210  GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b) \
    +
    211  { \
    +
    212  return a() OPERAND b; \
    +
    213  } \
    +
    214  _GLM_SWIZZLE_TEMPLATE1 \
    +
    215  GLM_FUNC_QUALIFIER V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b) \
    +
    216  { \
    +
    217  return a OPERAND b(); \
    +
    218  }
    +
    219 
    +
    220 //
    +
    221 // Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
    +
    222 //
    +
    223 #define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
    +
    224  _GLM_SWIZZLE_TEMPLATE1 \
    +
    225  GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \
    +
    226  { \
    +
    227  return a() OPERAND b; \
    +
    228  } \
    +
    229  _GLM_SWIZZLE_TEMPLATE1 \
    +
    230  GLM_FUNC_QUALIFIER V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \
    +
    231  { \
    +
    232  return a OPERAND b(); \
    +
    233  }
    +
    234 
    +
    235 //
    +
    236 // Macro for wrapping a function taking one argument (e.g. abs())
    +
    237 //
    +
    238 #define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \
    +
    239  _GLM_SWIZZLE_TEMPLATE1 \
    +
    240  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \
    +
    241  { \
    +
    242  return FUNCTION(a()); \
    +
    243  }
    +
    244 
    +
    245 //
    +
    246 // Macro for wrapping a function taking two vector arguments (e.g. dot()).
    +
    247 //
    +
    248 #define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \
    +
    249  _GLM_SWIZZLE_TEMPLATE2 \
    +
    250  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
    +
    251  { \
    +
    252  return FUNCTION(a(), b()); \
    +
    253  } \
    +
    254  _GLM_SWIZZLE_TEMPLATE1 \
    +
    255  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \
    +
    256  { \
    +
    257  return FUNCTION(a(), b()); \
    +
    258  } \
    +
    259  _GLM_SWIZZLE_TEMPLATE1 \
    +
    260  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \
    +
    261  { \
    +
    262  return FUNCTION(a(), b); \
    +
    263  } \
    +
    264  _GLM_SWIZZLE_TEMPLATE1 \
    +
    265  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \
    +
    266  { \
    +
    267  return FUNCTION(a, b()); \
    +
    268  }
    269 
    -
    270 //
    -
    271 // long long N1811 GCC 4.3
    -
    272 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
    -
    273 
    -
    274 //
    -
    275 // Extended integral types N1988 Yes
    -
    276 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf
    -
    277 
    -
    278 #if(GLM_COMPILER & GLM_COMPILER_GCC)
    -
    279 
    -
    280 # if(GLM_COMPILER >= GLM_COMPILER_GCC43)
    -
    281 # define GLM_CXX11_STATIC_ASSERT
    -
    282 # endif
    -
    283 
    -
    284 #elif(GLM_COMPILER & GLM_COMPILER_CLANG)
    -
    285 # if(__has_feature(cxx_exceptions))
    -
    286 # define GLM_CXX98_EXCEPTIONS
    -
    287 # endif
    -
    288 
    -
    289 # if(__has_feature(cxx_rtti))
    -
    290 # define GLM_CXX98_RTTI
    -
    291 # endif
    -
    292 
    -
    293 # if(__has_feature(cxx_access_control_sfinae))
    -
    294 # define GLM_CXX11_ACCESS_CONTROL_SFINAE
    -
    295 # endif
    -
    296 
    -
    297 # if(__has_feature(cxx_alias_templates))
    -
    298 # define GLM_CXX11_ALIAS_TEMPLATE
    -
    299 # endif
    -
    300 
    -
    301 # if(__has_feature(cxx_alignas))
    -
    302 # define GLM_CXX11_ALIGNAS
    -
    303 # endif
    -
    304 
    -
    305 # if(__has_feature(cxx_attributes))
    -
    306 # define GLM_CXX11_ATTRIBUTES
    -
    307 # endif
    -
    308 
    -
    309 # if(__has_feature(cxx_constexpr))
    -
    310 # define GLM_CXX11_CONSTEXPR
    -
    311 # endif
    -
    312 
    -
    313 # if(__has_feature(cxx_decltype))
    -
    314 # define GLM_CXX11_DECLTYPE
    -
    315 # endif
    -
    316 
    -
    317 # if(__has_feature(cxx_default_function_template_args))
    -
    318 # define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
    -
    319 # endif
    -
    320 
    -
    321 # if(__has_feature(cxx_defaulted_functions))
    -
    322 # define GLM_CXX11_DEFAULTED_FUNCTIONS
    -
    323 # endif
    -
    324 
    -
    325 # if(__has_feature(cxx_delegating_constructors))
    -
    326 # define GLM_CXX11_DELEGATING_CONSTRUCTORS
    -
    327 # endif
    -
    328 
    -
    329 # if(__has_feature(cxx_deleted_functions))
    -
    330 # define GLM_CXX11_DELETED_FUNCTIONS
    -
    331 # endif
    -
    332 
    -
    333 # if(__has_feature(cxx_explicit_conversions))
    -
    334 # define GLM_CXX11_EXPLICIT_CONVERSIONS
    -
    335 # endif
    -
    336 
    -
    337 # if(__has_feature(cxx_generalized_initializers))
    -
    338 # define GLM_CXX11_GENERALIZED_INITIALIZERS
    -
    339 # endif
    -
    340 
    -
    341 # if(__has_feature(cxx_implicit_moves))
    -
    342 # define GLM_CXX11_IMPLICIT_MOVES
    -
    343 # endif
    -
    344 
    -
    345 # if(__has_feature(cxx_inheriting_constructors))
    -
    346 # define GLM_CXX11_INHERITING_CONSTRUCTORS
    -
    347 # endif
    -
    348 
    -
    349 # if(__has_feature(cxx_inline_namespaces))
    -
    350 # define GLM_CXX11_INLINE_NAMESPACES
    -
    351 # endif
    -
    352 
    -
    353 # if(__has_feature(cxx_lambdas))
    -
    354 # define GLM_CXX11_LAMBDAS
    -
    355 # endif
    -
    356 
    -
    357 # if(__has_feature(cxx_local_type_template_args))
    -
    358 # define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
    -
    359 # endif
    -
    360 
    -
    361 # if(__has_feature(cxx_noexcept))
    -
    362 # define GLM_CXX11_NOEXCEPT
    -
    363 # endif
    -
    364 
    -
    365 # if(__has_feature(cxx_nonstatic_member_init))
    -
    366 # define GLM_CXX11_NONSTATIC_MEMBER_INIT
    -
    367 # endif
    -
    368 
    -
    369 # if(__has_feature(cxx_nullptr))
    -
    370 # define GLM_CXX11_NULLPTR
    -
    371 # endif
    -
    372 
    -
    373 # if(__has_feature(cxx_override_control))
    -
    374 # define GLM_CXX11_OVERRIDE_CONTROL
    -
    375 # endif
    -
    376 
    -
    377 # if(__has_feature(cxx_reference_qualified_functions))
    -
    378 # define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
    -
    379 # endif
    -
    380 
    -
    381 # if(__has_feature(cxx_range_for))
    -
    382 # define GLM_CXX11_RANGE_FOR
    -
    383 # endif
    -
    384 
    -
    385 # if(__has_feature(cxx_raw_string_literals))
    -
    386 # define GLM_CXX11_RAW_STRING_LITERALS
    -
    387 # endif
    -
    388 
    -
    389 # if(__has_feature(cxx_rvalue_references))
    -
    390 # define GLM_CXX11_RVALUE_REFERENCES
    -
    391 # endif
    -
    392 
    -
    393 # if(__has_feature(cxx_static_assert))
    -
    394 # define GLM_CXX11_STATIC_ASSERT
    -
    395 # endif
    -
    396 
    -
    397 # if(__has_feature(cxx_auto_type))
    -
    398 # define GLM_CXX11_AUTO_TYPE
    -
    399 # endif
    -
    400 
    -
    401 # if(__has_feature(cxx_strong_enums))
    -
    402 # define GLM_CXX11_STRONG_ENUMS
    -
    403 # endif
    -
    404 
    -
    405 # if(__has_feature(cxx_trailing_return))
    -
    406 # define GLM_CXX11_TRAILING_RETURN
    -
    407 # endif
    -
    408 
    -
    409 # if(__has_feature(cxx_unicode_literals))
    -
    410 # define GLM_CXX11_UNICODE_LITERALS
    -
    411 # endif
    -
    412 
    -
    413 # if(__has_feature(cxx_unrestricted_unions))
    -
    414 # define GLM_CXX11_UNRESTRICTED_UNIONS
    -
    415 # endif
    -
    416 
    -
    417 # if(__has_feature(cxx_user_literals))
    -
    418 # define GLM_CXX11_USER_LITERALS
    -
    419 # endif
    -
    420 
    -
    421 # if(__has_feature(cxx_variadic_templates))
    -
    422 # define GLM_CXX11_VARIADIC_TEMPLATES
    -
    423 # endif
    -
    424 
    -
    425 #endif//(GLM_COMPILER & GLM_COMPILER_CLANG)
    -
    426 
    -
    427 #endif//glm_core_features
    +
    270 //
    +
    271 // Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
    +
    272 //
    +
    273 #define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \
    +
    274  _GLM_SWIZZLE_TEMPLATE2 \
    +
    275  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \
    +
    276  { \
    +
    277  return FUNCTION(a(), b(), c); \
    +
    278  } \
    +
    279  _GLM_SWIZZLE_TEMPLATE1 \
    +
    280  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
    +
    281  { \
    +
    282  return FUNCTION(a(), b(), c); \
    +
    283  } \
    +
    284  _GLM_SWIZZLE_TEMPLATE1 \
    +
    285  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
    +
    286  { \
    +
    287  return FUNCTION(a(), b, c); \
    +
    288  } \
    +
    289  _GLM_SWIZZLE_TEMPLATE1 \
    +
    290  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
    +
    291  { \
    +
    292  return FUNCTION(a, b(), c); \
    +
    293  }
    +
    294 
    +
    295 }//namespace detail
    +
    296 }//namespace glm
    +
    297 
    +
    298 namespace glm
    +
    299 {
    +
    300  namespace detail
    +
    301  {
    +
    302  _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
    +
    303  _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
    +
    304  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
    +
    305  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
    +
    306  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
    +
    307  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
    +
    308  }
    +
    309 
    +
    310  //
    +
    311  // Swizzles are distinct types from the unswizzled type. The below macros will
    +
    312  // provide template specializations for the swizzle types for the given functions
    +
    313  // so that the compiler does not have any ambiguity to choosing how to handle
    +
    314  // the function.
    +
    315  //
    +
    316  // The alternative is to use the operator()() when calling the function in order
    +
    317  // to explicitly convert the swizzled type to the unswizzled type.
    +
    318  //
    +
    319 
    +
    320  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);
    +
    321  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);
    +
    322  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);
    +
    323  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);
    +
    324  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);
    +
    325 
    +
    326  //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);
    +
    327  //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);
    +
    328  //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step);
    +
    329  //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
    +
    330 }
    +
    331 
    +
    332 #define _GLM_SWIZZLE2_2_MEMBERS(T, P, V, E0,E1) \
    +
    333  struct { detail::_swizzle<2, T, P, V<T, P>, 0,0,-1,-2> E0 ## E0; }; \
    +
    334  struct { detail::_swizzle<2, T, P, V<T, P>, 0,1,-1,-2> E0 ## E1; }; \
    +
    335  struct { detail::_swizzle<2, T, P, V<T, P>, 1,0,-1,-2> E1 ## E0; }; \
    +
    336  struct { detail::_swizzle<2, T, P, V<T, P>, 1,1,-1,-2> E1 ## E1; };
    +
    337 
    +
    338 #define _GLM_SWIZZLE2_3_MEMBERS(T, P, V, E0,E1) \
    +
    339  struct { detail::_swizzle<3,T, P, V<T, P>, 0,0,0,-1> E0 ## E0 ## E0; }; \
    +
    340  struct { detail::_swizzle<3,T, P, V<T, P>, 0,0,1,-1> E0 ## E0 ## E1; }; \
    +
    341  struct { detail::_swizzle<3,T, P, V<T, P>, 0,1,0,-1> E0 ## E1 ## E0; }; \
    +
    342  struct { detail::_swizzle<3,T, P, V<T, P>, 0,1,1,-1> E0 ## E1 ## E1; }; \
    +
    343  struct { detail::_swizzle<3,T, P, V<T, P>, 1,0,0,-1> E1 ## E0 ## E0; }; \
    +
    344  struct { detail::_swizzle<3,T, P, V<T, P>, 1,0,1,-1> E1 ## E0 ## E1; }; \
    +
    345  struct { detail::_swizzle<3,T, P, V<T, P>, 1,1,0,-1> E1 ## E1 ## E0; }; \
    +
    346  struct { detail::_swizzle<3,T, P, V<T, P>, 1,1,1,-1> E1 ## E1 ## E1; };
    +
    347 
    +
    348 #define _GLM_SWIZZLE2_4_MEMBERS(T, P, V, E0,E1) \
    +
    349  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    +
    350  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    +
    351  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    +
    352  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    +
    353  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    +
    354  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    +
    355  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    +
    356  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    +
    357  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    +
    358  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    +
    359  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    +
    360  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    +
    361  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    +
    362  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    +
    363  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    +
    364  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,1,1> E1 ## E1 ## E1 ## E1; };
    +
    365 
    +
    366 #define _GLM_SWIZZLE3_2_MEMBERS(T, P, V, E0,E1,E2) \
    +
    367  struct { detail::_swizzle<2,T, P, V<T, P>, 0,0,-1,-2> E0 ## E0; }; \
    +
    368  struct { detail::_swizzle<2,T, P, V<T, P>, 0,1,-1,-2> E0 ## E1; }; \
    +
    369  struct { detail::_swizzle<2,T, P, V<T, P>, 0,2,-1,-2> E0 ## E2; }; \
    +
    370  struct { detail::_swizzle<2,T, P, V<T, P>, 1,0,-1,-2> E1 ## E0; }; \
    +
    371  struct { detail::_swizzle<2,T, P, V<T, P>, 1,1,-1,-2> E1 ## E1; }; \
    +
    372  struct { detail::_swizzle<2,T, P, V<T, P>, 1,2,-1,-2> E1 ## E2; }; \
    +
    373  struct { detail::_swizzle<2,T, P, V<T, P>, 2,0,-1,-2> E2 ## E0; }; \
    +
    374  struct { detail::_swizzle<2,T, P, V<T, P>, 2,1,-1,-2> E2 ## E1; }; \
    +
    375  struct { detail::_swizzle<2,T, P, V<T, P>, 2,2,-1,-2> E2 ## E2; };
    +
    376 
    +
    377 #define _GLM_SWIZZLE3_3_MEMBERS(T, P, V ,E0,E1,E2) \
    +
    378  struct { detail::_swizzle<3,T,P, V<T, P>, 0,0,0,-1> E0 ## E0 ## E0; }; \
    +
    379  struct { detail::_swizzle<3,T,P, V<T, P>, 0,0,1,-1> E0 ## E0 ## E1; }; \
    +
    380  struct { detail::_swizzle<3,T,P, V<T, P>, 0,0,2,-1> E0 ## E0 ## E2; }; \
    +
    381  struct { detail::_swizzle<3,T,P, V<T, P>, 0,1,0,-1> E0 ## E1 ## E0; }; \
    +
    382  struct { detail::_swizzle<3,T,P, V<T, P>, 0,1,1,-1> E0 ## E1 ## E1; }; \
    +
    383  struct { detail::_swizzle<3,T,P, V<T, P>, 0,1,2,-1> E0 ## E1 ## E2; }; \
    +
    384  struct { detail::_swizzle<3,T,P, V<T, P>, 0,2,0,-1> E0 ## E2 ## E0; }; \
    +
    385  struct { detail::_swizzle<3,T,P, V<T, P>, 0,2,1,-1> E0 ## E2 ## E1; }; \
    +
    386  struct { detail::_swizzle<3,T,P, V<T, P>, 0,2,2,-1> E0 ## E2 ## E2; }; \
    +
    387  struct { detail::_swizzle<3,T,P, V<T, P>, 1,0,0,-1> E1 ## E0 ## E0; }; \
    +
    388  struct { detail::_swizzle<3,T,P, V<T, P>, 1,0,1,-1> E1 ## E0 ## E1; }; \
    +
    389  struct { detail::_swizzle<3,T,P, V<T, P>, 1,0,2,-1> E1 ## E0 ## E2; }; \
    +
    390  struct { detail::_swizzle<3,T,P, V<T, P>, 1,1,0,-1> E1 ## E1 ## E0; }; \
    +
    391  struct { detail::_swizzle<3,T,P, V<T, P>, 1,1,1,-1> E1 ## E1 ## E1; }; \
    +
    392  struct { detail::_swizzle<3,T,P, V<T, P>, 1,1,2,-1> E1 ## E1 ## E2; }; \
    +
    393  struct { detail::_swizzle<3,T,P, V<T, P>, 1,2,0,-1> E1 ## E2 ## E0; }; \
    +
    394  struct { detail::_swizzle<3,T,P, V<T, P>, 1,2,1,-1> E1 ## E2 ## E1; }; \
    +
    395  struct { detail::_swizzle<3,T,P, V<T, P>, 1,2,2,-1> E1 ## E2 ## E2; }; \
    +
    396  struct { detail::_swizzle<3,T,P, V<T, P>, 2,0,0,-1> E2 ## E0 ## E0; }; \
    +
    397  struct { detail::_swizzle<3,T,P, V<T, P>, 2,0,1,-1> E2 ## E0 ## E1; }; \
    +
    398  struct { detail::_swizzle<3,T,P, V<T, P>, 2,0,2,-1> E2 ## E0 ## E2; }; \
    +
    399  struct { detail::_swizzle<3,T,P, V<T, P>, 2,1,0,-1> E2 ## E1 ## E0; }; \
    +
    400  struct { detail::_swizzle<3,T,P, V<T, P>, 2,1,1,-1> E2 ## E1 ## E1; }; \
    +
    401  struct { detail::_swizzle<3,T,P, V<T, P>, 2,1,2,-1> E2 ## E1 ## E2; }; \
    +
    402  struct { detail::_swizzle<3,T,P, V<T, P>, 2,2,0,-1> E2 ## E2 ## E0; }; \
    +
    403  struct { detail::_swizzle<3,T,P, V<T, P>, 2,2,1,-1> E2 ## E2 ## E1; }; \
    +
    404  struct { detail::_swizzle<3,T,P, V<T, P>, 2,2,2,-1> E2 ## E2 ## E2; };
    +
    405 
    +
    406 #define _GLM_SWIZZLE3_4_MEMBERS(T, P, V, E0,E1,E2) \
    +
    407  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    +
    408  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    +
    409  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
    +
    410  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    +
    411  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    +
    412  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
    +
    413  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
    +
    414  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
    +
    415  struct { detail::_swizzle<4,T, P, V<T, P>, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
    +
    416  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    +
    417  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    +
    418  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
    +
    419  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    +
    420  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    +
    421  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
    +
    422  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
    +
    423  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
    +
    424  struct { detail::_swizzle<4,T, P, V<T, P>, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
    +
    425  struct { detail::_swizzle<4,T, P, V<T, P>, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
    +
    426  struct { detail::_swizzle<4,T, P, V<T, P>, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
    +
    427  struct { detail::_swizzle<4,T, P, V<T, P>, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
    +
    428  struct { detail::_swizzle<4,T, P, V<T, P>, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
    +
    429  struct { detail::_swizzle<4,T, P, V<T, P>, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
    +
    430  struct { detail::_swizzle<4,T, P, V<T, P>, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
    +
    431  struct { detail::_swizzle<4,T, P, V<T, P>, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
    +
    432  struct { detail::_swizzle<4,T, P, V<T, P>, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
    +
    433  struct { detail::_swizzle<4,T, P, V<T, P>, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
    +
    434  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    +
    435  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    +
    436  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
    +
    437  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    +
    438  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    +
    439  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
    +
    440  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
    +
    441  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
    +
    442  struct { detail::_swizzle<4,T, P, V<T, P>, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
    +
    443  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    +
    444  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    +
    445  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
    +
    446  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    +
    447  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
    +
    448  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
    +
    449  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
    +
    450  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
    +
    451  struct { detail::_swizzle<4,T, P, V<T, P>, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
    +
    452  struct { detail::_swizzle<4,T, P, V<T, P>, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
    +
    453  struct { detail::_swizzle<4,T, P, V<T, P>, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
    +
    454  struct { detail::_swizzle<4,T, P, V<T, P>, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
    +
    455  struct { detail::_swizzle<4,T, P, V<T, P>, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
    +
    456  struct { detail::_swizzle<4,T, P, V<T, P>, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
    +
    457  struct { detail::_swizzle<4,T, P, V<T, P>, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
    +
    458  struct { detail::_swizzle<4,T, P, V<T, P>, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
    +
    459  struct { detail::_swizzle<4,T, P, V<T, P>, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
    +
    460  struct { detail::_swizzle<4,T, P, V<T, P>, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
    +
    461  struct { detail::_swizzle<4,T, P, V<T, P>, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
    +
    462  struct { detail::_swizzle<4,T, P, V<T, P>, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
    +
    463  struct { detail::_swizzle<4,T, P, V<T, P>, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
    +
    464  struct { detail::_swizzle<4,T, P, V<T, P>, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
    +
    465  struct { detail::_swizzle<4,T, P, V<T, P>, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
    +
    466  struct { detail::_swizzle<4,T, P, V<T, P>, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
    +
    467  struct { detail::_swizzle<4,T, P, V<T, P>, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
    +
    468  struct { detail::_swizzle<4,T, P, V<T, P>, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
    +
    469  struct { detail::_swizzle<4,T, P, V<T, P>, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
    +
    470  struct { detail::_swizzle<4,T, P, V<T, P>, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
    +
    471  struct { detail::_swizzle<4,T, P, V<T, P>, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
    +
    472  struct { detail::_swizzle<4,T, P, V<T, P>, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
    +
    473  struct { detail::_swizzle<4,T, P, V<T, P>, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
    +
    474  struct { detail::_swizzle<4,T, P, V<T, P>, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
    +
    475  struct { detail::_swizzle<4,T, P, V<T, P>, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
    +
    476  struct { detail::_swizzle<4,T, P, V<T, P>, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
    +
    477  struct { detail::_swizzle<4,T, P, V<T, P>, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
    +
    478  struct { detail::_swizzle<4,T, P, V<T, P>, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
    +
    479  struct { detail::_swizzle<4,T, P, V<T, P>, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
    +
    480  struct { detail::_swizzle<4,T, P, V<T, P>, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
    +
    481  struct { detail::_swizzle<4,T, P, V<T, P>, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
    +
    482  struct { detail::_swizzle<4,T, P, V<T, P>, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
    +
    483  struct { detail::_swizzle<4,T, P, V<T, P>, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
    +
    484  struct { detail::_swizzle<4,T, P, V<T, P>, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
    +
    485  struct { detail::_swizzle<4,T, P, V<T, P>, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
    +
    486  struct { detail::_swizzle<4,T, P, V<T, P>, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
    +
    487  struct { detail::_swizzle<4,T, P, V<T, P>, 2,2,2,2> E2 ## E2 ## E2 ## E2; };
    +
    488 
    +
    489 #define _GLM_SWIZZLE4_2_MEMBERS(T, P, V, E0,E1,E2,E3) \
    +
    490  struct { detail::_swizzle<2,T, P, V<T, P>, 0,0,-1,-2> E0 ## E0; }; \
    +
    491  struct { detail::_swizzle<2,T, P, V<T, P>, 0,1,-1,-2> E0 ## E1; }; \
    +
    492  struct { detail::_swizzle<2,T, P, V<T, P>, 0,2,-1,-2> E0 ## E2; }; \
    +
    493  struct { detail::_swizzle<2,T, P, V<T, P>, 0,3,-1,-2> E0 ## E3; }; \
    +
    494  struct { detail::_swizzle<2,T, P, V<T, P>, 1,0,-1,-2> E1 ## E0; }; \
    +
    495  struct { detail::_swizzle<2,T, P, V<T, P>, 1,1,-1,-2> E1 ## E1; }; \
    +
    496  struct { detail::_swizzle<2,T, P, V<T, P>, 1,2,-1,-2> E1 ## E2; }; \
    +
    497  struct { detail::_swizzle<2,T, P, V<T, P>, 1,3,-1,-2> E1 ## E3; }; \
    +
    498  struct { detail::_swizzle<2,T, P, V<T, P>, 2,0,-1,-2> E2 ## E0; }; \
    +
    499  struct { detail::_swizzle<2,T, P, V<T, P>, 2,1,-1,-2> E2 ## E1; }; \
    +
    500  struct { detail::_swizzle<2,T, P, V<T, P>, 2,2,-1,-2> E2 ## E2; }; \
    +
    501  struct { detail::_swizzle<2,T, P, V<T, P>, 2,3,-1,-2> E2 ## E3; }; \
    +
    502  struct { detail::_swizzle<2,T, P, V<T, P>, 3,0,-1,-2> E3 ## E0; }; \
    +
    503  struct { detail::_swizzle<2,T, P, V<T, P>, 3,1,-1,-2> E3 ## E1; }; \
    +
    504  struct { detail::_swizzle<2,T, P, V<T, P>, 3,2,-1,-2> E3 ## E2; }; \
    +
    505  struct { detail::_swizzle<2,T, P, V<T, P>, 3,3,-1,-2> E3 ## E3; };
    +
    506 
    +
    507 #define _GLM_SWIZZLE4_3_MEMBERS(T,P, V, E0,E1,E2,E3) \
    +
    508  struct { detail::_swizzle<3,T,P, V<T, P>, 0,0,0,-1> E0 ## E0 ## E0; }; \
    +
    509  struct { detail::_swizzle<3,T,P, V<T, P>, 0,0,1,-1> E0 ## E0 ## E1; }; \
    +
    510  struct { detail::_swizzle<3,T,P, V<T, P>, 0,0,2,-1> E0 ## E0 ## E2; }; \
    +
    511  struct { detail::_swizzle<3,T,P, V<T, P>, 0,0,3,-1> E0 ## E0 ## E3; }; \
    +
    512  struct { detail::_swizzle<3,T,P, V<T, P>, 0,1,0,-1> E0 ## E1 ## E0; }; \
    +
    513  struct { detail::_swizzle<3,T,P, V<T, P>, 0,1,1,-1> E0 ## E1 ## E1; }; \
    +
    514  struct { detail::_swizzle<3,T,P, V<T, P>, 0,1,2,-1> E0 ## E1 ## E2; }; \
    +
    515  struct { detail::_swizzle<3,T,P, V<T, P>, 0,1,3,-1> E0 ## E1 ## E3; }; \
    +
    516  struct { detail::_swizzle<3,T,P, V<T, P>, 0,2,0,-1> E0 ## E2 ## E0; }; \
    +
    517  struct { detail::_swizzle<3,T,P, V<T, P>, 0,2,1,-1> E0 ## E2 ## E1; }; \
    +
    518  struct { detail::_swizzle<3,T,P, V<T, P>, 0,2,2,-1> E0 ## E2 ## E2; }; \
    +
    519  struct { detail::_swizzle<3,T,P, V<T, P>, 0,2,3,-1> E0 ## E2 ## E3; }; \
    +
    520  struct { detail::_swizzle<3,T,P, V<T, P>, 0,3,0,-1> E0 ## E3 ## E0; }; \
    +
    521  struct { detail::_swizzle<3,T,P, V<T, P>, 0,3,1,-1> E0 ## E3 ## E1; }; \
    +
    522  struct { detail::_swizzle<3,T,P, V<T, P>, 0,3,2,-1> E0 ## E3 ## E2; }; \
    +
    523  struct { detail::_swizzle<3,T,P, V<T, P>, 0,3,3,-1> E0 ## E3 ## E3; }; \
    +
    524  struct { detail::_swizzle<3,T,P, V<T, P>, 1,0,0,-1> E1 ## E0 ## E0; }; \
    +
    525  struct { detail::_swizzle<3,T,P, V<T, P>, 1,0,1,-1> E1 ## E0 ## E1; }; \
    +
    526  struct { detail::_swizzle<3,T,P, V<T, P>, 1,0,2,-1> E1 ## E0 ## E2; }; \
    +
    527  struct { detail::_swizzle<3,T,P, V<T, P>, 1,0,3,-1> E1 ## E0 ## E3; }; \
    +
    528  struct { detail::_swizzle<3,T,P, V<T, P>, 1,1,0,-1> E1 ## E1 ## E0; }; \
    +
    529  struct { detail::_swizzle<3,T,P, V<T, P>, 1,1,1,-1> E1 ## E1 ## E1; }; \
    +
    530  struct { detail::_swizzle<3,T,P, V<T, P>, 1,1,2,-1> E1 ## E1 ## E2; }; \
    +
    531  struct { detail::_swizzle<3,T,P, V<T, P>, 1,1,3,-1> E1 ## E1 ## E3; }; \
    +
    532  struct { detail::_swizzle<3,T,P, V<T, P>, 1,2,0,-1> E1 ## E2 ## E0; }; \
    +
    533  struct { detail::_swizzle<3,T,P, V<T, P>, 1,2,1,-1> E1 ## E2 ## E1; }; \
    +
    534  struct { detail::_swizzle<3,T,P, V<T, P>, 1,2,2,-1> E1 ## E2 ## E2; }; \
    +
    535  struct { detail::_swizzle<3,T,P, V<T, P>, 1,2,3,-1> E1 ## E2 ## E3; }; \
    +
    536  struct { detail::_swizzle<3,T,P, V<T, P>, 1,3,0,-1> E1 ## E3 ## E0; }; \
    +
    537  struct { detail::_swizzle<3,T,P, V<T, P>, 1,3,1,-1> E1 ## E3 ## E1; }; \
    +
    538  struct { detail::_swizzle<3,T,P, V<T, P>, 1,3,2,-1> E1 ## E3 ## E2; }; \
    +
    539  struct { detail::_swizzle<3,T,P, V<T, P>, 1,3,3,-1> E1 ## E3 ## E3; }; \
    +
    540  struct { detail::_swizzle<3,T,P, V<T, P>, 2,0,0,-1> E2 ## E0 ## E0; }; \
    +
    541  struct { detail::_swizzle<3,T,P, V<T, P>, 2,0,1,-1> E2 ## E0 ## E1; }; \
    +
    542  struct { detail::_swizzle<3,T,P, V<T, P>, 2,0,2,-1> E2 ## E0 ## E2; }; \
    +
    543  struct { detail::_swizzle<3,T,P, V<T, P>, 2,0,3,-1> E2 ## E0 ## E3; }; \
    +
    544  struct { detail::_swizzle<3,T,P, V<T, P>, 2,1,0,-1> E2 ## E1 ## E0; }; \
    +
    545  struct { detail::_swizzle<3,T,P, V<T, P>, 2,1,1,-1> E2 ## E1 ## E1; }; \
    +
    546  struct { detail::_swizzle<3,T,P, V<T, P>, 2,1,2,-1> E2 ## E1 ## E2; }; \
    +
    547  struct { detail::_swizzle<3,T,P, V<T, P>, 2,1,3,-1> E2 ## E1 ## E3; }; \
    +
    548  struct { detail::_swizzle<3,T,P, V<T, P>, 2,2,0,-1> E2 ## E2 ## E0; }; \
    +
    549  struct { detail::_swizzle<3,T,P, V<T, P>, 2,2,1,-1> E2 ## E2 ## E1; }; \
    +
    550  struct { detail::_swizzle<3,T,P, V<T, P>, 2,2,2,-1> E2 ## E2 ## E2; }; \
    +
    551  struct { detail::_swizzle<3,T,P, V<T, P>, 2,2,3,-1> E2 ## E2 ## E3; }; \
    +
    552  struct { detail::_swizzle<3,T,P, V<T, P>, 2,3,0,-1> E2 ## E3 ## E0; }; \
    +
    553  struct { detail::_swizzle<3,T,P, V<T, P>, 2,3,1,-1> E2 ## E3 ## E1; }; \
    +
    554  struct { detail::_swizzle<3,T,P, V<T, P>, 2,3,2,-1> E2 ## E3 ## E2; }; \
    +
    555  struct { detail::_swizzle<3,T,P, V<T, P>, 2,3,3,-1> E2 ## E3 ## E3; }; \
    +
    556  struct { detail::_swizzle<3,T,P, V<T, P>, 3,0,0,-1> E3 ## E0 ## E0; }; \
    +
    557  struct { detail::_swizzle<3,T,P, V<T, P>, 3,0,1,-1> E3 ## E0 ## E1; }; \
    +
    558  struct { detail::_swizzle<3,T,P, V<T, P>, 3,0,2,-1> E3 ## E0 ## E2; }; \
    +
    559  struct { detail::_swizzle<3,T,P, V<T, P>, 3,0,3,-1> E3 ## E0 ## E3; }; \
    +
    560  struct { detail::_swizzle<3,T,P, V<T, P>, 3,1,0,-1> E3 ## E1 ## E0; }; \
    +
    561  struct { detail::_swizzle<3,T,P, V<T, P>, 3,1,1,-1> E3 ## E1 ## E1; }; \
    +
    562  struct { detail::_swizzle<3,T,P, V<T, P>, 3,1,2,-1> E3 ## E1 ## E2; }; \
    +
    563  struct { detail::_swizzle<3,T,P, V<T, P>, 3,1,3,-1> E3 ## E1 ## E3; }; \
    +
    564  struct { detail::_swizzle<3,T,P, V<T, P>, 3,2,0,-1> E3 ## E2 ## E0; }; \
    +
    565  struct { detail::_swizzle<3,T,P, V<T, P>, 3,2,1,-1> E3 ## E2 ## E1; }; \
    +
    566  struct { detail::_swizzle<3,T,P, V<T, P>, 3,2,2,-1> E3 ## E2 ## E2; }; \
    +
    567  struct { detail::_swizzle<3,T,P, V<T, P>, 3,2,3,-1> E3 ## E2 ## E3; }; \
    +
    568  struct { detail::_swizzle<3,T,P, V<T, P>, 3,3,0,-1> E3 ## E3 ## E0; }; \
    +
    569  struct { detail::_swizzle<3,T,P, V<T, P>, 3,3,1,-1> E3 ## E3 ## E1; }; \
    +
    570  struct { detail::_swizzle<3,T,P, V<T, P>, 3,3,2,-1> E3 ## E3 ## E2; }; \
    +
    571  struct { detail::_swizzle<3,T,P, V<T, P>, 3,3,3,-1> E3 ## E3 ## E3; };
    +
    572 
    +
    573 #define _GLM_SWIZZLE4_4_MEMBERS(T, P, V, E0,E1,E2,E3) \
    +
    574  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    +
    575  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    +
    576  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
    +
    577  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
    +
    578  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    +
    579  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    +
    580  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
    +
    581  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
    +
    582  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
    +
    583  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
    +
    584  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
    +
    585  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
    +
    586  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
    +
    587  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
    +
    588  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
    +
    589  struct { detail::_swizzle<4, T, P, V<T, P>, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
    +
    590  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    +
    591  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    +
    592  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
    +
    593  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
    +
    594  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    +
    595  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    +
    596  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
    +
    597  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
    +
    598  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
    +
    599  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
    +
    600  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
    +
    601  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
    +
    602  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
    +
    603  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
    +
    604  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
    +
    605  struct { detail::_swizzle<4, T, P, V<T, P>, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
    +
    606  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
    +
    607  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
    +
    608  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
    +
    609  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
    +
    610  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
    +
    611  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
    +
    612  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
    +
    613  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
    +
    614  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
    +
    615  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
    +
    616  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
    +
    617  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
    +
    618  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
    +
    619  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
    +
    620  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
    +
    621  struct { detail::_swizzle<4, T, P, V<T, P>, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
    +
    622  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \
    +
    623  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \
    +
    624  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \
    +
    625  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \
    +
    626  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \
    +
    627  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \
    +
    628  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \
    +
    629  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \
    +
    630  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \
    +
    631  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \
    +
    632  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \
    +
    633  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \
    +
    634  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \
    +
    635  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \
    +
    636  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \
    +
    637  struct { detail::_swizzle<4, T, P, V<T, P>, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \
    +
    638  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    +
    639  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    +
    640  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
    +
    641  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
    +
    642  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    +
    643  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    +
    644  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
    +
    645  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
    +
    646  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
    +
    647  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
    +
    648  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
    +
    649  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
    +
    650  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
    +
    651  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
    +
    652  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
    +
    653  struct { detail::_swizzle<4, T, P, V<T, P>, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
    +
    654  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    +
    655  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    +
    656  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
    +
    657  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
    +
    658  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    +
    659  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
    +
    660  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
    +
    661  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
    +
    662  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
    +
    663  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
    +
    664  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
    +
    665  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
    +
    666  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
    +
    667  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
    +
    668  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
    +
    669  struct { detail::_swizzle<4, T, P, V<T, P>, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
    +
    670  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
    +
    671  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
    +
    672  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
    +
    673  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
    +
    674  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
    +
    675  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
    +
    676  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
    +
    677  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
    +
    678  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
    +
    679  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
    +
    680  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
    +
    681  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
    +
    682  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
    +
    683  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
    +
    684  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
    +
    685  struct { detail::_swizzle<4, T, P, V<T, P>, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
    +
    686  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
    +
    687  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
    +
    688  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
    +
    689  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
    +
    690  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
    +
    691  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
    +
    692  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
    +
    693  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
    +
    694  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
    +
    695  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
    +
    696  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
    +
    697  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
    +
    698  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
    +
    699  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
    +
    700  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
    +
    701  struct { detail::_swizzle<4, T, P, V<T, P>, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
    +
    702  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
    +
    703  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
    +
    704  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
    +
    705  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
    +
    706  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
    +
    707  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
    +
    708  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
    +
    709  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
    +
    710  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
    +
    711  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
    +
    712  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
    +
    713  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
    +
    714  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
    +
    715  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
    +
    716  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
    +
    717  struct { detail::_swizzle<4, T, P, V<T, P>, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
    +
    718  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
    +
    719  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
    +
    720  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
    +
    721  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
    +
    722  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
    +
    723  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
    +
    724  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
    +
    725  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
    +
    726  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
    +
    727  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
    +
    728  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
    +
    729  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
    +
    730  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
    +
    731  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
    +
    732  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
    +
    733  struct { detail::_swizzle<4, T, P, V<T, P>, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
    +
    734  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
    +
    735  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
    +
    736  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
    +
    737  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
    +
    738  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
    +
    739  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
    +
    740  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
    +
    741  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
    +
    742  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
    +
    743  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
    +
    744  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
    +
    745  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
    +
    746  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
    +
    747  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
    +
    748  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
    +
    749  struct { detail::_swizzle<4, T, P, V<T, P>, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
    +
    750  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
    +
    751  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
    +
    752  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
    +
    753  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
    +
    754  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
    +
    755  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
    +
    756  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
    +
    757  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
    +
    758  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
    +
    759  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
    +
    760  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
    +
    761  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
    +
    762  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
    +
    763  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
    +
    764  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
    +
    765  struct { detail::_swizzle<4, T, P, V<T, P>, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
    +
    766  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
    +
    767  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
    +
    768  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
    +
    769  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
    +
    770  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
    +
    771  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
    +
    772  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
    +
    773  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
    +
    774  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
    +
    775  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
    +
    776  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
    +
    777  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
    +
    778  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
    +
    779  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
    +
    780  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
    +
    781  struct { detail::_swizzle<4, T, P, V<T, P>, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
    +
    782  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
    +
    783  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
    +
    784  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
    +
    785  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
    +
    786  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
    +
    787  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
    +
    788  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
    +
    789  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
    +
    790  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
    +
    791  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
    +
    792  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
    +
    793  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
    +
    794  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
    +
    795  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
    +
    796  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
    +
    797  struct { detail::_swizzle<4, T, P, V<T, P>, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
    +
    798  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
    +
    799  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
    +
    800  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
    +
    801  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
    +
    802  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
    +
    803  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
    +
    804  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
    +
    805  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
    +
    806  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
    +
    807  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
    +
    808  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
    +
    809  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
    +
    810  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
    +
    811  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
    +
    812  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
    +
    813  struct { detail::_swizzle<4, T, P, V<T, P>, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
    +
    814  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
    +
    815  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
    +
    816  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
    +
    817  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
    +
    818  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
    +
    819  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
    +
    820  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
    +
    821  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
    +
    822  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
    +
    823  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
    +
    824  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
    +
    825  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
    +
    826  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
    +
    827  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
    +
    828  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
    +
    829  struct { detail::_swizzle<4, T, P, V<T, P>, 3,3,3,3> E3 ## E3 ## E3 ## E3; };
    +
    GLM_FUNC_DECL genType e()
    Return e constant.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00005.html b/doc/api/a00005.html new file mode 100644 index 00000000..add3cf59 --- /dev/null +++ b/doc/api/a00005.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: _swizzle_func.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    _swizzle_func.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2011-10-16 / 2011-10-16
    +
    Author
    Christophe Riccio
    + +

    Definition in file _swizzle_func.hpp.

    +
    + + + + diff --git a/doc/api/a00005_source.html b/doc/api/a00005_source.html index 4e023c2a..af7fa777 100644 --- a/doc/api/a00005_source.html +++ b/doc/api/a00005_source.html @@ -3,8 +3,8 @@ - -GLM: _fixes.hpp Source File + +0.9.6: _swizzle_func.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,43 +41,714 @@
    -
    _fixes.hpp
    +
    _swizzle_func.hpp
    -
    1 
    -
    29 #include <cmath>
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    30 
    -
    32 #ifdef max
    -
    33 #undef max
    -
    34 #endif
    -
    35 
    -
    37 #ifdef min
    -
    38 #undef min
    -
    39 #endif
    -
    40 
    -
    42 #ifdef isnan
    -
    43 #undef isnan
    -
    44 #endif
    -
    45 
    -
    47 #ifdef isinf
    -
    48 #undef isinf
    -
    49 #endif
    -
    50 
    -
    52 #ifdef log2
    -
    53 #undef log2
    -
    54 #endif
    -
    55 
    +
    31 #define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
    +
    32  SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B() CONST \
    +
    33  { \
    +
    34  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \
    +
    35  }
    +
    36 
    +
    37 #define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
    +
    38  SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C() CONST \
    +
    39  { \
    +
    40  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \
    +
    41  }
    +
    42 
    +
    43 #define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
    +
    44  SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C ## D() CONST \
    +
    45  { \
    +
    46  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \
    +
    47  }
    +
    48 
    +
    49 #define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
    +
    50  template <typename TMPL_TYPE> \
    +
    51  SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B() CONST \
    +
    52  { \
    +
    53  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \
    +
    54  }
    +
    55 
    +
    56 #define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
    +
    57  template <typename TMPL_TYPE> \
    +
    58  SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C() CONST \
    +
    59  { \
    +
    60  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \
    +
    61  }
    +
    62 
    +
    63 #define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
    +
    64  template <typename TMPL_TYPE> \
    +
    65  SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C ## D() CONST \
    +
    66  { \
    +
    67  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \
    +
    68  }
    +
    69 
    +
    70 #define GLM_MUTABLE
    +
    71 
    +
    72 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    +
    73  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    +
    74  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A)
    +
    75 
    +
    76 #define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \
    +
    77  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \
    +
    78  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \
    +
    79  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t)
    +
    80 
    +
    81 //GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2)
    +
    82 
    +
    83 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    84  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    +
    85  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
    +
    86  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
    +
    87  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
    +
    88  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
    +
    89  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B)
    +
    90 
    +
    91 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    92  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \
    +
    93  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \
    +
    94  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \
    +
    95  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \
    +
    96  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \
    +
    97  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A)
    +
    98 
    +
    99 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    +
    100  GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    +
    101  GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C)
    +
    102 
    +
    103 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \
    +
    104  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \
    +
    105  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \
    +
    106  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, p)
    +
    107 
    +
    108 //GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3)
    +
    109 
    +
    110 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    111  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    +
    112  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
    +
    113  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \
    +
    114  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
    +
    115  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
    +
    116  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \
    +
    117  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
    +
    118  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \
    +
    119  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \
    +
    120  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \
    +
    121  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \
    +
    122  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C)
    +
    123 
    +
    124 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    125  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \
    +
    126  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \
    +
    127  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \
    +
    128  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \
    +
    129  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \
    +
    130  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \
    +
    131  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \
    +
    132  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \
    +
    133  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \
    +
    134  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \
    +
    135  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \
    +
    136  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \
    +
    137  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \
    +
    138  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \
    +
    139  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \
    +
    140  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \
    +
    141  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \
    +
    142  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \
    +
    143  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \
    +
    144  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \
    +
    145  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \
    +
    146  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \
    +
    147  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \
    +
    148  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B)
    +
    149 
    +
    150 #define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    151  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \
    +
    152  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \
    +
    153  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \
    +
    154  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \
    +
    155  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \
    +
    156  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \
    +
    157  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \
    +
    158  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \
    +
    159  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \
    +
    160  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \
    +
    161  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \
    +
    162  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \
    +
    163  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \
    +
    164  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \
    +
    165  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \
    +
    166  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \
    +
    167  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \
    +
    168  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \
    +
    169  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \
    +
    170  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \
    +
    171  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \
    +
    172  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \
    +
    173  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \
    +
    174  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A)
    +
    175 
    +
    176 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
    +
    177  GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
    +
    178  GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
    +
    179  GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
    +
    180 
    +
    181 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    +
    182  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
    +
    183  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
    +
    184  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)
    +
    185 
    +
    186 //GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4)
    +
    187 
    +
    188 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    +
    189  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    +
    190  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    +
    191  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    +
    192  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B)
    +
    193 
    +
    194 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    +
    195  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    +
    196  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    +
    197  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    +
    198  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    +
    199  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    +
    200  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    +
    201  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    +
    202  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B)
    +
    203 
    +
    204 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    +
    205  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    +
    206  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    +
    207  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    +
    208  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    +
    209  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    +
    210  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    +
    211  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    +
    212  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    +
    213  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    +
    214  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    +
    215  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    +
    216  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    +
    217  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    +
    218  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    +
    219  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    +
    220  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B)
    +
    221 
    +
    222 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \
    +
    223  GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \
    +
    224  GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \
    +
    225  GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B)
    +
    226 
    +
    227 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    +
    228  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \
    +
    229  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \
    +
    230  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t)
    +
    231 
    +
    232 //GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4)
    +
    233 
    +
    234 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    235  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    +
    236  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    +
    237  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
    +
    238  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    +
    239  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
    +
    240  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
    +
    241  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
    +
    242  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
    +
    243  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C)
    +
    244 
    +
    245 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    246  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    +
    247  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    +
    248  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
    +
    249  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    +
    250  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    +
    251  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
    +
    252  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
    +
    253  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
    +
    254  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
    +
    255  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    +
    256  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    +
    257  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
    +
    258  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    +
    259  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
    +
    260  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
    +
    261  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
    +
    262  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
    +
    263  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
    +
    264  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
    +
    265  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
    +
    266  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
    +
    267  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
    +
    268  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
    +
    269  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
    +
    270  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
    +
    271  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
    +
    272  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C)
    +
    273 
    +
    274 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    +
    275  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    +
    276  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    +
    277  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
    +
    278  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    +
    279  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    +
    280  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
    +
    281  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
    +
    282  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
    +
    283  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
    +
    284  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    +
    285  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    +
    286  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
    +
    287  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    +
    288  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    +
    289  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
    +
    290  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
    +
    291  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
    +
    292  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
    +
    293  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
    +
    294  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
    +
    295  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
    +
    296  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
    +
    297  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
    +
    298  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
    +
    299  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
    +
    300  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
    +
    301  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
    +
    302  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    +
    303  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    +
    304  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
    +
    305  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    +
    306  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    +
    307  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
    +
    308  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
    +
    309  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
    +
    310  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
    +
    311  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    +
    312  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    +
    313  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
    +
    314  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    +
    315  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
    +
    316  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
    +
    317  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
    +
    318  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
    +
    319  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
    +
    320  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
    +
    321  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
    +
    322  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
    +
    323  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
    +
    324  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
    +
    325  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
    +
    326  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
    +
    327  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
    +
    328  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
    +
    329  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
    +
    330  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
    +
    331  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
    +
    332  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
    +
    333  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
    +
    334  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
    +
    335  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
    +
    336  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
    +
    337  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
    +
    338  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
    +
    339  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
    +
    340  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
    +
    341  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
    +
    342  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
    +
    343  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
    +
    344  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
    +
    345  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
    +
    346  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
    +
    347  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
    +
    348  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
    +
    349  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
    +
    350  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
    +
    351  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
    +
    352  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
    +
    353  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
    +
    354  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
    +
    355  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C)
    +
    356 
    +
    357 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \
    +
    358  GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \
    +
    359  GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    +
    360  GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C)
    +
    361 
    +
    362 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    +
    363  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \
    +
    364  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \
    +
    365  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p)
    +
    366 
    +
    367 //GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4)
    +
    368 
    +
    369 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    370  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    +
    371  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    +
    372  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
    +
    373  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \
    +
    374  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    +
    375  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
    +
    376  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
    +
    377  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \
    +
    378  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
    +
    379  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
    +
    380  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \
    +
    381  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \
    +
    382  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \
    +
    383  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \
    +
    384  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \
    +
    385  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D)
    +
    386 
    +
    387 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    388  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    +
    389  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    +
    390  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
    +
    391  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \
    +
    392  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    +
    393  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    +
    394  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
    +
    395  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \
    +
    396  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
    +
    397  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
    +
    398  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
    +
    399  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \
    +
    400  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \
    +
    401  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \
    +
    402  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \
    +
    403  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \
    +
    404  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    +
    405  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    +
    406  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
    +
    407  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \
    +
    408  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    +
    409  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
    +
    410  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
    +
    411  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \
    +
    412  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
    +
    413  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
    +
    414  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
    +
    415  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \
    +
    416  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \
    +
    417  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \
    +
    418  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \
    +
    419  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \
    +
    420  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
    +
    421  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
    +
    422  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
    +
    423  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \
    +
    424  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
    +
    425  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
    +
    426  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
    +
    427  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \
    +
    428  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
    +
    429  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
    +
    430  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \
    +
    431  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \
    +
    432  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \
    +
    433  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \
    +
    434  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \
    +
    435  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \
    +
    436  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \
    +
    437  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \
    +
    438  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \
    +
    439  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \
    +
    440  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \
    +
    441  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \
    +
    442  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \
    +
    443  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \
    +
    444  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \
    +
    445  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \
    +
    446  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \
    +
    447  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \
    +
    448  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \
    +
    449  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \
    +
    450  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \
    +
    451  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D)
    +
    452 
    +
    453 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    +
    454  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    +
    455  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    +
    456  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
    +
    457  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \
    +
    458  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    +
    459  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    +
    460  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
    +
    461  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \
    +
    462  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
    +
    463  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
    +
    464  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
    +
    465  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \
    +
    466  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \
    +
    467  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \
    +
    468  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \
    +
    469  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \
    +
    470  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    +
    471  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    +
    472  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
    +
    473  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \
    +
    474  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    +
    475  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    +
    476  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
    +
    477  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \
    +
    478  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
    +
    479  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
    +
    480  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
    +
    481  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \
    +
    482  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \
    +
    483  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \
    +
    484  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \
    +
    485  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \
    +
    486  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
    +
    487  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
    +
    488  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
    +
    489  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \
    +
    490  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
    +
    491  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
    +
    492  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
    +
    493  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \
    +
    494  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
    +
    495  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
    +
    496  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
    +
    497  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \
    +
    498  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \
    +
    499  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \
    +
    500  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \
    +
    501  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \
    +
    502  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
    +
    503  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
    +
    504  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
    +
    505  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \
    +
    506  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
    +
    507  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
    +
    508  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
    +
    509  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \
    +
    510  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
    +
    511  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
    +
    512  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
    +
    513  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \
    +
    514  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \
    +
    515  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \
    +
    516  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \
    +
    517  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \
    +
    518  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    +
    519  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    +
    520  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
    +
    521  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \
    +
    522  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    +
    523  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    +
    524  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
    +
    525  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \
    +
    526  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
    +
    527  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
    +
    528  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
    +
    529  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \
    +
    530  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \
    +
    531  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \
    +
    532  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \
    +
    533  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \
    +
    534  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    +
    535  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    +
    536  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
    +
    537  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \
    +
    538  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    +
    539  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
    +
    540  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
    +
    541  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \
    +
    542  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
    +
    543  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
    +
    544  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
    +
    545  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \
    +
    546  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \
    +
    547  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \
    +
    548  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \
    +
    549  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \
    +
    550  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
    +
    551  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
    +
    552  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
    +
    553  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \
    +
    554  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
    +
    555  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
    +
    556  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
    +
    557  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \
    +
    558  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
    +
    559  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
    +
    560  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
    +
    561  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \
    +
    562  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \
    +
    563  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \
    +
    564  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \
    +
    565  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \
    +
    566  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
    +
    567  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
    +
    568  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
    +
    569  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \
    +
    570  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
    +
    571  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
    +
    572  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
    +
    573  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \
    +
    574  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
    +
    575  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
    +
    576  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
    +
    577  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \
    +
    578  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \
    +
    579  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \
    +
    580  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \
    +
    581  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \
    +
    582  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
    +
    583  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
    +
    584  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
    +
    585  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \
    +
    586  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
    +
    587  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
    +
    588  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
    +
    589  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \
    +
    590  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
    +
    591  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
    +
    592  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
    +
    593  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \
    +
    594  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \
    +
    595  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \
    +
    596  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \
    +
    597  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \
    +
    598  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
    +
    599  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
    +
    600  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
    +
    601  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \
    +
    602  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
    +
    603  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
    +
    604  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
    +
    605  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \
    +
    606  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
    +
    607  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
    +
    608  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
    +
    609  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \
    +
    610  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \
    +
    611  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \
    +
    612  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \
    +
    613  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \
    +
    614  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
    +
    615  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
    +
    616  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
    +
    617  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \
    +
    618  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
    +
    619  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
    +
    620  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
    +
    621  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \
    +
    622  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
    +
    623  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
    +
    624  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
    +
    625  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \
    +
    626  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \
    +
    627  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \
    +
    628  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \
    +
    629  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \
    +
    630  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
    +
    631  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
    +
    632  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
    +
    633  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \
    +
    634  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
    +
    635  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
    +
    636  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
    +
    637  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \
    +
    638  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
    +
    639  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
    +
    640  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
    +
    641  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \
    +
    642  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \
    +
    643  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \
    +
    644  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \
    +
    645  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \
    +
    646  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
    +
    647  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
    +
    648  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
    +
    649  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \
    +
    650  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
    +
    651  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
    +
    652  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
    +
    653  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \
    +
    654  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
    +
    655  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
    +
    656  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
    +
    657  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \
    +
    658  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \
    +
    659  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \
    +
    660  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \
    +
    661  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \
    +
    662  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
    +
    663  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
    +
    664  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
    +
    665  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \
    +
    666  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
    +
    667  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
    +
    668  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
    +
    669  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \
    +
    670  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
    +
    671  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
    +
    672  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
    +
    673  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \
    +
    674  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \
    +
    675  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \
    +
    676  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \
    +
    677  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \
    +
    678  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
    +
    679  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
    +
    680  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
    +
    681  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \
    +
    682  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
    +
    683  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
    +
    684  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
    +
    685  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \
    +
    686  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
    +
    687  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
    +
    688  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
    +
    689  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \
    +
    690  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \
    +
    691  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \
    +
    692  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \
    +
    693  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \
    +
    694  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
    +
    695  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
    +
    696  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
    +
    697  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \
    +
    698  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
    +
    699  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
    +
    700  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
    +
    701  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \
    +
    702  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
    +
    703  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
    +
    704  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \
    +
    705  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \
    +
    706  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \
    +
    707  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \
    +
    708  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \
    +
    709  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D)
    +
    710 
    +
    711 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
    +
    712  GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
    +
    713  GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
    +
    714  GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
    +
    715 
    +
    716 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    +
    717  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
    +
    718  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
    +
    719  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)
    +
    720 
    +
    721 //GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4)
    diff --git a/doc/api/a00006.html b/doc/api/a00006.html new file mode 100644 index 00000000..21d09ccf --- /dev/null +++ b/doc/api/a00006.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: _vectorize.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    _vectorize.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2011-10-14 / 2011-10-14
    +
    Author
    Christophe Riccio
    + +

    Definition in file _vectorize.hpp.

    +
    + + + + diff --git a/doc/api/a00006_source.html b/doc/api/a00006_source.html index 9c1a9f75..bd7da960 100644 --- a/doc/api/a00006_source.html +++ b/doc/api/a00006_source.html @@ -3,8 +3,8 @@ - -GLM: _literals.hpp Source File + +0.9.6: _vectorize.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,44 +41,154 @@
    -
    _literals.hpp
    +
    _vectorize.hpp
    -
    1 
    -
    29 #ifndef glm_core_literals
    -
    30 #define glm_core_literals
    -
    31 
    -
    32 namespace glm
    -
    33 {
    -
    34 #define GLM_CXX11_USER_LITERALS
    -
    35 #ifdef GLM_CXX11_USER_LITERALS
    -
    36 /*
    -
    37  GLM_FUNC_QUALIFIER detail::half operator "" _h(long double const s)
    -
    38  {
    -
    39  return detail::half(s);
    -
    40  }
    -
    41 
    -
    42  GLM_FUNC_QUALIFIER float operator "" _f(long double const s)
    -
    43  {
    -
    44  return static_cast<float>(s);
    -
    45  }
    -
    46 */
    -
    47 #endif//GLM_CXX11_USER_LITERALS
    -
    48 
    -
    49 }//namespace glm
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "type_vec1.hpp"
    +
    32 #include "type_vec2.hpp"
    +
    33 #include "type_vec3.hpp"
    +
    34 #include "type_vec4.hpp"
    +
    35 
    +
    36 namespace glm{
    +
    37 namespace detail
    +
    38 {
    +
    39  template <typename R, typename T, precision P, template <typename, precision> class vecType>
    +
    40  struct functor1{};
    +
    41 
    +
    42  template <typename R, typename T, precision P>
    +
    43  struct functor1<R, T, P, tvec1>
    +
    44  {
    +
    45  GLM_FUNC_QUALIFIER static tvec1<R, P> call(R (*Func) (T x), tvec1<T, P> const & v)
    +
    46  {
    +
    47  return tvec1<R, P>(Func(v.x));
    +
    48  }
    +
    49  };
    50 
    -
    51 #endif//glm_core_literals
    +
    51  template <typename R, typename T, precision P>
    +
    52  struct functor1<R, T, P, tvec2>
    +
    53  {
    +
    54  GLM_FUNC_QUALIFIER static tvec2<R, P> call(R (*Func) (T x), tvec2<T, P> const & v)
    +
    55  {
    +
    56  return tvec2<R, P>(Func(v.x), Func(v.y));
    +
    57  }
    +
    58  };
    +
    59 
    +
    60  template <typename R, typename T, precision P>
    +
    61  struct functor1<R, T, P, tvec3>
    +
    62  {
    +
    63  GLM_FUNC_QUALIFIER static tvec3<R, P> call(R (*Func) (T x), tvec3<T, P> const & v)
    +
    64  {
    +
    65  return tvec3<R, P>(Func(v.x), Func(v.y), Func(v.z));
    +
    66  }
    +
    67  };
    +
    68 
    +
    69  template <typename R, typename T, precision P>
    +
    70  struct functor1<R, T, P, tvec4>
    +
    71  {
    +
    72  GLM_FUNC_QUALIFIER static tvec4<R, P> call(R (*Func) (T x), tvec4<T, P> const & v)
    +
    73  {
    +
    74  return tvec4<R, P>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));
    +
    75  }
    +
    76  };
    +
    77 
    +
    78  template <typename T, precision P, template <typename, precision> class vecType>
    +
    79  struct functor2{};
    +
    80 
    +
    81  template <typename T, precision P>
    +
    82  struct functor2<T, P, tvec1>
    +
    83  {
    +
    84  GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, tvec1<T, P> const & b)
    +
    85  {
    +
    86  return tvec1<T, P>(Func(a.x, b.x));
    +
    87  }
    +
    88  };
    +
    89 
    +
    90  template <typename T, precision P>
    +
    91  struct functor2<T, P, tvec2>
    +
    92  {
    +
    93  GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, tvec2<T, P> const & b)
    +
    94  {
    +
    95  return tvec2<T, P>(Func(a.x, b.x), Func(a.y, b.y));
    +
    96  }
    +
    97  };
    +
    98 
    +
    99  template <typename T, precision P>
    +
    100  struct functor2<T, P, tvec3>
    +
    101  {
    +
    102  GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, tvec3<T, P> const & b)
    +
    103  {
    +
    104  return tvec3<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
    +
    105  }
    +
    106  };
    +
    107 
    +
    108  template <typename T, precision P>
    +
    109  struct functor2<T, P, tvec4>
    +
    110  {
    +
    111  GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, tvec4<T, P> const & b)
    +
    112  {
    +
    113  return tvec4<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
    +
    114  }
    +
    115  };
    +
    116 
    +
    117  template <typename T, precision P, template <typename, precision> class vecType>
    +
    118  struct functor2_vec_sca{};
    +
    119 
    +
    120  template <typename T, precision P>
    +
    121  struct functor2_vec_sca<T, P, tvec1>
    +
    122  {
    +
    123  GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, T b)
    +
    124  {
    +
    125  return tvec1<T, P>(Func(a.x, b));
    +
    126  }
    +
    127  };
    +
    128 
    +
    129  template <typename T, precision P>
    +
    130  struct functor2_vec_sca<T, P, tvec2>
    +
    131  {
    +
    132  GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, T b)
    +
    133  {
    +
    134  return tvec2<T, P>(Func(a.x, b), Func(a.y, b));
    +
    135  }
    +
    136  };
    +
    137 
    +
    138  template <typename T, precision P>
    +
    139  struct functor2_vec_sca<T, P, tvec3>
    +
    140  {
    +
    141  GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, T b)
    +
    142  {
    +
    143  return tvec3<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b));
    +
    144  }
    +
    145  };
    +
    146 
    +
    147  template <typename T, precision P>
    +
    148  struct functor2_vec_sca<T, P, tvec4>
    +
    149  {
    +
    150  GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, T b)
    +
    151  {
    +
    152  return tvec4<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
    +
    153  }
    +
    154  };
    +
    155 }//namespace detail
    +
    156 }//namespace glm
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00007.html b/doc/api/a00007.html index 15593ac2..a94dc628 100644 --- a/doc/api/a00007.html +++ b/doc/api/a00007.html @@ -3,8 +3,8 @@ - -GLM: _noise.hpp File Reference + +0.9.6: associated_min_max.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,107 @@
    -
    _noise.hpp File Reference
    +
    associated_min_max.hpp File Reference

    Go to the source code of this file.

    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Namespaces

     glm
     

    +Functions

    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL tvec2< U, P > associatedMax (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > associatedMax (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b)
     
    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b, T z, U c)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > associatedMax (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c)
     
    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b, T z, U c, T w, U d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c, vecType< T, P > const &w, vecType< U, P > const &d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c, T w, vecType< U, P > const &d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL tvec2< U, P > associatedMin (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (T x, const vecType< U, P > &a, T y, const vecType< U, P > &b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b)
     
    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b, T z, U c)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c)
     
    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b, T z, U c, T w, U d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c, vecType< T, P > const &w, vecType< U, P > const &d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c, T w, vecType< U, P > const &d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTX_associated_min_max

    +
    Date
    2008-03-10 / 2014-10-11
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_extented_min_max (dependence)
    -

    Definition in file _noise.hpp.

    +

    Definition in file associated_min_max.hpp.

    diff --git a/doc/api/a00007_source.html b/doc/api/a00007_source.html index c5345751..49da5a14 100644 --- a/doc/api/a00007_source.html +++ b/doc/api/a00007_source.html @@ -3,8 +3,8 @@ - -GLM: _noise.hpp Source File + +0.9.6: associated_min_max.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,124 +41,167 @@
    -
    _noise.hpp
    +
    associated_min_max.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_DETAIL_NOISE_INCLUDED
    -
    30 #define GLM_DETAIL_NOISE_INCLUDED
    -
    31 
    -
    32 namespace glm{
    -
    33 namespace detail
    -
    34 {
    -
    35  template <typename T>
    -
    36  GLM_FUNC_QUALIFIER T mod289(T const & x)
    -
    37  {
    -
    38  return x - floor(x * static_cast<T>(1.0) / static_cast<T>(289.0)) * static_cast<T>(289.0);
    -
    39  }
    -
    40 
    -
    41  template <typename T>
    -
    42  GLM_FUNC_QUALIFIER T permute(T const & x)
    -
    43  {
    -
    44  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
    -
    45  }
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_associated_min_max extension included")
    +
    45 #endif
    46 
    -
    47  template <typename T, precision P>
    -
    48  GLM_FUNC_QUALIFIER tvec2<T, P> permute(tvec2<T, P> const & x)
    -
    49  {
    -
    50  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
    -
    51  }
    -
    52 
    -
    53  template <typename T, precision P>
    -
    54  GLM_FUNC_QUALIFIER tvec3<T, P> permute(tvec3<T, P> const & x)
    -
    55  {
    -
    56  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
    -
    57  }
    -
    58 
    -
    59  template <typename T, precision P>
    -
    60  GLM_FUNC_QUALIFIER tvec4<T, P> permute(tvec4<T, P> const & x)
    -
    61  {
    -
    62  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
    -
    63  }
    -
    64 /*
    -
    65  template <typename T, precision P, template<typename> class vecType>
    -
    66  GLM_FUNC_QUALIFIER vecType<T, P> permute(vecType<T, P> const & x)
    -
    67  {
    -
    68  return mod289(((x * T(34)) + T(1)) * x);
    -
    69  }
    -
    70 */
    -
    71  template <typename T>
    -
    72  GLM_FUNC_QUALIFIER T taylorInvSqrt(T const & r)
    -
    73  {
    -
    74  return T(1.79284291400159) - T(0.85373472095314) * r;
    -
    75  }
    -
    76 
    -
    77  template <typename T, precision P>
    -
    78  GLM_FUNC_QUALIFIER detail::tvec2<T, P> taylorInvSqrt(detail::tvec2<T, P> const & r)
    -
    79  {
    -
    80  return T(1.79284291400159) - T(0.85373472095314) * r;
    -
    81  }
    -
    82 
    -
    83  template <typename T, precision P>
    -
    84  GLM_FUNC_QUALIFIER detail::tvec3<T, P> taylorInvSqrt(detail::tvec3<T, P> const & r)
    -
    85  {
    -
    86  return T(1.79284291400159) - T(0.85373472095314) * r;
    -
    87  }
    -
    88 
    -
    89  template <typename T, precision P>
    -
    90  GLM_FUNC_QUALIFIER detail::tvec4<T, P> taylorInvSqrt(detail::tvec4<T, P> const & r)
    -
    91  {
    -
    92  return T(1.79284291400159) - T(0.85373472095314) * r;
    -
    93  }
    -
    94 /*
    -
    95  template <typename T, precision P, template<typename> class vecType>
    -
    96  GLM_FUNC_QUALIFIER vecType<T, P> taylorInvSqrt(vecType<T, P> const & r)
    -
    97  {
    -
    98  return T(1.79284291400159) - T(0.85373472095314) * r;
    -
    99  }
    -
    100 */
    -
    101 
    -
    102  template <typename T, precision P>
    -
    103  GLM_FUNC_QUALIFIER detail::tvec2<T, P> fade(detail::tvec2<T, P> const & t)
    -
    104  {
    -
    105  return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
    -
    106  }
    -
    107 
    -
    108  template <typename T, precision P>
    -
    109  GLM_FUNC_QUALIFIER detail::tvec3<T, P> fade(detail::tvec3<T, P> const & t)
    -
    110  {
    -
    111  return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
    -
    112  }
    -
    113 
    -
    114  template <typename T, precision P>
    -
    115  GLM_FUNC_QUALIFIER detail::tvec4<T, P> fade(detail::tvec4<T, P> const & t)
    -
    116  {
    -
    117  return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
    -
    118  }
    -
    119 /*
    -
    120  template <typename T, precision P, template <typename> class vecType>
    -
    121  GLM_FUNC_QUALIFIER vecType<T, P> fade(vecType<T, P> const & t)
    -
    122  {
    -
    123  return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
    -
    124  }
    -
    125 */
    -
    126 }//namespace detail
    -
    127 }//namespace glm
    -
    128 
    -
    129 #endif//GLM_DETAIL_NOISE_INCLUDED
    -
    130 
    -
    GLM_FUNC_DECL genType floor(genType const &x)
    Returns a value equal to the nearest integer that is less then or equal to x.
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template<typename T, typename U, precision P>
    +
    55  GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b);
    +
    56 
    +
    59  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    60  GLM_FUNC_DECL tvec2<U, P> associatedMin(
    +
    61  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    62  vecType<T, P> const & y, vecType<U, P> const & b);
    +
    63 
    +
    66  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    67  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    68  T x, const vecType<U, P>& a,
    +
    69  T y, const vecType<U, P>& b);
    +
    70 
    +
    73  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    74  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    75  vecType<T, P> const & x, U a,
    +
    76  vecType<T, P> const & y, U b);
    +
    77 
    +
    80  template<typename T, typename U>
    +
    81  GLM_FUNC_DECL U associatedMin(
    +
    82  T x, U a,
    +
    83  T y, U b,
    +
    84  T z, U c);
    +
    85 
    +
    88  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    89  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    90  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    91  vecType<T, P> const & y, vecType<U, P> const & b,
    +
    92  vecType<T, P> const & z, vecType<U, P> const & c);
    +
    93 
    +
    96  template<typename T, typename U>
    +
    97  GLM_FUNC_DECL U associatedMin(
    +
    98  T x, U a,
    +
    99  T y, U b,
    +
    100  T z, U c,
    +
    101  T w, U d);
    +
    102 
    +
    105  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    106  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    107  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    108  vecType<T, P> const & y, vecType<U, P> const & b,
    +
    109  vecType<T, P> const & z, vecType<U, P> const & c,
    +
    110  vecType<T, P> const & w, vecType<U, P> const & d);
    +
    111 
    +
    114  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    115  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    116  T x, vecType<U, P> const & a,
    +
    117  T y, vecType<U, P> const & b,
    +
    118  T z, vecType<U, P> const & c,
    +
    119  T w, vecType<U, P> const & d);
    +
    120 
    +
    123  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    124  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    125  vecType<T, P> const & x, U a,
    +
    126  vecType<T, P> const & y, U b,
    +
    127  vecType<T, P> const & z, U c,
    +
    128  vecType<T, P> const & w, U d);
    +
    129 
    +
    132  template<typename T, typename U>
    +
    133  GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b);
    +
    134 
    +
    137  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    138  GLM_FUNC_DECL tvec2<U, P> associatedMax(
    +
    139  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    140  vecType<T, P> const & y, vecType<U, P> const & b);
    +
    141 
    +
    144  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    145  GLM_FUNC_DECL vecType<T, P> associatedMax(
    +
    146  T x, vecType<U, P> const & a,
    +
    147  T y, vecType<U, P> const & b);
    +
    148 
    +
    151  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    152  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    153  vecType<T, P> const & x, U a,
    +
    154  vecType<T, P> const & y, U b);
    +
    155 
    +
    158  template<typename T, typename U>
    +
    159  GLM_FUNC_DECL U associatedMax(
    +
    160  T x, U a,
    +
    161  T y, U b,
    +
    162  T z, U c);
    +
    163 
    +
    166  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    167  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    168  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    169  vecType<T, P> const & y, vecType<U, P> const & b,
    +
    170  vecType<T, P> const & z, vecType<U, P> const & c);
    +
    171 
    +
    174  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    175  GLM_FUNC_DECL vecType<T, P> associatedMax(
    +
    176  T x, vecType<U, P> const & a,
    +
    177  T y, vecType<U, P> const & b,
    +
    178  T z, vecType<U, P> const & c);
    +
    179 
    +
    182  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    183  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    184  vecType<T, P> const & x, U a,
    +
    185  vecType<T, P> const & y, U b,
    +
    186  vecType<T, P> const & z, U c);
    +
    187 
    +
    190  template<typename T, typename U>
    +
    191  GLM_FUNC_DECL U associatedMax(
    +
    192  T x, U a,
    +
    193  T y, U b,
    +
    194  T z, U c,
    +
    195  T w, U d);
    +
    196 
    +
    199  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    200  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    201  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    202  vecType<T, P> const & y, vecType<U, P> const & b,
    +
    203  vecType<T, P> const & z, vecType<U, P> const & c,
    +
    204  vecType<T, P> const & w, vecType<U, P> const & d);
    +
    205 
    +
    208  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    209  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    210  T x, vecType<U, P> const & a,
    +
    211  T y, vecType<U, P> const & b,
    +
    212  T z, vecType<U, P> const & c,
    +
    213  T w, vecType<U, P> const & d);
    +
    214 
    +
    217  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    218  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    219  vecType<T, P> const & x, U a,
    +
    220  vecType<T, P> const & y, U b,
    +
    221  vecType<T, P> const & z, U c,
    +
    222  vecType<T, P> const & w, U d);
    +
    223 
    +
    225 } //namespace glm
    +
    226 
    +
    227 #include "associated_min_max.inl"
    +
    GLM_FUNC_DECL vecType< U, P > associatedMax(vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
    Maximum comparison between 4 variables and returns 4 associated variable values.
    +
    GLM_FUNC_DECL vecType< U, P > associatedMin(vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
    Minimum comparison between 4 variables and returns 4 associated variable values.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00008.html b/doc/api/a00008.html new file mode 100644 index 00000000..e9d1cf64 --- /dev/null +++ b/doc/api/a00008.html @@ -0,0 +1,112 @@ + + + + + + +0.9.6: bit.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    bit.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genIUType >
    GLM_FUNC_DECL genIUType highestBitValue (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > highestBitValue (vecType< T, P > const &value)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType powerOfTwoAbove (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > powerOfTwoAbove (vecType< T, P > const &value)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType powerOfTwoBelow (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > powerOfTwoBelow (vecType< T, P > const &value)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType powerOfTwoNearest (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > powerOfTwoNearest (vecType< T, P > const &value)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_bit

    +
    Date
    2007-03-14 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +gtc_half_float (dependence)
    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_bit

    +
    Date
    2005-12-30 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file bit.hpp.

    +
    + + + + diff --git a/doc/api/a00008_source.html b/doc/api/a00008_source.html index d11f3234..ea64ca62 100644 --- a/doc/api/a00008_source.html +++ b/doc/api/a00008_source.html @@ -3,8 +3,8 @@ - -GLM: _swizzle.hpp Source File + +0.9.6: bit.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,834 +41,67 @@
    -
    _swizzle.hpp
    +
    bit.hpp
    -
    1 
    -
    29 #ifndef glm_core_swizzle
    -
    30 #define glm_core_swizzle
    -
    31 
    -
    32 namespace glm{
    -
    33 namespace detail
    -
    34 {
    -
    35  // Internal class for implementing swizzle operators
    -
    36  template <typename T, int N>
    -
    37  struct _swizzle_base0
    -
    38  {
    -
    39  typedef T value_type;
    +Go to the documentation of this file.
    1 
    +
    39 #pragma once
    40 
    -
    41  protected:
    -
    42  GLM_FUNC_QUALIFIER value_type& elem (size_t i) { return (reinterpret_cast<value_type*>(_buffer))[i]; }
    -
    43  GLM_FUNC_QUALIFIER const value_type& elem (size_t i) const { return (reinterpret_cast<const value_type*>(_buffer))[i]; }
    -
    44 
    -
    45  // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
    -
    46  // The size 1 buffer is assumed to aligned to the actual members so that the
    -
    47  // elem()
    -
    48  char _buffer[1];
    -
    49  };
    -
    50 
    -
    51  template <typename T, precision P, typename V, int E0, int E1, int E2, int E3, int N>
    -
    52  struct _swizzle_base1 : public _swizzle_base0<T, N>
    -
    53  {
    -
    54  };
    -
    55 
    -
    56  template <typename T, precision P, typename V, int E0, int E1>
    -
    57  struct _swizzle_base1<T, P, V,E0,E1,-1,-2,2> : public _swizzle_base0<T, 2>
    -
    58  {
    -
    59  GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1)); }
    -
    60  };
    -
    61 
    -
    62  template <typename T, precision P, typename V, int E0, int E1, int E2>
    -
    63  struct _swizzle_base1<T, P, V,E0,E1,E2,-1,3> : public _swizzle_base0<T, 3>
    -
    64  {
    -
    65  GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); }
    -
    66  };
    -
    67 
    -
    68  template <typename T, precision P, typename V, int E0, int E1, int E2, int E3>
    -
    69  struct _swizzle_base1<T, P, V,E0,E1,E2,E3,4> : public _swizzle_base0<T, 4>
    -
    70  {
    -
    71  GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
    -
    72  };
    -
    73 
    -
    74  // Internal class for implementing swizzle operators
    -
    75  /*
    -
    76  Template parameters:
    -
    77 
    -
    78  ValueType = type of scalar values (e.g. float, double)
    -
    79  VecType = class the swizzle is applies to (e.g. tvec3<float>)
    -
    80  N = number of components in the vector (e.g. 3)
    -
    81  E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec
    -
    82 
    -
    83  DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
    -
    84  containing duplicate elements so that they cannot be used as r-values).
    -
    85  */
    -
    86  template <typename ValueType, precision P, typename VecType, int N, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
    -
    87  struct _swizzle_base2 : public _swizzle_base1<ValueType, P, VecType,E0,E1,E2,E3,N>
    -
    88  {
    -
    89  typedef VecType vec_type;
    -
    90  typedef ValueType value_type;
    -
    91 
    -
    92  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const ValueType& t)
    -
    93  {
    -
    94  for (int i = 0; i < N; ++i)
    -
    95  (*this)[i] = t;
    -
    96  return *this;
    -
    97  }
    +
    41 // Dependencies
    +
    42 #include "../gtc/bitfield.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES))
    +
    45 # pragma message("GLM: GLM_GTX_bit extension is deprecated, include GLM_GTC_bitfield and GLM_GTC_integer instead")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    54  template <typename genIUType>
    +
    55  GLM_FUNC_DECL genIUType highestBitValue(genIUType Value);
    +
    56 
    +
    60  template <typename T, precision P, template <typename, precision> class vecType>
    +
    61  GLM_FUNC_DECL vecType<T, P> highestBitValue(vecType<T, P> const & value);
    +
    62 
    +
    66  template <typename genIUType>
    +
    67  GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value);
    +
    68 
    +
    72  template <typename T, precision P, template <typename, precision> class vecType>
    +
    73  GLM_FUNC_DECL vecType<T, P> powerOfTwoAbove(vecType<T, P> const & value);
    +
    74 
    +
    78  template <typename genIUType>
    +
    79  GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value);
    +
    80 
    +
    84  template <typename T, precision P, template <typename, precision> class vecType>
    +
    85  GLM_FUNC_DECL vecType<T, P> powerOfTwoBelow(vecType<T, P> const & value);
    +
    86 
    +
    90  template <typename genIUType>
    +
    91  GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value);
    +
    92 
    +
    96  template <typename T, precision P, template <typename, precision> class vecType>
    +
    97  GLM_FUNC_DECL vecType<T, P> powerOfTwoNearest(vecType<T, P> const & value);
    98 
    -
    99  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const VecType& that)
    -
    100  {
    -
    101  struct op {
    -
    102  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e = t; }
    -
    103  };
    -
    104  _apply_op(that, op());
    -
    105  return *this;
    -
    106  }
    -
    107 
    -
    108  GLM_FUNC_QUALIFIER void operator -= (const VecType& that)
    -
    109  {
    -
    110  struct op {
    -
    111  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e -= t; }
    -
    112  };
    -
    113  _apply_op(that, op());
    -
    114  }
    -
    115 
    -
    116  GLM_FUNC_QUALIFIER void operator += (const VecType& that)
    -
    117  {
    -
    118  struct op {
    -
    119  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e += t; }
    -
    120  };
    -
    121  _apply_op(that, op());
    -
    122  }
    -
    123 
    -
    124  GLM_FUNC_QUALIFIER void operator *= (const VecType& that)
    -
    125  {
    -
    126  struct op {
    -
    127  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e *= t; }
    -
    128  };
    -
    129  _apply_op(that, op());
    -
    130  }
    -
    131 
    -
    132  GLM_FUNC_QUALIFIER void operator /= (const VecType& that)
    -
    133  {
    -
    134  struct op {
    -
    135  GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e /= t; }
    -
    136  };
    -
    137  _apply_op(that, op());
    -
    138  }
    -
    139 
    -
    140  GLM_FUNC_QUALIFIER value_type& operator[] (size_t i)
    -
    141  {
    -
    142 #ifndef __CUDA_ARCH__
    -
    143  static
    -
    144 #endif
    -
    145  const int offset_dst[4] = { E0, E1, E2, E3 };
    -
    146  return this->elem(offset_dst[i]);
    -
    147  }
    -
    148  GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const
    -
    149  {
    -
    150 #ifndef __CUDA_ARCH__
    -
    151  static
    -
    152 #endif
    -
    153  const int offset_dst[4] = { E0, E1, E2, E3 };
    -
    154  return this->elem(offset_dst[i]);
    -
    155  }
    -
    156  protected:
    -
    157  template <typename T>
    -
    158  GLM_FUNC_QUALIFIER void _apply_op(const VecType& that, T op)
    -
    159  {
    -
    160  // Make a copy of the data in this == &that.
    -
    161  // The copier should optimize out the copy in cases where the function is
    -
    162  // properly inlined and the copy is not necessary.
    -
    163  ValueType t[N];
    -
    164  for (int i = 0; i < N; ++i)
    -
    165  t[i] = that[i];
    -
    166  for (int i = 0; i < N; ++i)
    -
    167  op( (*this)[i], t[i] );
    -
    168  }
    -
    169  };
    -
    170 
    -
    171  // Specialization for swizzles containing duplicate elements. These cannot be modified.
    -
    172  template <typename ValueType, precision P, typename VecType, int N, int E0, int E1, int E2, int E3>
    -
    173  struct _swizzle_base2<ValueType, P, VecType,N,E0,E1,E2,E3,1> : public _swizzle_base1<ValueType, P, VecType,E0,E1,E2,E3,N>
    -
    174  {
    -
    175  typedef VecType vec_type;
    -
    176  typedef ValueType value_type;
    -
    177 
    -
    178  struct Stub {};
    -
    179  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; }
    -
    180 
    -
    181  GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const
    -
    182  {
    -
    183 #ifndef __CUDA_ARCH__
    -
    184  static
    -
    185 #endif
    -
    186  const int offset_dst[4] = { E0, E1, E2, E3 };
    -
    187  return this->elem(offset_dst[i]);
    -
    188  }
    -
    189  };
    -
    190 
    -
    191  template <int N,typename ValueType, precision P, typename VecType, int E0,int E1,int E2,int E3>
    -
    192  struct _swizzle : public _swizzle_base2<ValueType, P, VecType, N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)>
    -
    193  {
    -
    194  typedef _swizzle_base2<ValueType, P, VecType,N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)> base_type;
    -
    195 
    -
    196  using base_type::operator=;
    -
    197 
    -
    198  GLM_FUNC_QUALIFIER operator VecType () const { return (*this)(); }
    -
    199  };
    -
    200 
    -
    201 //
    -
    202 // To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
    -
    203 //
    -
    204 #define _GLM_SWIZZLE_TEMPLATE1 template <int N, typename T, precision P, typename V, int E0, int E1, int E2, int E3>
    -
    205 #define _GLM_SWIZZLE_TEMPLATE2 template <int N, typename T, precision P, typename V, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>
    -
    206 #define _GLM_SWIZZLE_TYPE1 _swizzle<N, T, P, V, E0, E1, E2, E3>
    -
    207 #define _GLM_SWIZZLE_TYPE2 _swizzle<N, T, P, V, F0, F1, F2, F3>
    -
    208 
    -
    209 //
    -
    210 // Wrapper for a binary operator (e.g. u.yy + v.zy)
    -
    211 //
    -
    212 #define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
    -
    213  _GLM_SWIZZLE_TEMPLATE2 \
    -
    214  GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
    -
    215  { \
    -
    216  return a() OPERAND b(); \
    -
    217  } \
    -
    218  _GLM_SWIZZLE_TEMPLATE1 \
    -
    219  GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b) \
    -
    220  { \
    -
    221  return a() OPERAND b; \
    -
    222  } \
    -
    223  _GLM_SWIZZLE_TEMPLATE1 \
    -
    224  GLM_FUNC_QUALIFIER V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b) \
    -
    225  { \
    -
    226  return a OPERAND b(); \
    -
    227  }
    -
    228 
    -
    229 //
    -
    230 // Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
    -
    231 //
    -
    232 #define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
    -
    233  _GLM_SWIZZLE_TEMPLATE1 \
    -
    234  GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \
    -
    235  { \
    -
    236  return a() OPERAND b; \
    -
    237  } \
    -
    238  _GLM_SWIZZLE_TEMPLATE1 \
    -
    239  GLM_FUNC_QUALIFIER V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \
    -
    240  { \
    -
    241  return a OPERAND b(); \
    -
    242  }
    -
    243 
    -
    244 //
    -
    245 // Macro for wrapping a function taking one argument (e.g. abs())
    -
    246 //
    -
    247 #define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \
    -
    248  _GLM_SWIZZLE_TEMPLATE1 \
    -
    249  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \
    -
    250  { \
    -
    251  return FUNCTION(a()); \
    -
    252  }
    -
    253 
    -
    254 //
    -
    255 // Macro for wrapping a function taking two vector arguments (e.g. dot()).
    -
    256 //
    -
    257 #define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \
    -
    258  _GLM_SWIZZLE_TEMPLATE2 \
    -
    259  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
    -
    260  { \
    -
    261  return FUNCTION(a(), b()); \
    -
    262  } \
    -
    263  _GLM_SWIZZLE_TEMPLATE1 \
    -
    264  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \
    -
    265  { \
    -
    266  return FUNCTION(a(), b()); \
    -
    267  } \
    -
    268  _GLM_SWIZZLE_TEMPLATE1 \
    -
    269  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \
    -
    270  { \
    -
    271  return FUNCTION(a(), b); \
    -
    272  } \
    -
    273  _GLM_SWIZZLE_TEMPLATE1 \
    -
    274  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \
    -
    275  { \
    -
    276  return FUNCTION(a, b()); \
    -
    277  }
    -
    278 
    -
    279 //
    -
    280 // Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
    -
    281 //
    -
    282 #define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \
    -
    283  _GLM_SWIZZLE_TEMPLATE2 \
    -
    284  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \
    -
    285  { \
    -
    286  return FUNCTION(a(), b(), c); \
    -
    287  } \
    -
    288  _GLM_SWIZZLE_TEMPLATE1 \
    -
    289  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
    -
    290  { \
    -
    291  return FUNCTION(a(), b(), c); \
    -
    292  } \
    -
    293  _GLM_SWIZZLE_TEMPLATE1 \
    -
    294  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
    -
    295  { \
    -
    296  return FUNCTION(a(), b, c); \
    -
    297  } \
    -
    298  _GLM_SWIZZLE_TEMPLATE1 \
    -
    299  GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
    -
    300  { \
    -
    301  return FUNCTION(a, b(), c); \
    -
    302  }
    -
    303 
    -
    304 }//namespace detail
    -
    305 }//namespace glm
    -
    306 
    -
    307 namespace glm
    -
    308 {
    -
    309  namespace detail
    -
    310  {
    -
    311  _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
    -
    312  _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
    -
    313  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
    -
    314  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
    -
    315  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
    -
    316  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
    -
    317  }
    -
    318 
    -
    319  //
    -
    320  // Swizzles are distinct types from the unswizzled type. The below macros will
    -
    321  // provide template specializations for the swizzle types for the given functions
    -
    322  // so that the compiler does not have any ambiguity to choosing how to handle
    -
    323  // the function.
    -
    324  //
    -
    325  // The alternative is to use the operator()() when calling the function in order
    -
    326  // to explicitly convert the swizzled type to the unswizzled type.
    -
    327  //
    -
    328 
    -
    329  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);
    -
    330  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);
    -
    331  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);
    -
    332  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);
    -
    333  //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);
    -
    334 
    -
    335  //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);
    -
    336  //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);
    -
    337  //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step);
    -
    338  //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
    -
    339 }
    -
    340 
    -
    341 #define _GLM_SWIZZLE2_2_MEMBERS(T, P, V, E0,E1) \
    -
    342  struct { _swizzle<2, T, P, V<T, P>, 0,0,-1,-2> E0 ## E0; }; \
    -
    343  struct { _swizzle<2, T, P, V<T, P>, 0,1,-1,-2> E0 ## E1; }; \
    -
    344  struct { _swizzle<2, T, P, V<T, P>, 1,0,-1,-2> E1 ## E0; }; \
    -
    345  struct { _swizzle<2, T, P, V<T, P>, 1,1,-1,-2> E1 ## E1; };
    -
    346 
    -
    347 #define _GLM_SWIZZLE2_3_MEMBERS(T, P, V, E0,E1) \
    -
    348  struct { _swizzle<3,T, P, V<T, P>, 0,0,0,-1> E0 ## E0 ## E0; }; \
    -
    349  struct { _swizzle<3,T, P, V<T, P>, 0,0,1,-1> E0 ## E0 ## E1; }; \
    -
    350  struct { _swizzle<3,T, P, V<T, P>, 0,1,0,-1> E0 ## E1 ## E0; }; \
    -
    351  struct { _swizzle<3,T, P, V<T, P>, 0,1,1,-1> E0 ## E1 ## E1; }; \
    -
    352  struct { _swizzle<3,T, P, V<T, P>, 1,0,0,-1> E1 ## E0 ## E0; }; \
    -
    353  struct { _swizzle<3,T, P, V<T, P>, 1,0,1,-1> E1 ## E0 ## E1; }; \
    -
    354  struct { _swizzle<3,T, P, V<T, P>, 1,1,0,-1> E1 ## E1 ## E0; }; \
    -
    355  struct { _swizzle<3,T, P, V<T, P>, 1,1,1,-1> E1 ## E1 ## E1; };
    -
    356 
    -
    357 #define _GLM_SWIZZLE2_4_MEMBERS(T, P, V, E0,E1) \
    -
    358  struct { _swizzle<4,T, P, V<T, P>, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    -
    359  struct { _swizzle<4,T, P, V<T, P>, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    -
    360  struct { _swizzle<4,T, P, V<T, P>, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    -
    361  struct { _swizzle<4,T, P, V<T, P>, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    -
    362  struct { _swizzle<4,T, P, V<T, P>, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    -
    363  struct { _swizzle<4,T, P, V<T, P>, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    -
    364  struct { _swizzle<4,T, P, V<T, P>, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    -
    365  struct { _swizzle<4,T, P, V<T, P>, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    -
    366  struct { _swizzle<4,T, P, V<T, P>, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    -
    367  struct { _swizzle<4,T, P, V<T, P>, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    -
    368  struct { _swizzle<4,T, P, V<T, P>, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    -
    369  struct { _swizzle<4,T, P, V<T, P>, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    -
    370  struct { _swizzle<4,T, P, V<T, P>, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    -
    371  struct { _swizzle<4,T, P, V<T, P>, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    -
    372  struct { _swizzle<4,T, P, V<T, P>, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    -
    373  struct { _swizzle<4,T, P, V<T, P>, 1,1,1,1> E1 ## E1 ## E1 ## E1; };
    -
    374 
    -
    375 #define _GLM_SWIZZLE3_2_MEMBERS(T, P, V, E0,E1,E2) \
    -
    376  struct { _swizzle<2,T, P, V<T, P>, 0,0,-1,-2> E0 ## E0; }; \
    -
    377  struct { _swizzle<2,T, P, V<T, P>, 0,1,-1,-2> E0 ## E1; }; \
    -
    378  struct { _swizzle<2,T, P, V<T, P>, 0,2,-1,-2> E0 ## E2; }; \
    -
    379  struct { _swizzle<2,T, P, V<T, P>, 1,0,-1,-2> E1 ## E0; }; \
    -
    380  struct { _swizzle<2,T, P, V<T, P>, 1,1,-1,-2> E1 ## E1; }; \
    -
    381  struct { _swizzle<2,T, P, V<T, P>, 1,2,-1,-2> E1 ## E2; }; \
    -
    382  struct { _swizzle<2,T, P, V<T, P>, 2,0,-1,-2> E2 ## E0; }; \
    -
    383  struct { _swizzle<2,T, P, V<T, P>, 2,1,-1,-2> E2 ## E1; }; \
    -
    384  struct { _swizzle<2,T, P, V<T, P>, 2,2,-1,-2> E2 ## E2; };
    -
    385 
    -
    386 #define _GLM_SWIZZLE3_3_MEMBERS(T, P, V ,E0,E1,E2) \
    -
    387  struct { _swizzle<3,T,P, V<T, P>, 0,0,0,-1> E0 ## E0 ## E0; }; \
    -
    388  struct { _swizzle<3,T,P, V<T, P>, 0,0,1,-1> E0 ## E0 ## E1; }; \
    -
    389  struct { _swizzle<3,T,P, V<T, P>, 0,0,2,-1> E0 ## E0 ## E2; }; \
    -
    390  struct { _swizzle<3,T,P, V<T, P>, 0,1,0,-1> E0 ## E1 ## E0; }; \
    -
    391  struct { _swizzle<3,T,P, V<T, P>, 0,1,1,-1> E0 ## E1 ## E1; }; \
    -
    392  struct { _swizzle<3,T,P, V<T, P>, 0,1,2,-1> E0 ## E1 ## E2; }; \
    -
    393  struct { _swizzle<3,T,P, V<T, P>, 0,2,0,-1> E0 ## E2 ## E0; }; \
    -
    394  struct { _swizzle<3,T,P, V<T, P>, 0,2,1,-1> E0 ## E2 ## E1; }; \
    -
    395  struct { _swizzle<3,T,P, V<T, P>, 0,2,2,-1> E0 ## E2 ## E2; }; \
    -
    396  struct { _swizzle<3,T,P, V<T, P>, 1,0,0,-1> E1 ## E0 ## E0; }; \
    -
    397  struct { _swizzle<3,T,P, V<T, P>, 1,0,1,-1> E1 ## E0 ## E1; }; \
    -
    398  struct { _swizzle<3,T,P, V<T, P>, 1,0,2,-1> E1 ## E0 ## E2; }; \
    -
    399  struct { _swizzle<3,T,P, V<T, P>, 1,1,0,-1> E1 ## E1 ## E0; }; \
    -
    400  struct { _swizzle<3,T,P, V<T, P>, 1,1,1,-1> E1 ## E1 ## E1; }; \
    -
    401  struct { _swizzle<3,T,P, V<T, P>, 1,1,2,-1> E1 ## E1 ## E2; }; \
    -
    402  struct { _swizzle<3,T,P, V<T, P>, 1,2,0,-1> E1 ## E2 ## E0; }; \
    -
    403  struct { _swizzle<3,T,P, V<T, P>, 1,2,1,-1> E1 ## E2 ## E1; }; \
    -
    404  struct { _swizzle<3,T,P, V<T, P>, 1,2,2,-1> E1 ## E2 ## E2; }; \
    -
    405  struct { _swizzle<3,T,P, V<T, P>, 2,0,0,-1> E2 ## E0 ## E0; }; \
    -
    406  struct { _swizzle<3,T,P, V<T, P>, 2,0,1,-1> E2 ## E0 ## E1; }; \
    -
    407  struct { _swizzle<3,T,P, V<T, P>, 2,0,2,-1> E2 ## E0 ## E2; }; \
    -
    408  struct { _swizzle<3,T,P, V<T, P>, 2,1,0,-1> E2 ## E1 ## E0; }; \
    -
    409  struct { _swizzle<3,T,P, V<T, P>, 2,1,1,-1> E2 ## E1 ## E1; }; \
    -
    410  struct { _swizzle<3,T,P, V<T, P>, 2,1,2,-1> E2 ## E1 ## E2; }; \
    -
    411  struct { _swizzle<3,T,P, V<T, P>, 2,2,0,-1> E2 ## E2 ## E0; }; \
    -
    412  struct { _swizzle<3,T,P, V<T, P>, 2,2,1,-1> E2 ## E2 ## E1; }; \
    -
    413  struct { _swizzle<3,T,P, V<T, P>, 2,2,2,-1> E2 ## E2 ## E2; };
    -
    414 
    -
    415 #define _GLM_SWIZZLE3_4_MEMBERS(T, P, V, E0,E1,E2) \
    -
    416  struct { _swizzle<4,T, P, V<T, P>, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    -
    417  struct { _swizzle<4,T, P, V<T, P>, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    -
    418  struct { _swizzle<4,T, P, V<T, P>, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
    -
    419  struct { _swizzle<4,T, P, V<T, P>, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    -
    420  struct { _swizzle<4,T, P, V<T, P>, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    -
    421  struct { _swizzle<4,T, P, V<T, P>, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
    -
    422  struct { _swizzle<4,T, P, V<T, P>, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
    -
    423  struct { _swizzle<4,T, P, V<T, P>, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
    -
    424  struct { _swizzle<4,T, P, V<T, P>, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
    -
    425  struct { _swizzle<4,T, P, V<T, P>, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    -
    426  struct { _swizzle<4,T, P, V<T, P>, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    -
    427  struct { _swizzle<4,T, P, V<T, P>, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
    -
    428  struct { _swizzle<4,T, P, V<T, P>, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    -
    429  struct { _swizzle<4,T, P, V<T, P>, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    -
    430  struct { _swizzle<4,T, P, V<T, P>, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
    -
    431  struct { _swizzle<4,T, P, V<T, P>, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
    -
    432  struct { _swizzle<4,T, P, V<T, P>, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
    -
    433  struct { _swizzle<4,T, P, V<T, P>, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
    -
    434  struct { _swizzle<4,T, P, V<T, P>, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
    -
    435  struct { _swizzle<4,T, P, V<T, P>, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
    -
    436  struct { _swizzle<4,T, P, V<T, P>, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
    -
    437  struct { _swizzle<4,T, P, V<T, P>, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
    -
    438  struct { _swizzle<4,T, P, V<T, P>, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
    -
    439  struct { _swizzle<4,T, P, V<T, P>, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
    -
    440  struct { _swizzle<4,T, P, V<T, P>, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
    -
    441  struct { _swizzle<4,T, P, V<T, P>, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
    -
    442  struct { _swizzle<4,T, P, V<T, P>, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
    -
    443  struct { _swizzle<4,T, P, V<T, P>, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    -
    444  struct { _swizzle<4,T, P, V<T, P>, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    -
    445  struct { _swizzle<4,T, P, V<T, P>, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
    -
    446  struct { _swizzle<4,T, P, V<T, P>, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    -
    447  struct { _swizzle<4,T, P, V<T, P>, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    -
    448  struct { _swizzle<4,T, P, V<T, P>, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
    -
    449  struct { _swizzle<4,T, P, V<T, P>, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
    -
    450  struct { _swizzle<4,T, P, V<T, P>, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
    -
    451  struct { _swizzle<4,T, P, V<T, P>, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
    -
    452  struct { _swizzle<4,T, P, V<T, P>, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    -
    453  struct { _swizzle<4,T, P, V<T, P>, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    -
    454  struct { _swizzle<4,T, P, V<T, P>, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
    -
    455  struct { _swizzle<4,T, P, V<T, P>, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    -
    456  struct { _swizzle<4,T, P, V<T, P>, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
    -
    457  struct { _swizzle<4,T, P, V<T, P>, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
    -
    458  struct { _swizzle<4,T, P, V<T, P>, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
    -
    459  struct { _swizzle<4,T, P, V<T, P>, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
    -
    460  struct { _swizzle<4,T, P, V<T, P>, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
    -
    461  struct { _swizzle<4,T, P, V<T, P>, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
    -
    462  struct { _swizzle<4,T, P, V<T, P>, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
    -
    463  struct { _swizzle<4,T, P, V<T, P>, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
    -
    464  struct { _swizzle<4,T, P, V<T, P>, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
    -
    465  struct { _swizzle<4,T, P, V<T, P>, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
    -
    466  struct { _swizzle<4,T, P, V<T, P>, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
    -
    467  struct { _swizzle<4,T, P, V<T, P>, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
    -
    468  struct { _swizzle<4,T, P, V<T, P>, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
    -
    469  struct { _swizzle<4,T, P, V<T, P>, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
    -
    470  struct { _swizzle<4,T, P, V<T, P>, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
    -
    471  struct { _swizzle<4,T, P, V<T, P>, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
    -
    472  struct { _swizzle<4,T, P, V<T, P>, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
    -
    473  struct { _swizzle<4,T, P, V<T, P>, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
    -
    474  struct { _swizzle<4,T, P, V<T, P>, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
    -
    475  struct { _swizzle<4,T, P, V<T, P>, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
    -
    476  struct { _swizzle<4,T, P, V<T, P>, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
    -
    477  struct { _swizzle<4,T, P, V<T, P>, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
    -
    478  struct { _swizzle<4,T, P, V<T, P>, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
    -
    479  struct { _swizzle<4,T, P, V<T, P>, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
    -
    480  struct { _swizzle<4,T, P, V<T, P>, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
    -
    481  struct { _swizzle<4,T, P, V<T, P>, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
    -
    482  struct { _swizzle<4,T, P, V<T, P>, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
    -
    483  struct { _swizzle<4,T, P, V<T, P>, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
    -
    484  struct { _swizzle<4,T, P, V<T, P>, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
    -
    485  struct { _swizzle<4,T, P, V<T, P>, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
    -
    486  struct { _swizzle<4,T, P, V<T, P>, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
    -
    487  struct { _swizzle<4,T, P, V<T, P>, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
    -
    488  struct { _swizzle<4,T, P, V<T, P>, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
    -
    489  struct { _swizzle<4,T, P, V<T, P>, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
    -
    490  struct { _swizzle<4,T, P, V<T, P>, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
    -
    491  struct { _swizzle<4,T, P, V<T, P>, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
    -
    492  struct { _swizzle<4,T, P, V<T, P>, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
    -
    493  struct { _swizzle<4,T, P, V<T, P>, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
    -
    494  struct { _swizzle<4,T, P, V<T, P>, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
    -
    495  struct { _swizzle<4,T, P, V<T, P>, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
    -
    496  struct { _swizzle<4,T, P, V<T, P>, 2,2,2,2> E2 ## E2 ## E2 ## E2; };
    -
    497 
    -
    498 #define _GLM_SWIZZLE4_2_MEMBERS(T, P, V, E0,E1,E2,E3) \
    -
    499  struct { _swizzle<2,T, P, V<T, P>, 0,0,-1,-2> E0 ## E0; }; \
    -
    500  struct { _swizzle<2,T, P, V<T, P>, 0,1,-1,-2> E0 ## E1; }; \
    -
    501  struct { _swizzle<2,T, P, V<T, P>, 0,2,-1,-2> E0 ## E2; }; \
    -
    502  struct { _swizzle<2,T, P, V<T, P>, 0,3,-1,-2> E0 ## E3; }; \
    -
    503  struct { _swizzle<2,T, P, V<T, P>, 1,0,-1,-2> E1 ## E0; }; \
    -
    504  struct { _swizzle<2,T, P, V<T, P>, 1,1,-1,-2> E1 ## E1; }; \
    -
    505  struct { _swizzle<2,T, P, V<T, P>, 1,2,-1,-2> E1 ## E2; }; \
    -
    506  struct { _swizzle<2,T, P, V<T, P>, 1,3,-1,-2> E1 ## E3; }; \
    -
    507  struct { _swizzle<2,T, P, V<T, P>, 2,0,-1,-2> E2 ## E0; }; \
    -
    508  struct { _swizzle<2,T, P, V<T, P>, 2,1,-1,-2> E2 ## E1; }; \
    -
    509  struct { _swizzle<2,T, P, V<T, P>, 2,2,-1,-2> E2 ## E2; }; \
    -
    510  struct { _swizzle<2,T, P, V<T, P>, 2,3,-1,-2> E2 ## E3; }; \
    -
    511  struct { _swizzle<2,T, P, V<T, P>, 3,0,-1,-2> E3 ## E0; }; \
    -
    512  struct { _swizzle<2,T, P, V<T, P>, 3,1,-1,-2> E3 ## E1; }; \
    -
    513  struct { _swizzle<2,T, P, V<T, P>, 3,2,-1,-2> E3 ## E2; }; \
    -
    514  struct { _swizzle<2,T, P, V<T, P>, 3,3,-1,-2> E3 ## E3; };
    -
    515 
    -
    516 #define _GLM_SWIZZLE4_3_MEMBERS(T,P, V, E0,E1,E2,E3) \
    -
    517  struct { _swizzle<3,T,P, V<T, P>, 0,0,0,-1> E0 ## E0 ## E0; }; \
    -
    518  struct { _swizzle<3,T,P, V<T, P>, 0,0,1,-1> E0 ## E0 ## E1; }; \
    -
    519  struct { _swizzle<3,T,P, V<T, P>, 0,0,2,-1> E0 ## E0 ## E2; }; \
    -
    520  struct { _swizzle<3,T,P, V<T, P>, 0,0,3,-1> E0 ## E0 ## E3; }; \
    -
    521  struct { _swizzle<3,T,P, V<T, P>, 0,1,0,-1> E0 ## E1 ## E0; }; \
    -
    522  struct { _swizzle<3,T,P, V<T, P>, 0,1,1,-1> E0 ## E1 ## E1; }; \
    -
    523  struct { _swizzle<3,T,P, V<T, P>, 0,1,2,-1> E0 ## E1 ## E2; }; \
    -
    524  struct { _swizzle<3,T,P, V<T, P>, 0,1,3,-1> E0 ## E1 ## E3; }; \
    -
    525  struct { _swizzle<3,T,P, V<T, P>, 0,2,0,-1> E0 ## E2 ## E0; }; \
    -
    526  struct { _swizzle<3,T,P, V<T, P>, 0,2,1,-1> E0 ## E2 ## E1; }; \
    -
    527  struct { _swizzle<3,T,P, V<T, P>, 0,2,2,-1> E0 ## E2 ## E2; }; \
    -
    528  struct { _swizzle<3,T,P, V<T, P>, 0,2,3,-1> E0 ## E2 ## E3; }; \
    -
    529  struct { _swizzle<3,T,P, V<T, P>, 0,3,0,-1> E0 ## E3 ## E0; }; \
    -
    530  struct { _swizzle<3,T,P, V<T, P>, 0,3,1,-1> E0 ## E3 ## E1; }; \
    -
    531  struct { _swizzle<3,T,P, V<T, P>, 0,3,2,-1> E0 ## E3 ## E2; }; \
    -
    532  struct { _swizzle<3,T,P, V<T, P>, 0,3,3,-1> E0 ## E3 ## E3; }; \
    -
    533  struct { _swizzle<3,T,P, V<T, P>, 1,0,0,-1> E1 ## E0 ## E0; }; \
    -
    534  struct { _swizzle<3,T,P, V<T, P>, 1,0,1,-1> E1 ## E0 ## E1; }; \
    -
    535  struct { _swizzle<3,T,P, V<T, P>, 1,0,2,-1> E1 ## E0 ## E2; }; \
    -
    536  struct { _swizzle<3,T,P, V<T, P>, 1,0,3,-1> E1 ## E0 ## E3; }; \
    -
    537  struct { _swizzle<3,T,P, V<T, P>, 1,1,0,-1> E1 ## E1 ## E0; }; \
    -
    538  struct { _swizzle<3,T,P, V<T, P>, 1,1,1,-1> E1 ## E1 ## E1; }; \
    -
    539  struct { _swizzle<3,T,P, V<T, P>, 1,1,2,-1> E1 ## E1 ## E2; }; \
    -
    540  struct { _swizzle<3,T,P, V<T, P>, 1,1,3,-1> E1 ## E1 ## E3; }; \
    -
    541  struct { _swizzle<3,T,P, V<T, P>, 1,2,0,-1> E1 ## E2 ## E0; }; \
    -
    542  struct { _swizzle<3,T,P, V<T, P>, 1,2,1,-1> E1 ## E2 ## E1; }; \
    -
    543  struct { _swizzle<3,T,P, V<T, P>, 1,2,2,-1> E1 ## E2 ## E2; }; \
    -
    544  struct { _swizzle<3,T,P, V<T, P>, 1,2,3,-1> E1 ## E2 ## E3; }; \
    -
    545  struct { _swizzle<3,T,P, V<T, P>, 1,3,0,-1> E1 ## E3 ## E0; }; \
    -
    546  struct { _swizzle<3,T,P, V<T, P>, 1,3,1,-1> E1 ## E3 ## E1; }; \
    -
    547  struct { _swizzle<3,T,P, V<T, P>, 1,3,2,-1> E1 ## E3 ## E2; }; \
    -
    548  struct { _swizzle<3,T,P, V<T, P>, 1,3,3,-1> E1 ## E3 ## E3; }; \
    -
    549  struct { _swizzle<3,T,P, V<T, P>, 2,0,0,-1> E2 ## E0 ## E0; }; \
    -
    550  struct { _swizzle<3,T,P, V<T, P>, 2,0,1,-1> E2 ## E0 ## E1; }; \
    -
    551  struct { _swizzle<3,T,P, V<T, P>, 2,0,2,-1> E2 ## E0 ## E2; }; \
    -
    552  struct { _swizzle<3,T,P, V<T, P>, 2,0,3,-1> E2 ## E0 ## E3; }; \
    -
    553  struct { _swizzle<3,T,P, V<T, P>, 2,1,0,-1> E2 ## E1 ## E0; }; \
    -
    554  struct { _swizzle<3,T,P, V<T, P>, 2,1,1,-1> E2 ## E1 ## E1; }; \
    -
    555  struct { _swizzle<3,T,P, V<T, P>, 2,1,2,-1> E2 ## E1 ## E2; }; \
    -
    556  struct { _swizzle<3,T,P, V<T, P>, 2,1,3,-1> E2 ## E1 ## E3; }; \
    -
    557  struct { _swizzle<3,T,P, V<T, P>, 2,2,0,-1> E2 ## E2 ## E0; }; \
    -
    558  struct { _swizzle<3,T,P, V<T, P>, 2,2,1,-1> E2 ## E2 ## E1; }; \
    -
    559  struct { _swizzle<3,T,P, V<T, P>, 2,2,2,-1> E2 ## E2 ## E2; }; \
    -
    560  struct { _swizzle<3,T,P, V<T, P>, 2,2,3,-1> E2 ## E2 ## E3; }; \
    -
    561  struct { _swizzle<3,T,P, V<T, P>, 2,3,0,-1> E2 ## E3 ## E0; }; \
    -
    562  struct { _swizzle<3,T,P, V<T, P>, 2,3,1,-1> E2 ## E3 ## E1; }; \
    -
    563  struct { _swizzle<3,T,P, V<T, P>, 2,3,2,-1> E2 ## E3 ## E2; }; \
    -
    564  struct { _swizzle<3,T,P, V<T, P>, 2,3,3,-1> E2 ## E3 ## E3; }; \
    -
    565  struct { _swizzle<3,T,P, V<T, P>, 3,0,0,-1> E3 ## E0 ## E0; }; \
    -
    566  struct { _swizzle<3,T,P, V<T, P>, 3,0,1,-1> E3 ## E0 ## E1; }; \
    -
    567  struct { _swizzle<3,T,P, V<T, P>, 3,0,2,-1> E3 ## E0 ## E2; }; \
    -
    568  struct { _swizzle<3,T,P, V<T, P>, 3,0,3,-1> E3 ## E0 ## E3; }; \
    -
    569  struct { _swizzle<3,T,P, V<T, P>, 3,1,0,-1> E3 ## E1 ## E0; }; \
    -
    570  struct { _swizzle<3,T,P, V<T, P>, 3,1,1,-1> E3 ## E1 ## E1; }; \
    -
    571  struct { _swizzle<3,T,P, V<T, P>, 3,1,2,-1> E3 ## E1 ## E2; }; \
    -
    572  struct { _swizzle<3,T,P, V<T, P>, 3,1,3,-1> E3 ## E1 ## E3; }; \
    -
    573  struct { _swizzle<3,T,P, V<T, P>, 3,2,0,-1> E3 ## E2 ## E0; }; \
    -
    574  struct { _swizzle<3,T,P, V<T, P>, 3,2,1,-1> E3 ## E2 ## E1; }; \
    -
    575  struct { _swizzle<3,T,P, V<T, P>, 3,2,2,-1> E3 ## E2 ## E2; }; \
    -
    576  struct { _swizzle<3,T,P, V<T, P>, 3,2,3,-1> E3 ## E2 ## E3; }; \
    -
    577  struct { _swizzle<3,T,P, V<T, P>, 3,3,0,-1> E3 ## E3 ## E0; }; \
    -
    578  struct { _swizzle<3,T,P, V<T, P>, 3,3,1,-1> E3 ## E3 ## E1; }; \
    -
    579  struct { _swizzle<3,T,P, V<T, P>, 3,3,2,-1> E3 ## E3 ## E2; }; \
    -
    580  struct { _swizzle<3,T,P, V<T, P>, 3,3,3,-1> E3 ## E3 ## E3; };
    -
    581 
    -
    582 #define _GLM_SWIZZLE4_4_MEMBERS(T, P, V, E0,E1,E2,E3) \
    -
    583  struct { _swizzle<4, T, P, V<T, P>, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
    -
    584  struct { _swizzle<4, T, P, V<T, P>, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
    -
    585  struct { _swizzle<4, T, P, V<T, P>, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
    -
    586  struct { _swizzle<4, T, P, V<T, P>, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
    -
    587  struct { _swizzle<4, T, P, V<T, P>, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
    -
    588  struct { _swizzle<4, T, P, V<T, P>, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
    -
    589  struct { _swizzle<4, T, P, V<T, P>, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
    -
    590  struct { _swizzle<4, T, P, V<T, P>, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
    -
    591  struct { _swizzle<4, T, P, V<T, P>, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
    -
    592  struct { _swizzle<4, T, P, V<T, P>, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
    -
    593  struct { _swizzle<4, T, P, V<T, P>, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
    -
    594  struct { _swizzle<4, T, P, V<T, P>, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
    -
    595  struct { _swizzle<4, T, P, V<T, P>, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
    -
    596  struct { _swizzle<4, T, P, V<T, P>, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
    -
    597  struct { _swizzle<4, T, P, V<T, P>, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
    -
    598  struct { _swizzle<4, T, P, V<T, P>, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
    -
    599  struct { _swizzle<4, T, P, V<T, P>, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
    -
    600  struct { _swizzle<4, T, P, V<T, P>, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
    -
    601  struct { _swizzle<4, T, P, V<T, P>, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
    -
    602  struct { _swizzle<4, T, P, V<T, P>, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
    -
    603  struct { _swizzle<4, T, P, V<T, P>, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
    -
    604  struct { _swizzle<4, T, P, V<T, P>, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
    -
    605  struct { _swizzle<4, T, P, V<T, P>, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
    -
    606  struct { _swizzle<4, T, P, V<T, P>, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
    -
    607  struct { _swizzle<4, T, P, V<T, P>, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
    -
    608  struct { _swizzle<4, T, P, V<T, P>, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
    -
    609  struct { _swizzle<4, T, P, V<T, P>, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
    -
    610  struct { _swizzle<4, T, P, V<T, P>, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
    -
    611  struct { _swizzle<4, T, P, V<T, P>, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
    -
    612  struct { _swizzle<4, T, P, V<T, P>, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
    -
    613  struct { _swizzle<4, T, P, V<T, P>, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
    -
    614  struct { _swizzle<4, T, P, V<T, P>, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
    -
    615  struct { _swizzle<4, T, P, V<T, P>, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
    -
    616  struct { _swizzle<4, T, P, V<T, P>, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
    -
    617  struct { _swizzle<4, T, P, V<T, P>, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
    -
    618  struct { _swizzle<4, T, P, V<T, P>, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
    -
    619  struct { _swizzle<4, T, P, V<T, P>, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
    -
    620  struct { _swizzle<4, T, P, V<T, P>, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
    -
    621  struct { _swizzle<4, T, P, V<T, P>, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
    -
    622  struct { _swizzle<4, T, P, V<T, P>, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
    -
    623  struct { _swizzle<4, T, P, V<T, P>, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
    -
    624  struct { _swizzle<4, T, P, V<T, P>, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
    -
    625  struct { _swizzle<4, T, P, V<T, P>, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
    -
    626  struct { _swizzle<4, T, P, V<T, P>, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
    -
    627  struct { _swizzle<4, T, P, V<T, P>, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
    -
    628  struct { _swizzle<4, T, P, V<T, P>, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
    -
    629  struct { _swizzle<4, T, P, V<T, P>, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
    -
    630  struct { _swizzle<4, T, P, V<T, P>, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
    -
    631  struct { _swizzle<4, T, P, V<T, P>, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \
    -
    632  struct { _swizzle<4, T, P, V<T, P>, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \
    -
    633  struct { _swizzle<4, T, P, V<T, P>, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \
    -
    634  struct { _swizzle<4, T, P, V<T, P>, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \
    -
    635  struct { _swizzle<4, T, P, V<T, P>, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \
    -
    636  struct { _swizzle<4, T, P, V<T, P>, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \
    -
    637  struct { _swizzle<4, T, P, V<T, P>, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \
    -
    638  struct { _swizzle<4, T, P, V<T, P>, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \
    -
    639  struct { _swizzle<4, T, P, V<T, P>, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \
    -
    640  struct { _swizzle<4, T, P, V<T, P>, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \
    -
    641  struct { _swizzle<4, T, P, V<T, P>, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \
    -
    642  struct { _swizzle<4, T, P, V<T, P>, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \
    -
    643  struct { _swizzle<4, T, P, V<T, P>, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \
    -
    644  struct { _swizzle<4, T, P, V<T, P>, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \
    -
    645  struct { _swizzle<4, T, P, V<T, P>, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \
    -
    646  struct { _swizzle<4, T, P, V<T, P>, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \
    -
    647  struct { _swizzle<4, T, P, V<T, P>, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
    -
    648  struct { _swizzle<4, T, P, V<T, P>, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
    -
    649  struct { _swizzle<4, T, P, V<T, P>, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
    -
    650  struct { _swizzle<4, T, P, V<T, P>, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
    -
    651  struct { _swizzle<4, T, P, V<T, P>, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
    -
    652  struct { _swizzle<4, T, P, V<T, P>, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
    -
    653  struct { _swizzle<4, T, P, V<T, P>, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
    -
    654  struct { _swizzle<4, T, P, V<T, P>, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
    -
    655  struct { _swizzle<4, T, P, V<T, P>, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
    -
    656  struct { _swizzle<4, T, P, V<T, P>, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
    -
    657  struct { _swizzle<4, T, P, V<T, P>, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
    -
    658  struct { _swizzle<4, T, P, V<T, P>, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
    -
    659  struct { _swizzle<4, T, P, V<T, P>, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
    -
    660  struct { _swizzle<4, T, P, V<T, P>, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
    -
    661  struct { _swizzle<4, T, P, V<T, P>, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
    -
    662  struct { _swizzle<4, T, P, V<T, P>, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
    -
    663  struct { _swizzle<4, T, P, V<T, P>, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
    -
    664  struct { _swizzle<4, T, P, V<T, P>, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
    -
    665  struct { _swizzle<4, T, P, V<T, P>, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
    -
    666  struct { _swizzle<4, T, P, V<T, P>, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
    -
    667  struct { _swizzle<4, T, P, V<T, P>, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
    -
    668  struct { _swizzle<4, T, P, V<T, P>, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
    -
    669  struct { _swizzle<4, T, P, V<T, P>, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
    -
    670  struct { _swizzle<4, T, P, V<T, P>, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
    -
    671  struct { _swizzle<4, T, P, V<T, P>, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
    -
    672  struct { _swizzle<4, T, P, V<T, P>, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
    -
    673  struct { _swizzle<4, T, P, V<T, P>, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
    -
    674  struct { _swizzle<4, T, P, V<T, P>, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
    -
    675  struct { _swizzle<4, T, P, V<T, P>, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
    -
    676  struct { _swizzle<4, T, P, V<T, P>, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
    -
    677  struct { _swizzle<4, T, P, V<T, P>, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
    -
    678  struct { _swizzle<4, T, P, V<T, P>, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
    -
    679  struct { _swizzle<4, T, P, V<T, P>, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
    -
    680  struct { _swizzle<4, T, P, V<T, P>, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
    -
    681  struct { _swizzle<4, T, P, V<T, P>, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
    -
    682  struct { _swizzle<4, T, P, V<T, P>, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
    -
    683  struct { _swizzle<4, T, P, V<T, P>, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
    -
    684  struct { _swizzle<4, T, P, V<T, P>, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
    -
    685  struct { _swizzle<4, T, P, V<T, P>, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
    -
    686  struct { _swizzle<4, T, P, V<T, P>, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
    -
    687  struct { _swizzle<4, T, P, V<T, P>, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
    -
    688  struct { _swizzle<4, T, P, V<T, P>, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
    -
    689  struct { _swizzle<4, T, P, V<T, P>, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
    -
    690  struct { _swizzle<4, T, P, V<T, P>, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
    -
    691  struct { _swizzle<4, T, P, V<T, P>, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
    -
    692  struct { _swizzle<4, T, P, V<T, P>, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
    -
    693  struct { _swizzle<4, T, P, V<T, P>, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
    -
    694  struct { _swizzle<4, T, P, V<T, P>, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
    -
    695  struct { _swizzle<4, T, P, V<T, P>, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
    -
    696  struct { _swizzle<4, T, P, V<T, P>, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
    -
    697  struct { _swizzle<4, T, P, V<T, P>, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
    -
    698  struct { _swizzle<4, T, P, V<T, P>, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
    -
    699  struct { _swizzle<4, T, P, V<T, P>, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
    -
    700  struct { _swizzle<4, T, P, V<T, P>, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
    -
    701  struct { _swizzle<4, T, P, V<T, P>, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
    -
    702  struct { _swizzle<4, T, P, V<T, P>, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
    -
    703  struct { _swizzle<4, T, P, V<T, P>, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
    -
    704  struct { _swizzle<4, T, P, V<T, P>, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
    -
    705  struct { _swizzle<4, T, P, V<T, P>, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
    -
    706  struct { _swizzle<4, T, P, V<T, P>, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
    -
    707  struct { _swizzle<4, T, P, V<T, P>, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
    -
    708  struct { _swizzle<4, T, P, V<T, P>, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
    -
    709  struct { _swizzle<4, T, P, V<T, P>, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
    -
    710  struct { _swizzle<4, T, P, V<T, P>, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
    -
    711  struct { _swizzle<4, T, P, V<T, P>, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
    -
    712  struct { _swizzle<4, T, P, V<T, P>, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
    -
    713  struct { _swizzle<4, T, P, V<T, P>, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
    -
    714  struct { _swizzle<4, T, P, V<T, P>, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
    -
    715  struct { _swizzle<4, T, P, V<T, P>, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
    -
    716  struct { _swizzle<4, T, P, V<T, P>, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
    -
    717  struct { _swizzle<4, T, P, V<T, P>, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
    -
    718  struct { _swizzle<4, T, P, V<T, P>, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
    -
    719  struct { _swizzle<4, T, P, V<T, P>, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
    -
    720  struct { _swizzle<4, T, P, V<T, P>, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
    -
    721  struct { _swizzle<4, T, P, V<T, P>, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
    -
    722  struct { _swizzle<4, T, P, V<T, P>, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
    -
    723  struct { _swizzle<4, T, P, V<T, P>, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
    -
    724  struct { _swizzle<4, T, P, V<T, P>, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
    -
    725  struct { _swizzle<4, T, P, V<T, P>, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
    -
    726  struct { _swizzle<4, T, P, V<T, P>, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
    -
    727  struct { _swizzle<4, T, P, V<T, P>, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
    -
    728  struct { _swizzle<4, T, P, V<T, P>, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
    -
    729  struct { _swizzle<4, T, P, V<T, P>, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
    -
    730  struct { _swizzle<4, T, P, V<T, P>, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
    -
    731  struct { _swizzle<4, T, P, V<T, P>, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
    -
    732  struct { _swizzle<4, T, P, V<T, P>, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
    -
    733  struct { _swizzle<4, T, P, V<T, P>, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
    -
    734  struct { _swizzle<4, T, P, V<T, P>, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
    -
    735  struct { _swizzle<4, T, P, V<T, P>, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
    -
    736  struct { _swizzle<4, T, P, V<T, P>, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
    -
    737  struct { _swizzle<4, T, P, V<T, P>, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
    -
    738  struct { _swizzle<4, T, P, V<T, P>, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
    -
    739  struct { _swizzle<4, T, P, V<T, P>, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
    -
    740  struct { _swizzle<4, T, P, V<T, P>, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
    -
    741  struct { _swizzle<4, T, P, V<T, P>, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
    -
    742  struct { _swizzle<4, T, P, V<T, P>, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
    -
    743  struct { _swizzle<4, T, P, V<T, P>, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
    -
    744  struct { _swizzle<4, T, P, V<T, P>, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
    -
    745  struct { _swizzle<4, T, P, V<T, P>, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
    -
    746  struct { _swizzle<4, T, P, V<T, P>, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
    -
    747  struct { _swizzle<4, T, P, V<T, P>, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
    -
    748  struct { _swizzle<4, T, P, V<T, P>, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
    -
    749  struct { _swizzle<4, T, P, V<T, P>, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
    -
    750  struct { _swizzle<4, T, P, V<T, P>, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
    -
    751  struct { _swizzle<4, T, P, V<T, P>, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
    -
    752  struct { _swizzle<4, T, P, V<T, P>, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
    -
    753  struct { _swizzle<4, T, P, V<T, P>, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
    -
    754  struct { _swizzle<4, T, P, V<T, P>, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
    -
    755  struct { _swizzle<4, T, P, V<T, P>, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
    -
    756  struct { _swizzle<4, T, P, V<T, P>, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
    -
    757  struct { _swizzle<4, T, P, V<T, P>, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
    -
    758  struct { _swizzle<4, T, P, V<T, P>, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
    -
    759  struct { _swizzle<4, T, P, V<T, P>, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
    -
    760  struct { _swizzle<4, T, P, V<T, P>, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
    -
    761  struct { _swizzle<4, T, P, V<T, P>, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
    -
    762  struct { _swizzle<4, T, P, V<T, P>, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
    -
    763  struct { _swizzle<4, T, P, V<T, P>, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
    -
    764  struct { _swizzle<4, T, P, V<T, P>, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
    -
    765  struct { _swizzle<4, T, P, V<T, P>, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
    -
    766  struct { _swizzle<4, T, P, V<T, P>, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
    -
    767  struct { _swizzle<4, T, P, V<T, P>, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
    -
    768  struct { _swizzle<4, T, P, V<T, P>, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
    -
    769  struct { _swizzle<4, T, P, V<T, P>, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
    -
    770  struct { _swizzle<4, T, P, V<T, P>, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
    -
    771  struct { _swizzle<4, T, P, V<T, P>, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
    -
    772  struct { _swizzle<4, T, P, V<T, P>, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
    -
    773  struct { _swizzle<4, T, P, V<T, P>, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
    -
    774  struct { _swizzle<4, T, P, V<T, P>, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
    -
    775  struct { _swizzle<4, T, P, V<T, P>, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
    -
    776  struct { _swizzle<4, T, P, V<T, P>, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
    -
    777  struct { _swizzle<4, T, P, V<T, P>, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
    -
    778  struct { _swizzle<4, T, P, V<T, P>, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
    -
    779  struct { _swizzle<4, T, P, V<T, P>, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
    -
    780  struct { _swizzle<4, T, P, V<T, P>, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
    -
    781  struct { _swizzle<4, T, P, V<T, P>, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
    -
    782  struct { _swizzle<4, T, P, V<T, P>, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
    -
    783  struct { _swizzle<4, T, P, V<T, P>, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
    -
    784  struct { _swizzle<4, T, P, V<T, P>, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
    -
    785  struct { _swizzle<4, T, P, V<T, P>, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
    -
    786  struct { _swizzle<4, T, P, V<T, P>, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
    -
    787  struct { _swizzle<4, T, P, V<T, P>, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
    -
    788  struct { _swizzle<4, T, P, V<T, P>, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
    -
    789  struct { _swizzle<4, T, P, V<T, P>, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
    -
    790  struct { _swizzle<4, T, P, V<T, P>, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
    -
    791  struct { _swizzle<4, T, P, V<T, P>, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
    -
    792  struct { _swizzle<4, T, P, V<T, P>, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
    -
    793  struct { _swizzle<4, T, P, V<T, P>, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
    -
    794  struct { _swizzle<4, T, P, V<T, P>, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
    -
    795  struct { _swizzle<4, T, P, V<T, P>, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
    -
    796  struct { _swizzle<4, T, P, V<T, P>, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
    -
    797  struct { _swizzle<4, T, P, V<T, P>, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
    -
    798  struct { _swizzle<4, T, P, V<T, P>, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
    -
    799  struct { _swizzle<4, T, P, V<T, P>, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
    -
    800  struct { _swizzle<4, T, P, V<T, P>, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
    -
    801  struct { _swizzle<4, T, P, V<T, P>, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
    -
    802  struct { _swizzle<4, T, P, V<T, P>, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
    -
    803  struct { _swizzle<4, T, P, V<T, P>, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
    -
    804  struct { _swizzle<4, T, P, V<T, P>, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
    -
    805  struct { _swizzle<4, T, P, V<T, P>, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
    -
    806  struct { _swizzle<4, T, P, V<T, P>, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
    -
    807  struct { _swizzle<4, T, P, V<T, P>, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
    -
    808  struct { _swizzle<4, T, P, V<T, P>, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
    -
    809  struct { _swizzle<4, T, P, V<T, P>, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
    -
    810  struct { _swizzle<4, T, P, V<T, P>, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
    -
    811  struct { _swizzle<4, T, P, V<T, P>, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
    -
    812  struct { _swizzle<4, T, P, V<T, P>, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
    -
    813  struct { _swizzle<4, T, P, V<T, P>, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
    -
    814  struct { _swizzle<4, T, P, V<T, P>, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
    -
    815  struct { _swizzle<4, T, P, V<T, P>, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
    -
    816  struct { _swizzle<4, T, P, V<T, P>, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
    -
    817  struct { _swizzle<4, T, P, V<T, P>, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
    -
    818  struct { _swizzle<4, T, P, V<T, P>, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
    -
    819  struct { _swizzle<4, T, P, V<T, P>, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
    -
    820  struct { _swizzle<4, T, P, V<T, P>, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
    -
    821  struct { _swizzle<4, T, P, V<T, P>, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
    -
    822  struct { _swizzle<4, T, P, V<T, P>, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
    -
    823  struct { _swizzle<4, T, P, V<T, P>, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
    -
    824  struct { _swizzle<4, T, P, V<T, P>, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
    -
    825  struct { _swizzle<4, T, P, V<T, P>, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
    -
    826  struct { _swizzle<4, T, P, V<T, P>, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
    -
    827  struct { _swizzle<4, T, P, V<T, P>, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
    -
    828  struct { _swizzle<4, T, P, V<T, P>, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
    -
    829  struct { _swizzle<4, T, P, V<T, P>, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
    -
    830  struct { _swizzle<4, T, P, V<T, P>, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
    -
    831  struct { _swizzle<4, T, P, V<T, P>, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
    -
    832  struct { _swizzle<4, T, P, V<T, P>, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
    -
    833  struct { _swizzle<4, T, P, V<T, P>, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
    -
    834  struct { _swizzle<4, T, P, V<T, P>, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
    -
    835  struct { _swizzle<4, T, P, V<T, P>, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
    -
    836  struct { _swizzle<4, T, P, V<T, P>, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
    -
    837  struct { _swizzle<4, T, P, V<T, P>, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
    -
    838  struct { _swizzle<4, T, P, V<T, P>, 3,3,3,3> E3 ## E3 ## E3 ## E3; };
    -
    839 
    -
    840 #endif//glm_core_swizzle
    -
    GLM_FUNC_DECL genType e()
    Return e constant.
    +
    100 } //namespace glm
    +
    101 
    +
    102 
    +
    103 #include "bit.inl"
    +
    104 
    +
    GLM_FUNC_DECL vecType< T, P > powerOfTwoNearest(vecType< T, P > const &value)
    Return the power of two number which value is the closet to the input value.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vecType< T, P > highestBitValue(vecType< T, P > const &value)
    Find the highest bit set to 1 in a integer variable and return its value.
    +
    GLM_FUNC_DECL vecType< T, P > powerOfTwoAbove(vecType< T, P > const &value)
    Return the power of two number which value is just higher the input value.
    +
    GLM_FUNC_DECL vecType< T, P > powerOfTwoBelow(vecType< T, P > const &value)
    Return the power of two number which value is just lower the input value.
    diff --git a/doc/api/a00009.html b/doc/api/a00009.html new file mode 100644 index 00000000..e4f513d1 --- /dev/null +++ b/doc/api/a00009.html @@ -0,0 +1,143 @@ + + + + + + +0.9.6: bitfield.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    bitfield.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldFillOne (genIUType Value, int FirstBit, int BitCount)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldFillOne (vecType< T, P > const &Value, int FirstBit, int BitCount)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldFillZero (genIUType Value, int FirstBit, int BitCount)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldFillZero (vecType< T, P > const &Value, int FirstBit, int BitCount)
     
    GLM_FUNC_DECL int16 bitfieldInterleave (int8 x, int8 y)
     
    GLM_FUNC_DECL uint16 bitfieldInterleave (uint8 x, uint8 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int16 x, int16 y)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint16 x, uint16 y)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y, int32 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y, uint32 z)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z, int8 w)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z, uint8 w)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z, int16 w)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z, uint16 w)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldRotateLeft (genIUType In, int Shift)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldRotateLeft (vecType< T, P > const &In, int Shift)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldRotateRight (genIUType In, int Shift)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldRotateRight (vecType< T, P > const &In, int Shift)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType mask (genIUType Bits)
     
    template<typename T , precision P, template< typename, precision > class vecIUType>
    GLM_FUNC_DECL vecIUType< T, P > mask (vecIUType< T, P > const &v)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTC_bitfield

    +
    Date
    2014-10-25 / 2014-10-25
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTC_bitfield (dependence)
    + +

    Definition in file bitfield.hpp.

    +
    + + + + diff --git a/doc/api/a00009_source.html b/doc/api/a00009_source.html index 6f7e5dd4..96b92eeb 100644 --- a/doc/api/a00009_source.html +++ b/doc/api/a00009_source.html @@ -3,8 +3,8 @@ - -GLM: _swizzle_func.hpp Source File + +0.9.6: bitfield.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,717 +41,109 @@
    -
    _swizzle_func.hpp
    +
    bitfield.hpp
    -
    1 
    -
    29 #ifndef glm_core_swizzle_func
    -
    30 #define glm_core_swizzle_func
    -
    31 
    -
    32 #define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
    -
    33  SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B() CONST \
    -
    34  { \
    -
    35  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \
    -
    36  }
    -
    37 
    -
    38 #define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
    -
    39  SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C() CONST \
    -
    40  { \
    -
    41  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \
    -
    42  }
    -
    43 
    -
    44 #define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
    -
    45  SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C ## D() CONST \
    -
    46  { \
    -
    47  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \
    -
    48  }
    -
    49 
    -
    50 #define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
    -
    51  template <typename TMPL_TYPE> \
    -
    52  SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B() CONST \
    -
    53  { \
    -
    54  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \
    -
    55  }
    -
    56 
    -
    57 #define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
    -
    58  template <typename TMPL_TYPE> \
    -
    59  SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C() CONST \
    -
    60  { \
    -
    61  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \
    -
    62  }
    -
    63 
    -
    64 #define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
    -
    65  template <typename TMPL_TYPE> \
    -
    66  SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C ## D() CONST \
    -
    67  { \
    -
    68  return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \
    -
    69  }
    -
    70 
    -
    71 #define GLM_MUTABLE
    -
    72 
    -
    73 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    -
    74  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    -
    75  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A)
    -
    76 
    -
    77 #define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \
    -
    78  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \
    -
    79  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \
    -
    80  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t)
    -
    81 
    -
    82 //GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2)
    -
    83 
    -
    84 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -
    85  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    -
    86  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
    -
    87  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
    -
    88  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
    -
    89  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
    -
    90  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B)
    -
    91 
    -
    92 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -
    93  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \
    -
    94  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \
    -
    95  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \
    -
    96  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \
    -
    97  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \
    -
    98  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A)
    -
    99 
    -
    100 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    -
    101  GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    -
    102  GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C)
    -
    103 
    -
    104 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \
    -
    105  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \
    -
    106  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \
    -
    107  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, p)
    -
    108 
    -
    109 //GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3)
    +Go to the documentation of this file.
    1 
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependencies
    +
    42 #include "../detail/setup.hpp"
    +
    43 #include "../detail/precision.hpp"
    +
    44 #include "../detail/type_int.hpp"
    +
    45 #include "../detail/_vectorize.hpp"
    +
    46 #include <limits>
    +
    47 
    +
    48 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    49 # pragma message("GLM: GLM_GTC_bitfield extension included")
    +
    50 #endif
    +
    51 
    +
    52 namespace glm
    +
    53 {
    +
    56 
    +
    60  template <typename genIUType>
    +
    61  GLM_FUNC_DECL genIUType mask(genIUType Bits);
    +
    62 
    +
    66  template <typename T, precision P, template <typename, precision> class vecIUType>
    +
    67  GLM_FUNC_DECL vecIUType<T, P> mask(vecIUType<T, P> const & v);
    +
    68 
    +
    72  template <typename genIUType>
    +
    73  GLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift);
    +
    74 
    +
    78  template <typename T, precision P, template <typename, precision> class vecType>
    +
    79  GLM_FUNC_DECL vecType<T, P> bitfieldRotateRight(vecType<T, P> const & In, int Shift);
    +
    80 
    +
    84  template <typename genIUType>
    +
    85  GLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift);
    +
    86 
    +
    90  template <typename T, precision P, template <typename, precision> class vecType>
    +
    91  GLM_FUNC_DECL vecType<T, P> bitfieldRotateLeft(vecType<T, P> const & In, int Shift);
    +
    92 
    +
    96  template <typename genIUType>
    +
    97  GLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount);
    +
    98 
    +
    102  template <typename T, precision P, template <typename, precision> class vecType>
    +
    103  GLM_FUNC_DECL vecType<T, P> bitfieldFillOne(vecType<T, P> const & Value, int FirstBit, int BitCount);
    +
    104 
    +
    108  template <typename genIUType>
    +
    109  GLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount);
    110 
    -
    111 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -
    112  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
    -
    113  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
    -
    114  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \
    -
    115  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
    -
    116  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
    -
    117  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \
    -
    118  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
    -
    119  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \
    -
    120  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \
    -
    121  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \
    -
    122  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \
    -
    123  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C)
    -
    124 
    -
    125 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -
    126  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \
    -
    127  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \
    -
    128  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \
    -
    129  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \
    -
    130  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \
    -
    131  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \
    -
    132  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \
    -
    133  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \
    -
    134  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \
    -
    135  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \
    -
    136  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \
    -
    137  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \
    -
    138  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \
    -
    139  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \
    -
    140  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \
    -
    141  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \
    -
    142  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \
    -
    143  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \
    -
    144  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \
    -
    145  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \
    -
    146  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \
    -
    147  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \
    -
    148  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \
    -
    149  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B)
    -
    150 
    -
    151 #define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -
    152  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \
    -
    153  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \
    -
    154  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \
    -
    155  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \
    -
    156  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \
    -
    157  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \
    -
    158  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \
    -
    159  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \
    -
    160  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \
    -
    161  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \
    -
    162  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \
    -
    163  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \
    -
    164  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \
    -
    165  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \
    -
    166  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \
    -
    167  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \
    -
    168  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \
    -
    169  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \
    -
    170  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \
    -
    171  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \
    -
    172  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \
    -
    173  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \
    -
    174  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \
    -
    175  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A)
    -
    176 
    -
    177 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
    -
    178  GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
    -
    179  GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
    -
    180  GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
    -
    181 
    -
    182 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    -
    183  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
    -
    184  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
    -
    185  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)
    -
    186 
    -
    187 //GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4)
    -
    188 
    -
    189 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    -
    190  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    -
    191  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    -
    192  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    -
    193  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B)
    -
    194 
    -
    195 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    -
    196  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    -
    197  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    -
    198  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    -
    199  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    -
    200  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    -
    201  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    -
    202  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    -
    203  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B)
    -
    204 
    -
    205 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
    -
    206  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    -
    207  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    -
    208  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    -
    209  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    -
    210  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    -
    211  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    -
    212  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    -
    213  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    -
    214  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    -
    215  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    -
    216  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    -
    217  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    -
    218  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    -
    219  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    -
    220  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    -
    221  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B)
    -
    222 
    -
    223 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \
    -
    224  GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \
    -
    225  GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \
    -
    226  GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B)
    -
    227 
    -
    228 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    -
    229  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \
    -
    230  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \
    -
    231  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t)
    -
    232 
    -
    233 //GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4)
    -
    234 
    -
    235 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -
    236  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    -
    237  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    -
    238  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
    -
    239  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    -
    240  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
    -
    241  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
    -
    242  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
    -
    243  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
    -
    244  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C)
    -
    245 
    -
    246 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -
    247  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    -
    248  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    -
    249  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
    -
    250  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    -
    251  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    -
    252  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
    -
    253  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
    -
    254  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
    -
    255  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
    -
    256  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    -
    257  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    -
    258  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
    -
    259  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    -
    260  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
    -
    261  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
    -
    262  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
    -
    263  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
    -
    264  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
    -
    265  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
    -
    266  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
    -
    267  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
    -
    268  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
    -
    269  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
    -
    270  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
    -
    271  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
    -
    272  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
    -
    273  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C)
    -
    274 
    -
    275 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
    -
    276  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    -
    277  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    -
    278  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
    -
    279  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    -
    280  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    -
    281  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
    -
    282  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
    -
    283  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
    -
    284  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
    -
    285  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    -
    286  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    -
    287  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
    -
    288  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    -
    289  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    -
    290  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
    -
    291  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
    -
    292  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
    -
    293  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
    -
    294  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
    -
    295  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
    -
    296  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
    -
    297  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
    -
    298  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
    -
    299  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
    -
    300  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
    -
    301  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
    -
    302  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
    -
    303  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    -
    304  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    -
    305  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
    -
    306  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    -
    307  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    -
    308  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
    -
    309  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
    -
    310  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
    -
    311  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
    -
    312  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    -
    313  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    -
    314  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
    -
    315  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    -
    316  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
    -
    317  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
    -
    318  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
    -
    319  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
    -
    320  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
    -
    321  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
    -
    322  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
    -
    323  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
    -
    324  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
    -
    325  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
    -
    326  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
    -
    327  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
    -
    328  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
    -
    329  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
    -
    330  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
    -
    331  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
    -
    332  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
    -
    333  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
    -
    334  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
    -
    335  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
    -
    336  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
    -
    337  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
    -
    338  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
    -
    339  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
    -
    340  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
    -
    341  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
    -
    342  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
    -
    343  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
    -
    344  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
    -
    345  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
    -
    346  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
    -
    347  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
    -
    348  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
    -
    349  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
    -
    350  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
    -
    351  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
    -
    352  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
    -
    353  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
    -
    354  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
    -
    355  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
    -
    356  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C)
    -
    357 
    -
    358 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \
    -
    359  GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \
    -
    360  GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
    -
    361  GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C)
    -
    362 
    -
    363 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    -
    364  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \
    -
    365  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \
    -
    366  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p)
    -
    367 
    -
    368 //GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4)
    -
    369 
    -
    370 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -
    371  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
    -
    372  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
    -
    373  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
    -
    374  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \
    -
    375  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
    -
    376  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
    -
    377  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
    -
    378  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \
    -
    379  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
    -
    380  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
    -
    381  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \
    -
    382  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \
    -
    383  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \
    -
    384  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \
    -
    385  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \
    -
    386  GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D)
    -
    387 
    -
    388 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -
    389  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
    -
    390  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
    -
    391  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
    -
    392  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \
    -
    393  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
    -
    394  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
    -
    395  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
    -
    396  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \
    -
    397  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
    -
    398  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
    -
    399  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
    -
    400  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \
    -
    401  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \
    -
    402  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \
    -
    403  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \
    -
    404  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \
    -
    405  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
    -
    406  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
    -
    407  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
    -
    408  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \
    -
    409  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
    -
    410  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
    -
    411  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
    -
    412  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \
    -
    413  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
    -
    414  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
    -
    415  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
    -
    416  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \
    -
    417  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \
    -
    418  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \
    -
    419  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \
    -
    420  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \
    -
    421  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
    -
    422  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
    -
    423  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
    -
    424  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \
    -
    425  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
    -
    426  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
    -
    427  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
    -
    428  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \
    -
    429  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
    -
    430  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
    -
    431  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \
    -
    432  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \
    -
    433  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \
    -
    434  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \
    -
    435  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \
    -
    436  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \
    -
    437  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \
    -
    438  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \
    -
    439  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \
    -
    440  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \
    -
    441  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \
    -
    442  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \
    -
    443  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \
    -
    444  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \
    -
    445  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \
    -
    446  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \
    -
    447  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \
    -
    448  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \
    -
    449  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \
    -
    450  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \
    -
    451  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \
    -
    452  GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D)
    -
    453 
    -
    454 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
    -
    455  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
    -
    456  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
    -
    457  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
    -
    458  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \
    -
    459  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
    -
    460  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
    -
    461  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
    -
    462  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \
    -
    463  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
    -
    464  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
    -
    465  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
    -
    466  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \
    -
    467  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \
    -
    468  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \
    -
    469  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \
    -
    470  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \
    -
    471  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
    -
    472  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
    -
    473  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
    -
    474  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \
    -
    475  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
    -
    476  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
    -
    477  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
    -
    478  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \
    -
    479  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
    -
    480  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
    -
    481  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
    -
    482  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \
    -
    483  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \
    -
    484  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \
    -
    485  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \
    -
    486  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \
    -
    487  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
    -
    488  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
    -
    489  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
    -
    490  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \
    -
    491  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
    -
    492  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
    -
    493  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
    -
    494  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \
    -
    495  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
    -
    496  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
    -
    497  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
    -
    498  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \
    -
    499  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \
    -
    500  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \
    -
    501  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \
    -
    502  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \
    -
    503  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
    -
    504  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
    -
    505  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
    -
    506  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \
    -
    507  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
    -
    508  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
    -
    509  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
    -
    510  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \
    -
    511  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
    -
    512  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
    -
    513  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
    -
    514  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \
    -
    515  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \
    -
    516  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \
    -
    517  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \
    -
    518  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \
    -
    519  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
    -
    520  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
    -
    521  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
    -
    522  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \
    -
    523  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
    -
    524  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
    -
    525  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
    -
    526  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \
    -
    527  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
    -
    528  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
    -
    529  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
    -
    530  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \
    -
    531  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \
    -
    532  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \
    -
    533  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \
    -
    534  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \
    -
    535  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
    -
    536  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
    -
    537  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
    -
    538  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \
    -
    539  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
    -
    540  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
    -
    541  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
    -
    542  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \
    -
    543  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
    -
    544  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
    -
    545  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
    -
    546  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \
    -
    547  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \
    -
    548  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \
    -
    549  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \
    -
    550  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \
    -
    551  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
    -
    552  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
    -
    553  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
    -
    554  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \
    -
    555  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
    -
    556  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
    -
    557  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
    -
    558  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \
    -
    559  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
    -
    560  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
    -
    561  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
    -
    562  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \
    -
    563  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \
    -
    564  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \
    -
    565  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \
    -
    566  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \
    -
    567  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
    -
    568  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
    -
    569  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
    -
    570  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \
    -
    571  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
    -
    572  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
    -
    573  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
    -
    574  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \
    -
    575  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
    -
    576  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
    -
    577  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
    -
    578  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \
    -
    579  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \
    -
    580  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \
    -
    581  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \
    -
    582  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \
    -
    583  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
    -
    584  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
    -
    585  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
    -
    586  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \
    -
    587  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
    -
    588  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
    -
    589  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
    -
    590  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \
    -
    591  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
    -
    592  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
    -
    593  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
    -
    594  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \
    -
    595  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \
    -
    596  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \
    -
    597  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \
    -
    598  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \
    -
    599  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
    -
    600  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
    -
    601  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
    -
    602  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \
    -
    603  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
    -
    604  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
    -
    605  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
    -
    606  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \
    -
    607  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
    -
    608  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
    -
    609  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
    -
    610  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \
    -
    611  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \
    -
    612  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \
    -
    613  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \
    -
    614  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \
    -
    615  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
    -
    616  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
    -
    617  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
    -
    618  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \
    -
    619  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
    -
    620  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
    -
    621  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
    -
    622  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \
    -
    623  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
    -
    624  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
    -
    625  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
    -
    626  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \
    -
    627  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \
    -
    628  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \
    -
    629  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \
    -
    630  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \
    -
    631  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
    -
    632  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
    -
    633  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
    -
    634  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \
    -
    635  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
    -
    636  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
    -
    637  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
    -
    638  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \
    -
    639  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
    -
    640  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
    -
    641  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
    -
    642  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \
    -
    643  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \
    -
    644  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \
    -
    645  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \
    -
    646  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \
    -
    647  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
    -
    648  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
    -
    649  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
    -
    650  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \
    -
    651  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
    -
    652  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
    -
    653  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
    -
    654  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \
    -
    655  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
    -
    656  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
    -
    657  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
    -
    658  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \
    -
    659  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \
    -
    660  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \
    -
    661  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \
    -
    662  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \
    -
    663  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
    -
    664  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
    -
    665  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
    -
    666  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \
    -
    667  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
    -
    668  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
    -
    669  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
    -
    670  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \
    -
    671  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
    -
    672  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
    -
    673  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
    -
    674  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \
    -
    675  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \
    -
    676  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \
    -
    677  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \
    -
    678  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \
    -
    679  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
    -
    680  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
    -
    681  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
    -
    682  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \
    -
    683  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
    -
    684  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
    -
    685  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
    -
    686  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \
    -
    687  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
    -
    688  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
    -
    689  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
    -
    690  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \
    -
    691  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \
    -
    692  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \
    -
    693  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \
    -
    694  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \
    -
    695  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
    -
    696  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
    -
    697  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
    -
    698  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \
    -
    699  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
    -
    700  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
    -
    701  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
    -
    702  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \
    -
    703  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
    -
    704  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
    -
    705  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \
    -
    706  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \
    -
    707  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \
    -
    708  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \
    -
    709  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \
    -
    710  GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D)
    -
    711 
    -
    712 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
    -
    713  GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
    -
    714  GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
    -
    715  GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
    -
    716 
    -
    717 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
    -
    718  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
    -
    719  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
    -
    720  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)
    -
    721 
    -
    722 //GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4)
    -
    723 
    -
    724 #endif//glm_core_swizzle_func
    +
    114  template <typename T, precision P, template <typename, precision> class vecType>
    +
    115  GLM_FUNC_DECL vecType<T, P> bitfieldFillZero(vecType<T, P> const & Value, int FirstBit, int BitCount);
    +
    116 
    +
    122  GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y);
    +
    123 
    +
    129  GLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y);
    +
    130 
    +
    136  GLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y);
    +
    137 
    +
    143  GLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y);
    +
    144 
    +
    150  GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y);
    +
    151 
    +
    157  GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y);
    +
    158 
    +
    164  GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z);
    +
    165 
    +
    171  GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z);
    +
    172 
    +
    178  GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z);
    +
    179 
    +
    185  GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z);
    +
    186 
    +
    192  GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z);
    +
    193 
    +
    199  GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z);
    +
    200 
    +
    206  GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w);
    +
    207 
    +
    213  GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w);
    +
    214 
    +
    220  GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w);
    +
    221 
    +
    227  GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w);
    +
    228 
    +
    230 } //namespace glm
    +
    231 
    +
    232 #include "bitfield.inl"
    +
    GLM_FUNC_DECL vecType< T, P > bitfieldRotateLeft(vecType< T, P > const &In, int Shift)
    Rotate all bits to the left.
    +
    GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)
    Interleaves the bits of x, y, z and w.
    +
    GLM_FUNC_DECL vecIUType< T, P > mask(vecIUType< T, P > const &v)
    Build a mask of 'count' bits.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vecType< T, P > bitfieldFillZero(vecType< T, P > const &Value, int FirstBit, int BitCount)
    Set to 0 a range of bits.
    +
    GLM_FUNC_DECL vecType< T, P > bitfieldFillOne(vecType< T, P > const &Value, int FirstBit, int BitCount)
    Set to 1 a range of bits.
    +
    GLM_FUNC_DECL vecType< T, P > bitfieldRotateRight(vecType< T, P > const &In, int Shift)
    Rotate all bits to the right.
    diff --git a/doc/api/a00010_source.html b/doc/api/a00010_source.html index a6d2c8a6..b2c858ee 100644 --- a/doc/api/a00010_source.html +++ b/doc/api/a00010_source.html @@ -3,8 +3,8 @@ - -GLM: _vectorize.hpp Source File + +0.9.6: closest_point.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,186 +41,50 @@
    -
    _vectorize.hpp
    +
    closest_point.hpp
    1 
    -
    29 #ifndef GLM_CORE_DETAIL_INCLUDED
    -
    30 #define GLM_CORE_DETAIL_INCLUDED
    -
    31 
    -
    32 #include "type_vec2.hpp"
    -
    33 #include "type_vec3.hpp"
    -
    34 #include "type_vec4.hpp"
    -
    35 
    -
    36 #define VECTORIZE2_VEC(func) \
    -
    37  template <typename T, precision P> \
    -
    38  GLM_FUNC_QUALIFIER detail::tvec2<T, P> func( \
    -
    39  detail::tvec2<T, P> const & v) \
    -
    40  { \
    -
    41  return detail::tvec2<T, P>( \
    -
    42  func(v.x), \
    -
    43  func(v.y)); \
    -
    44  }
    -
    45 
    -
    46 #define VECTORIZE3_VEC(func) \
    -
    47  template <typename T, precision P> \
    -
    48  GLM_FUNC_QUALIFIER detail::tvec3<T, P> func( \
    -
    49  detail::tvec3<T, P> const & v) \
    -
    50  { \
    -
    51  return detail::tvec3<T, P>( \
    -
    52  func(v.x), \
    -
    53  func(v.y), \
    -
    54  func(v.z)); \
    -
    55  }
    -
    56 
    -
    57 #define VECTORIZE4_VEC(func) \
    -
    58  template <typename T, precision P> \
    -
    59  GLM_FUNC_QUALIFIER detail::tvec4<T, P> func( \
    -
    60  detail::tvec4<T, P> const & v) \
    -
    61  { \
    -
    62  return detail::tvec4<T, P>( \
    -
    63  func(v.x), \
    -
    64  func(v.y), \
    -
    65  func(v.z), \
    -
    66  func(v.w)); \
    -
    67  }
    -
    68 
    -
    69 #define VECTORIZE_VEC(func) \
    -
    70  VECTORIZE2_VEC(func) \
    -
    71  VECTORIZE3_VEC(func) \
    -
    72  VECTORIZE4_VEC(func)
    -
    73 
    -
    74 #define VECTORIZE2_VEC_SCA(func) \
    -
    75  template <typename T, precision P> \
    -
    76  GLM_FUNC_QUALIFIER detail::tvec2<T, P> func \
    -
    77  ( \
    -
    78  detail::tvec2<T, P> const & x, \
    -
    79  T const & y \
    -
    80  ) \
    -
    81  { \
    -
    82  return detail::tvec2<T, P>( \
    -
    83  func(x.x, y), \
    -
    84  func(x.y, y)); \
    -
    85  }
    -
    86 
    -
    87 #define VECTORIZE3_VEC_SCA(func) \
    -
    88  template <typename T, precision P> \
    -
    89  GLM_FUNC_QUALIFIER detail::tvec3<T, P> func \
    -
    90  ( \
    -
    91  detail::tvec3<T, P> const & x, \
    -
    92  T const & y \
    -
    93  ) \
    -
    94  { \
    -
    95  return detail::tvec3<T, P>( \
    -
    96  func(x.x, y), \
    -
    97  func(x.y, y), \
    -
    98  func(x.z, y)); \
    -
    99  }
    -
    100 
    -
    101 #define VECTORIZE4_VEC_SCA(func) \
    -
    102  template <typename T, precision P> \
    -
    103  GLM_FUNC_QUALIFIER detail::tvec4<T, P> func \
    -
    104  ( \
    -
    105  detail::tvec4<T, P> const & x, \
    -
    106  T const & y \
    -
    107  ) \
    -
    108  { \
    -
    109  return detail::tvec4<T, P>( \
    -
    110  func(x.x, y), \
    -
    111  func(x.y, y), \
    -
    112  func(x.z, y), \
    -
    113  func(x.w, y)); \
    -
    114  }
    -
    115 
    -
    116 #define VECTORIZE_VEC_SCA(func) \
    -
    117  VECTORIZE2_VEC_SCA(func) \
    -
    118  VECTORIZE3_VEC_SCA(func) \
    -
    119  VECTORIZE4_VEC_SCA(func)
    -
    120 
    -
    121 #define VECTORIZE2_VEC_VEC(func) \
    -
    122  template <typename T, precision P> \
    -
    123  GLM_FUNC_QUALIFIER detail::tvec2<T, P> func \
    -
    124  ( \
    -
    125  detail::tvec2<T, P> const & x, \
    -
    126  detail::tvec2<T, P> const & y \
    -
    127  ) \
    -
    128  { \
    -
    129  return detail::tvec2<T, P>( \
    -
    130  func(x.x, y.x), \
    -
    131  func(x.y, y.y)); \
    -
    132  }
    -
    133 
    -
    134 #define VECTORIZE3_VEC_VEC(func) \
    -
    135  template <typename T, precision P> \
    -
    136  GLM_FUNC_QUALIFIER detail::tvec3<T, P> func \
    -
    137  ( \
    -
    138  detail::tvec3<T, P> const & x, \
    -
    139  detail::tvec3<T, P> const & y \
    -
    140  ) \
    -
    141  { \
    -
    142  return detail::tvec3<T, P>( \
    -
    143  func(x.x, y.x), \
    -
    144  func(x.y, y.y), \
    -
    145  func(x.z, y.z)); \
    -
    146  }
    -
    147 
    -
    148 #define VECTORIZE4_VEC_VEC(func) \
    -
    149  template <typename T, precision P> \
    -
    150  GLM_FUNC_QUALIFIER detail::tvec4<T, P> func \
    -
    151  ( \
    -
    152  detail::tvec4<T, P> const & x, \
    -
    153  detail::tvec4<T, P> const & y \
    -
    154  ) \
    -
    155  { \
    -
    156  return detail::tvec4<T, P>( \
    -
    157  func(x.x, y.x), \
    -
    158  func(x.y, y.y), \
    -
    159  func(x.z, y.z), \
    -
    160  func(x.w, y.w)); \
    -
    161  }
    -
    162 
    -
    163 #define VECTORIZE_VEC_VEC(func) \
    -
    164  VECTORIZE2_VEC_VEC(func) \
    -
    165  VECTORIZE3_VEC_VEC(func) \
    -
    166  VECTORIZE4_VEC_VEC(func)
    -
    167 
    -
    168 namespace glm{
    -
    169 namespace detail
    -
    170 {
    -
    171  template<bool C>
    -
    172  struct If
    -
    173  {
    -
    174  template<typename F, typename T>
    -
    175  static GLM_FUNC_QUALIFIER T apply(F functor, const T& val)
    -
    176  {
    -
    177  return functor(val);
    -
    178  }
    -
    179  };
    -
    180 
    -
    181  template<>
    -
    182  struct If<false>
    -
    183  {
    -
    184  template<typename F, typename T>
    -
    185  static GLM_FUNC_QUALIFIER T apply(F, const T& val)
    -
    186  {
    -
    187  return val;
    -
    188  }
    -
    189  };
    -
    190 }//namespace detail
    -
    191 }//namespace glm
    -
    192 
    -
    193 #endif//GLM_CORE_DETAIL_INCLUDED
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_closest_point extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename T, precision P>
    +
    55  GLM_FUNC_DECL tvec3<T, P> closestPointOnLine(
    +
    56  tvec3<T, P> const & point,
    +
    57  tvec3<T, P> const & a,
    +
    58  tvec3<T, P> const & b);
    +
    59 
    +
    61  template <typename T, precision P>
    +
    62  GLM_FUNC_DECL tvec2<T, P> closestPointOnLine(
    +
    63  tvec2<T, P> const & point,
    +
    64  tvec2<T, P> const & a,
    +
    65  tvec2<T, P> const & b);
    +
    66 
    +
    68 }// namespace glm
    +
    69 
    +
    70 #include "closest_point.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tvec2< T, P > closestPointOnLine(tvec2< T, P > const &point, tvec2< T, P > const &a, tvec2< T, P > const &b)
    2d lines work as well
    diff --git a/doc/api/a00011.html b/doc/api/a00011.html index c3eadf0d..dd28b748 100644 --- a/doc/api/a00011.html +++ b/doc/api/a00011.html @@ -3,8 +3,8 @@ - -GLM: associated_min_max.hpp File Reference + +0.9.6: color_space.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,65 +41,58 @@
    -
    associated_min_max.hpp File Reference
    +
    color_space.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > hsvColor (tvec3< T, P > const &rgbValue)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T luminosity (tvec3< T, P > const &color)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rgbColor (tvec3< T, P > const &hsvValue)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    saturation (T const s)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > saturation (T const s, tvec3< T, P > const &color)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > saturation (T const s, tvec4< T, P > const &color)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_associated_min_max

    -
    Date
    2008-03-10 / 2011-06-07
    +

    GLM_GTX_color_space

    +
    Date
    2005-12-21 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_extented_min_max (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file associated_min_max.hpp.

    +

    Definition in file color_space.hpp.

    diff --git a/doc/api/a00011_source.html b/doc/api/a00011_source.html index 4e04a7bf..ef658ef2 100644 --- a/doc/api/a00011_source.html +++ b/doc/api/a00011_source.html @@ -3,8 +3,8 @@ - -GLM: associated_min_max.hpp Source File + +0.9.6: color_space.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,77 +41,67 @@
    -
    associated_min_max.hpp
    +
    color_space.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_associated_min_max
    -
    39 #define GLM_GTX_associated_min_max
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_associated_min_max extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template<typename genTypeT, typename genTypeU>
    -
    56  genTypeU associatedMin(
    -
    57  const genTypeT& x, const genTypeU& a,
    -
    58  const genTypeT& y, const genTypeU& b);
    -
    59 
    -
    62  template<typename genTypeT, typename genTypeU>
    -
    63  genTypeU associatedMin(
    -
    64  const genTypeT& x, const genTypeU& a,
    -
    65  const genTypeT& y, const genTypeU& b,
    -
    66  const genTypeT& z, const genTypeU& c);
    -
    67 
    -
    70  template<typename genTypeT, typename genTypeU>
    -
    71  genTypeU associatedMin(
    -
    72  const genTypeT& x, const genTypeU& a,
    -
    73  const genTypeT& y, const genTypeU& b,
    -
    74  const genTypeT& z, const genTypeU& c,
    -
    75  const genTypeT& w, const genTypeU& d);
    -
    76 
    -
    79  template<typename genTypeT, typename genTypeU>
    -
    80  genTypeU associatedMax(
    -
    81  const genTypeT& x, const genTypeU& a,
    -
    82  const genTypeT& y, const genTypeU& b);
    -
    83 
    -
    86  template<typename genTypeT, typename genTypeU>
    -
    87  genTypeU associatedMax(
    -
    88  const genTypeT& x, const genTypeU& a,
    -
    89  const genTypeT& y, const genTypeU& b,
    -
    90  const genTypeT& z, const genTypeU& c);
    -
    91 
    -
    94  template<typename genTypeT, typename genTypeU>
    -
    95  genTypeU associatedMax(
    -
    96  const genTypeT& x, const genTypeU& a,
    -
    97  const genTypeT& y, const genTypeU& b,
    -
    98  const genTypeT& z, const genTypeU& c,
    -
    99  const genTypeT& w, const genTypeU& d);
    -
    100 
    -
    102 } //namespace glm
    -
    103 
    -
    104 #include "associated_min_max.inl"
    -
    105 
    -
    106 #endif//GLM_GTX_associated_min_max
    -
    genTypeU associatedMax(const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
    Max comparison between 2 variables.
    -
    genTypeU associatedMin(const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
    Min comparison between 2 variables.
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_color_space extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename T, precision P>
    +
    55  GLM_FUNC_DECL tvec3<T, P> rgbColor(
    +
    56  tvec3<T, P> const & hsvValue);
    +
    57 
    +
    60  template <typename T, precision P>
    +
    61  GLM_FUNC_DECL tvec3<T, P> hsvColor(
    +
    62  tvec3<T, P> const & rgbValue);
    +
    63 
    +
    66  template <typename T>
    +
    67  GLM_FUNC_DECL tmat4x4<T, defaultp> saturation(
    +
    68  T const s);
    +
    69 
    +
    72  template <typename T, precision P>
    +
    73  GLM_FUNC_DECL tvec3<T, P> saturation(
    +
    74  T const s,
    +
    75  tvec3<T, P> const & color);
    +
    76 
    +
    79  template <typename T, precision P>
    +
    80  GLM_FUNC_DECL tvec4<T, P> saturation(
    +
    81  T const s,
    +
    82  tvec4<T, P> const & color);
    +
    83 
    +
    86  template <typename T, precision P>
    +
    87  GLM_FUNC_DECL T luminosity(
    +
    88  tvec3<T, P> const & color);
    +
    89 
    +
    91 }//namespace glm
    +
    92 
    +
    93 #include "color_space.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tvec3< T, P > rgbColor(tvec3< T, P > const &hsvValue)
    Converts a color from HSV color space to its color in RGB color space.
    +
    GLM_FUNC_DECL T luminosity(tvec3< T, P > const &color)
    Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.
    +
    GLM_FUNC_DECL tvec4< T, P > saturation(T const s, tvec4< T, P > const &color)
    Modify the saturation of a color.
    +
    GLM_FUNC_DECL tvec3< T, P > hsvColor(tvec3< T, P > const &rgbValue)
    Converts a color from RGB color space to its color in HSV color space.
    diff --git a/doc/api/a00012.html b/doc/api/a00012.html index 93b2943b..5c9afcd7 100644 --- a/doc/api/a00012.html +++ b/doc/api/a00012.html @@ -3,8 +3,8 @@ - -GLM: bit.hpp File Reference + +0.9.6: color_space_YCoCg.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,120 +41,51 @@
    -
    bit.hpp File Reference
    +
    color_space_YCoCg.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +

    Functions

    GLM_FUNC_DECL int16 bitfieldInterleave (int8 x, int8 y)
     
    GLM_FUNC_DECL uint16 bitfieldInterleave (uint8 x, uint8 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int16 x, int16 y)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint16 x, uint16 y)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y, int32 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y, uint32 z)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z, int8 w)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z, uint8 w)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z, int16 w)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z, uint16 w)
     
    template<typename genType >
    GLM_DEPRECATED GLM_FUNC_DECL
    -genType 
    bitRevert (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType bitRotateLeft (genType const &In, std::size_t Shift)
     
    template<typename genType >
    GLM_FUNC_DECL genType bitRotateRight (genType const &In, std::size_t Shift)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType fillBitfieldWithOne (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType fillBitfieldWithZero (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename genType >
    GLM_FUNC_DECL genType highestBitValue (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL bool isPowerOfTwo (genType const &value)
     
    template<typename genIType >
    GLM_FUNC_DECL genIType mask (genIType const &count)
     
    template<typename genType >
    GLM_FUNC_DECL genType powerOfTwoAbove (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType powerOfTwoBelow (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType powerOfTwoNearest (genType const &value)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rgb2YCoCg (tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rgb2YCoCgR (tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > YCoCg2rgb (tvec3< T, P > const &YCoCgColor)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > YCoCgR2rgb (tvec3< T, P > const &YCoCgColor)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_bit

    -
    Date
    2007-03-14 / 2011-06-07
    +

    GLM_GTX_color_space_YCoCg

    +
    Date
    2008-10-28 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -gtc_half_float (dependence)
    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_bit

    -
    Date
    2005-12-30 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file bit.hpp.

    +

    Definition in file color_space_YCoCg.hpp.

    diff --git a/doc/api/a00012_source.html b/doc/api/a00012_source.html index bb4748de..c5dd35ed 100644 --- a/doc/api/a00012_source.html +++ b/doc/api/a00012_source.html @@ -3,8 +3,8 @@ - -GLM: bit.hpp Source File + +0.9.6: color_space_YCoCg.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,132 +41,58 @@
    -
    bit.hpp
    +
    color_space_YCoCg.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_bit
    -
    40 #define GLM_GTX_bit
    -
    41 
    -
    42 // Dependencies
    -
    43 #include "../detail/type_int.hpp"
    -
    44 #include "../detail/setup.hpp"
    -
    45 #include <cstddef>
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_color_space_YCoCg extension included")
    +
    45 #endif
    46 
    -
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    48 # pragma message("GLM: GLM_GTX_bit extension included")
    -
    49 #endif
    -
    50 
    -
    51 namespace glm
    -
    52 {
    -
    55 
    -
    58  template <typename genIType>
    -
    59  GLM_FUNC_DECL genIType mask(genIType const & count);
    -
    60 
    -
    63  template <typename genType>
    -
    64  GLM_FUNC_DECL genType highestBitValue(genType const & value);
    -
    65 
    -
    68  template <typename genType>
    -
    69  GLM_FUNC_DECL bool isPowerOfTwo(genType const & value);
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename T, precision P>
    +
    55  GLM_FUNC_DECL tvec3<T, P> rgb2YCoCg(
    +
    56  tvec3<T, P> const & rgbColor);
    +
    57 
    +
    60  template <typename T, precision P>
    +
    61  GLM_FUNC_DECL tvec3<T, P> YCoCg2rgb(
    +
    62  tvec3<T, P> const & YCoCgColor);
    +
    63 
    +
    67  template <typename T, precision P>
    +
    68  GLM_FUNC_DECL tvec3<T, P> rgb2YCoCgR(
    +
    69  tvec3<T, P> const & rgbColor);
    70 
    -
    73  template <typename genType>
    -
    74  GLM_FUNC_DECL genType powerOfTwoAbove(genType const & value);
    -
    75 
    -
    78  template <typename genType>
    -
    79  GLM_FUNC_DECL genType powerOfTwoBelow(genType const & value);
    +
    74  template <typename T, precision P>
    +
    75  GLM_FUNC_DECL tvec3<T, P> YCoCgR2rgb(
    +
    76  tvec3<T, P> const & YCoCgColor);
    +
    77 
    +
    79 }//namespace glm
    80 
    -
    83  template <typename genType>
    -
    84  GLM_FUNC_DECL genType powerOfTwoNearest(genType const & value);
    -
    85 
    -
    88  template <typename genType>
    -
    89  GLM_DEPRECATED GLM_FUNC_DECL genType bitRevert(genType const & value);
    -
    90 
    -
    93  template <typename genType>
    -
    94  GLM_FUNC_DECL genType bitRotateRight(genType const & In, std::size_t Shift);
    -
    95 
    -
    98  template <typename genType>
    -
    99  GLM_FUNC_DECL genType bitRotateLeft(genType const & In, std::size_t Shift);
    -
    100 
    -
    103  template <typename genIUType>
    -
    104  GLM_FUNC_DECL genIUType fillBitfieldWithOne(
    -
    105  genIUType const & Value,
    -
    106  int const & FromBit,
    -
    107  int const & ToBit);
    -
    108 
    -
    111  template <typename genIUType>
    -
    112  GLM_FUNC_DECL genIUType fillBitfieldWithZero(
    -
    113  genIUType const & Value,
    -
    114  int const & FromBit,
    -
    115  int const & ToBit);
    -
    116 
    -
    122  GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y);
    -
    123 
    -
    129  GLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y);
    -
    130 
    -
    136  GLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y);
    -
    137 
    -
    143  GLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y);
    -
    144 
    -
    150  GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y);
    -
    151 
    -
    157  GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y);
    -
    158 
    -
    164  GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z);
    -
    165 
    -
    171  GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z);
    -
    172 
    -
    178  GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z);
    -
    179 
    -
    185  GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z);
    -
    186 
    -
    192  GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z);
    -
    193 
    -
    199  GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z);
    -
    200 
    -
    206  GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w);
    -
    207 
    -
    213  GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w);
    -
    214 
    -
    220  GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w);
    -
    221 
    -
    227  GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w);
    -
    228 
    -
    230 } //namespace glm
    -
    231 
    -
    232 #include "bit.inl"
    -
    233 
    -
    234 #endif//GLM_GTX_bit
    -
    GLM_FUNC_DECL genType highestBitValue(genType const &value)
    Find the highest bit set to 1 in a integer variable and return its value.
    -
    detail::int8 int8
    8 bit signed integer type.
    Definition: type_int.hpp:89
    -
    detail::uint32 uint32
    32 bit unsigned integer type.
    Definition: type_int.hpp:96
    -
    detail::int16 int16
    16 bit signed integer type.
    Definition: type_int.hpp:90
    -
    detail::int64 int64
    64 bit signed integer type.
    Definition: type_int.hpp:92
    -
    GLM_FUNC_DECL genType powerOfTwoNearest(genType const &value)
    Return the power of two number which value is the closet to the input value.
    -
    GLM_FUNC_DECL genType bitRotateLeft(genType const &In, std::size_t Shift)
    Rotate all bits to the left.
    -
    GLM_FUNC_DECL genIType mask(genIType const &count)
    Build a mask of &#39;count&#39; bits.
    -
    detail::uint64 uint64
    64 bit unsigned integer type.
    Definition: type_int.hpp:97
    -
    detail::int32 int32
    32 bit signed integer type.
    Definition: type_int.hpp:91
    -
    GLM_FUNC_DECL genIUType fillBitfieldWithOne(genIUType const &Value, int const &FromBit, int const &ToBit)
    Set to 1 a range of bits.
    -
    GLM_FUNC_DECL genType bitRotateRight(genType const &In, std::size_t Shift)
    Rotate all bits to the right.
    -
    detail::uint8 uint8
    8 bit unsigned integer type.
    Definition: type_int.hpp:94
    -
    GLM_FUNC_DECL bool isPowerOfTwo(genType const &value)
    Return true if the value is a power of two number.
    -
    GLM_DEPRECATED GLM_FUNC_DECL genType bitRevert(genType const &value)
    Revert all bits of any integer based type.
    -
    GLM_FUNC_DECL genType powerOfTwoBelow(genType const &value)
    Return the power of two number which value is just lower the input value.
    -
    detail::uint16 uint16
    16 bit unsigned integer type.
    Definition: type_int.hpp:95
    -
    GLM_FUNC_DECL genIUType fillBitfieldWithZero(genIUType const &Value, int const &FromBit, int const &ToBit)
    Set to 0 a range of bits.
    -
    GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y)
    Interleaves the bits of x and y.
    -
    GLM_FUNC_DECL genType powerOfTwoAbove(genType const &value)
    Return the power of two number which value is just higher the input value.
    +
    81 #include "color_space_YCoCg.inl"
    +
    GLM_FUNC_DECL tvec3< T, P > YCoCg2rgb(tvec3< T, P > const &YCoCgColor)
    Convert a color from YCoCg color space to RGB color space.
    +
    GLM_FUNC_DECL tvec3< T, P > rgb2YCoCgR(tvec3< T, P > const &rgbColor)
    Convert a color from RGB color space to YCoCgR color space.
    +
    GLM_FUNC_DECL tvec3< T, P > rgb2YCoCg(tvec3< T, P > const &rgbColor)
    Convert a color from RGB color space to YCoCg color space.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tvec3< T, P > YCoCgR2rgb(tvec3< T, P > const &YCoCgColor)
    Convert a color from YCoCgR color space to RGB color space.
    +
    GLM_FUNC_DECL tvec3< T, P > rgbColor(tvec3< T, P > const &hsvValue)
    Converts a color from HSV color space to its color in RGB color space.
    diff --git a/doc/api/a00064.html b/doc/api/a00013.html similarity index 64% rename from doc/api/a00064.html rename to doc/api/a00013.html index 2d5e254d..171502ab 100644 --- a/doc/api/a00064.html +++ b/doc/api/a00013.html @@ -3,8 +3,8 @@ - -GLM: mat2x4.hpp File Reference + +0.9.6: common.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,32 @@
    -
    -
    mat2x4.hpp File Reference
    +
    common.hpp File Reference
    -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    +

    Go to the source code of this file.

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    +

    GLM Core

    Date
    2013-12-24 / 2013-12-24
    Author
    Christophe Riccio
    -

    Definition in file mat2x4.hpp.

    +

    Definition in file common.hpp.

    diff --git a/doc/api/a00013_source.html b/doc/api/a00013_source.html index bb6f6cfa..497f2072 100644 --- a/doc/api/a00013_source.html +++ b/doc/api/a00013_source.html @@ -3,8 +3,8 @@ - -GLM: closest_point.hpp Source File + +0.9.6: common.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,46 +41,25 @@
    -
    closest_point.hpp
    +
    common.hpp
    -
    1 
    -
    38 #ifndef GLM_GTX_closest_point
    -
    39 #define GLM_GTX_closest_point
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_closest_point extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename T, precision P>
    -
    56  detail::tvec3<T, P> closestPointOnLine(
    -
    57  detail::tvec3<T, P> const & point,
    -
    58  detail::tvec3<T, P> const & a,
    -
    59  detail::tvec3<T, P> const & b);
    -
    60 
    -
    62 }// namespace glm
    -
    63 
    -
    64 #include "closest_point.inl"
    -
    65 
    -
    66 #endif//GLM_GTX_closest_point
    -
    detail::tvec3< T, P > closestPointOnLine(detail::tvec3< T, P > const &point, detail::tvec3< T, P > const &a, detail::tvec3< T, P > const &b)
    Find the point on a straight line which is the closet of a point.
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/func_common.hpp"
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00014.html b/doc/api/a00014.html index cf94ef3f..5cca013f 100644 --- a/doc/api/a00014.html +++ b/doc/api/a00014.html @@ -3,8 +3,8 @@ - -GLM: color_space.hpp File Reference + +0.9.6: common.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,63 +41,44 @@
    -
    color_space.hpp File Reference
    +
    gtx/common.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > hsvColor (detail::tvec3< T, P > const &rgbValue)
     
    template<typename T , precision P>
    luminosity (detail::tvec3< T, P > const &color)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rgbColor (detail::tvec3< T, P > const &hsvValue)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > saturation (T const s)
     
    template<typename T , precision P>
    detail::tvec3< T, P > saturation (T const s, detail::tvec3< T, P > const &color)
     
    template<typename T , precision P>
    detail::tvec4< T, P > saturation (T const s, detail::tvec4< T, P > const &color)
     
    template<typename genType >
    GLM_FUNC_DECL genType::bool_type isdenormal (genType const &x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_color_space

    -
    Date
    2005-12-21 / 2011-06-07
    +

    GLM_GTX_common

    +
    Date
    2014-09-08 / 2014-09-08
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +gtc_half_float (dependence)
    -

    Definition in file color_space.hpp.

    +

    Definition in file gtx/common.hpp.

    diff --git a/doc/api/a00014_source.html b/doc/api/a00014_source.html index 64bb198f..aafe0234 100644 --- a/doc/api/a00014_source.html +++ b/doc/api/a00014_source.html @@ -3,8 +3,8 @@ - -GLM: color_space.hpp Source File + +0.9.6: common.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,69 +41,44 @@
    -
    color_space.hpp
    +
    gtx/common.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_color_space
    -
    39 #define GLM_GTX_color_space
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_color_space extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename T, precision P>
    -
    56  detail::tvec3<T, P> rgbColor(
    -
    57  detail::tvec3<T, P> const & hsvValue);
    -
    58 
    -
    61  template <typename T, precision P>
    -
    62  detail::tvec3<T, P> hsvColor(
    -
    63  detail::tvec3<T, P> const & rgbValue);
    -
    64 
    -
    67  template <typename T, precision P>
    -
    68  detail::tmat4x4<T, P> saturation(
    -
    69  T const s);
    -
    70 
    -
    73  template <typename T, precision P>
    -
    74  detail::tvec3<T, P> saturation(
    -
    75  T const s,
    -
    76  detail::tvec3<T, P> const & color);
    -
    77 
    -
    80  template <typename T, precision P>
    -
    81  detail::tvec4<T, P> saturation(
    -
    82  T const s,
    -
    83  detail::tvec4<T, P> const & color);
    -
    84 
    -
    87  template <typename T, precision P>
    -
    88  T luminosity(
    -
    89  detail::tvec3<T, P> const & color);
    -
    90 
    -
    92 }//namespace glm
    -
    93 
    -
    94 #include "color_space.inl"
    -
    95 
    -
    96 #endif//GLM_GTX_color_space
    -
    detail::tvec3< T, P > hsvColor(detail::tvec3< T, P > const &rgbValue)
    Converts a color from RGB color space to its color in HSV color space.
    -
    detail::tmat4x4< T, P > saturation(T const s)
    Build a saturation matrix.
    -
    detail::tvec3< T, P > rgbColor(detail::tvec3< T, P > const &hsvValue)
    Converts a color from HSV color space to its color in RGB color space.
    -
    T luminosity(detail::tvec3< T, P > const &color)
    Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependencies:
    +
    42 #include "../vec2.hpp"
    +
    43 #include "../vec3.hpp"
    +
    44 #include "../vec4.hpp"
    +
    45 #include "../gtc/vec1.hpp"
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    48 # pragma message("GLM: GLM_GTX_common extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    +
    52 {
    +
    55 
    +
    64  template <typename genType>
    +
    65  GLM_FUNC_DECL typename genType::bool_type isdenormal(genType const & x);
    +
    66 
    +
    68 }//namespace glm
    +
    69 
    +
    70 #include "common.inl"
    +
    GLM_FUNC_DECL genType::bool_type isdenormal(genType const &x)
    Returns true if x is a denormalized number Numbers whose absolute value is too small to be represente...
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00015.html b/doc/api/a00015.html index dc643867..b41a9a17 100644 --- a/doc/api/a00015.html +++ b/doc/api/a00015.html @@ -3,8 +3,8 @@ - -GLM: color_space_YCoCg.hpp File Reference + +0.9.6: compatibility.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,57 +41,292 @@
    -
    color_space_YCoCg.hpp File Reference
    +
    compatibility.hpp File Reference

    Go to the source code of this file.

    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Namespaces

     glm
     

    +Typedefs

    +typedef bool bool1
     
    +typedef bool bool1x1
     
    +typedef tvec2< bool, highp > bool2
     
    +typedef tmat2x2< bool, highp > bool2x2
     
    +typedef tmat2x3< bool, highp > bool2x3
     
    +typedef tmat2x4< bool, highp > bool2x4
     
    +typedef tvec3< bool, highp > bool3
     
    +typedef tmat3x2< bool, highp > bool3x2
     
    +typedef tmat3x3< bool, highp > bool3x3
     
    +typedef tmat3x4< bool, highp > bool3x4
     
    +typedef tvec4< bool, highp > bool4
     
    +typedef tmat4x2< bool, highp > bool4x2
     
    +typedef tmat4x3< bool, highp > bool4x3
     
    +typedef tmat4x4< bool, highp > bool4x4
     
    +typedef double double1
     
    +typedef double double1x1
     
    +typedef tvec2< double, highp > double2
     
    +typedef tmat2x2< double, highp > double2x2
     
    +typedef tmat2x3< double, highp > double2x3
     
    +typedef tmat2x4< double, highp > double2x4
     
    +typedef tvec3< double, highp > double3
     
    +typedef tmat3x2< double, highp > double3x2
     
    +typedef tmat3x3< double, highp > double3x3
     
    +typedef tmat3x4< double, highp > double3x4
     
    +typedef tvec4< double, highp > double4
     
    +typedef tmat4x2< double, highp > double4x2
     
    +typedef tmat4x3< double, highp > double4x3
     
    +typedef tmat4x4< double, highp > double4x4
     
    +typedef float float1
     
    +typedef float float1x1
     
    +typedef tvec2< float, highp > float2
     
    +typedef tmat2x2< float, highp > float2x2
     
    +typedef tmat2x3< float, highp > float2x3
     
    +typedef tmat2x4< float, highp > float2x4
     
    +typedef tvec3< float, highp > float3
     
    +typedef tmat3x2< float, highp > float3x2
     
    +typedef tmat3x3< float, highp > float3x3
     
    +typedef tmat3x4< float, highp > float3x4
     
    +typedef tvec4< float, highp > float4
     
    +typedef tmat4x2< float, highp > float4x2
     
    +typedef tmat4x3< float, highp > float4x3
     
    +typedef tmat4x4< float, highp > float4x4
     
    +typedef int int1
     
    +typedef int int1x1
     
    +typedef tvec2< int, highp > int2
     
    +typedef tmat2x2< int, highp > int2x2
     
    +typedef tmat2x3< int, highp > int2x3
     
    +typedef tmat2x4< int, highp > int2x4
     
    +typedef tvec3< int, highp > int3
     
    +typedef tmat3x2< int, highp > int3x2
     
    +typedef tmat3x3< int, highp > int3x3
     
    +typedef tmat3x4< int, highp > int3x4
     
    +typedef tvec4< int, highp > int4
     
    +typedef tmat4x2< int, highp > int4x2
     
    +typedef tmat4x3< int, highp > int4x3
     
    +typedef tmat4x4< int, highp > int4x4
     
    - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > rgb2YCoCg (detail::tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rgb2YCoCgR (detail::tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    detail::tvec3< T, P > YCoCg2rgb (detail::tvec3< T, P > const &YCoCgColor)
     
    template<typename T , precision P>
    detail::tvec3< T, P > YCoCgR2rgb (detail::tvec3< T, P > const &YCoCgColor)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER T atan2 (T x, T y)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec2< T, P > atan2 (const tvec2< T, P > &x, const tvec2< T, P > &y)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec3< T, P > atan2 (const tvec3< T, P > &x, const tvec3< T, P > &y)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec4< T, P > atan2 (const tvec4< T, P > &x, const tvec4< T, P > &y)
     
    +template<typename genType >
    GLM_FUNC_DECL bool isfinite (genType const &x)
     
    +template<typename T , precision P>
    GLM_FUNC_DECL tvec2< bool, P > isfinite (const tvec2< T, P > &x)
     
    +template<typename T , precision P>
    GLM_FUNC_DECL tvec3< bool, P > isfinite (const tvec3< T, P > &x)
     
    +template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > isfinite (const tvec4< T, P > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec2< T, P > lerp (const tvec2< T, P > &x, const tvec2< T, P > &y, T a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec3< T, P > lerp (const tvec3< T, P > &x, const tvec3< T, P > &y, T a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec4< T, P > lerp (const tvec4< T, P > &x, const tvec4< T, P > &y, T a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec2< T, P > lerp (const tvec2< T, P > &x, const tvec2< T, P > &y, const tvec2< T, P > &a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec3< T, P > lerp (const tvec3< T, P > &x, const tvec3< T, P > &y, const tvec3< T, P > &a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec4< T, P > lerp (const tvec4< T, P > &x, const tvec4< T, P > &y, const tvec4< T, P > &a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER T saturate (T x)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec2< T, P > saturate (const tvec2< T, P > &x)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec3< T, P > saturate (const tvec3< T, P > &x)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec4< T, P > saturate (const tvec4< T, P > &x)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T slerp (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_color_space_YCoCg

    -
    Date
    2008-10-28 / 2011-06-07
    +

    GLM_GTX_compatibility

    +
    Date
    2007-01-24 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +gtc_half_float (dependence)
    -

    Definition in file color_space_YCoCg.hpp.

    +

    Definition in file compatibility.hpp.

    diff --git a/doc/api/a00015_source.html b/doc/api/a00015_source.html index 97caed4f..ccf1acdb 100644 --- a/doc/api/a00015_source.html +++ b/doc/api/a00015_source.html @@ -3,8 +3,8 @@ - -GLM: color_space_YCoCg.hpp Source File + +0.9.6: compatibility.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,60 +41,201 @@
    -
    color_space_YCoCg.hpp
    +
    compatibility.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef glm_gtx_color_space_YCoCg
    -
    39 #define glm_gtx_color_space_YCoCg
    -
    40 
    +
    39 #pragma once
    +
    40 
    41 // Dependency:
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_color_space_YCoCg extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename T, precision P>
    -
    56  detail::tvec3<T, P> rgb2YCoCg(
    -
    57  detail::tvec3<T, P> const & rgbColor);
    -
    58 
    -
    61  template <typename T, precision P>
    -
    62  detail::tvec3<T, P> YCoCg2rgb(
    -
    63  detail::tvec3<T, P> const & YCoCgColor);
    -
    64 
    -
    68  template <typename T, precision P>
    -
    69  detail::tvec3<T, P> rgb2YCoCgR(
    -
    70  detail::tvec3<T, P> const & rgbColor);
    +
    43 #include "../gtc/quaternion.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    46 # pragma message("GLM: GLM_GTX_compatibility extension included")
    +
    47 #endif
    +
    48 
    +
    49 #if(GLM_COMPILER & GLM_COMPILER_VC)
    +
    50 # include <cfloat>
    +
    51 #elif(GLM_COMPILER & GLM_COMPILER_GCC)
    +
    52 # include <cmath>
    +
    53 # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
    +
    54 # undef isfinite
    +
    55 # endif
    +
    56 #endif//GLM_COMPILER
    +
    57 
    +
    58 namespace glm
    +
    59 {
    +
    62 
    +
    63  template <typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}
    +
    64  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> lerp(const tvec2<T, P>& x, const tvec2<T, P>& y, T a){return mix(x, y, a);}
    +
    65 
    +
    66  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> lerp(const tvec3<T, P>& x, const tvec3<T, P>& y, T a){return mix(x, y, a);}
    +
    67  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> lerp(const tvec4<T, P>& x, const tvec4<T, P>& y, T a){return mix(x, y, a);}
    +
    68  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> lerp(const tvec2<T, P>& x, const tvec2<T, P>& y, const tvec2<T, P>& a){return mix(x, y, a);}
    +
    69  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> lerp(const tvec3<T, P>& x, const tvec3<T, P>& y, const tvec3<T, P>& a){return mix(x, y, a);}
    +
    70  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> lerp(const tvec4<T, P>& x, const tvec4<T, P>& y, const tvec4<T, P>& a){return mix(x, y, a);}
    71 
    -
    75  template <typename T, precision P>
    -
    76  detail::tvec3<T, P> YCoCgR2rgb(
    -
    77  detail::tvec3<T, P> const & YCoCgColor);
    +
    72  template <typename T, precision P> GLM_FUNC_QUALIFIER T slerp(tquat<T, P> const & x, tquat<T, P> const & y, T const & a){return mix(x, y, a);}
    +
    73 
    +
    74  template <typename T, precision P> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}
    +
    75  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> saturate(const tvec2<T, P>& x){return clamp(x, T(0), T(1));}
    +
    76  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> saturate(const tvec3<T, P>& x){return clamp(x, T(0), T(1));}
    +
    77  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> saturate(const tvec4<T, P>& x){return clamp(x, T(0), T(1));}
    78 
    -
    80 }//namespace glm
    -
    81 
    -
    82 #include "color_space_YCoCg.inl"
    +
    79  template <typename T, precision P> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}
    +
    80  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> atan2(const tvec2<T, P>& x, const tvec2<T, P>& y){return atan(x, y);}
    +
    81  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> atan2(const tvec3<T, P>& x, const tvec3<T, P>& y){return atan(x, y);}
    +
    82  template <typename T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> atan2(const tvec4<T, P>& x, const tvec4<T, P>& y){return atan(x, y);}
    83 
    -
    84 #endif//glm_gtx_color_space_YCoCg
    -
    detail::tvec3< T, P > YCoCgR2rgb(detail::tvec3< T, P > const &YCoCgColor)
    Convert a color from YCoCgR color space to RGB color space.
    -
    detail::tvec3< T, P > rgb2YCoCgR(detail::tvec3< T, P > const &rgbColor)
    Convert a color from RGB color space to YCoCgR color space.
    -
    detail::tvec3< T, P > YCoCg2rgb(detail::tvec3< T, P > const &YCoCgColor)
    Convert a color from YCoCg color space to RGB color space.
    -
    detail::tvec3< T, P > rgbColor(detail::tvec3< T, P > const &hsvValue)
    Converts a color from HSV color space to its color in RGB color space.
    -
    detail::tvec3< T, P > rgb2YCoCg(detail::tvec3< T, P > const &rgbColor)
    Convert a color from RGB color space to YCoCg color space.
    +
    84  template <typename genType> GLM_FUNC_DECL bool isfinite(genType const & x);
    +
    85  template <typename T, precision P> GLM_FUNC_DECL tvec2<bool, P> isfinite(const tvec2<T, P>& x);
    +
    86  template <typename T, precision P> GLM_FUNC_DECL tvec3<bool, P> isfinite(const tvec3<T, P>& x);
    +
    87  template <typename T, precision P> GLM_FUNC_DECL tvec4<bool, P> isfinite(const tvec4<T, P>& x);
    +
    88 
    +
    89  typedef bool bool1;
    +
    90  typedef tvec2<bool, highp> bool2;
    +
    91  typedef tvec3<bool, highp> bool3;
    +
    92  typedef tvec4<bool, highp> bool4;
    +
    93 
    +
    94  typedef bool bool1x1;
    +
    95  typedef tmat2x2<bool, highp> bool2x2;
    +
    96  typedef tmat2x3<bool, highp> bool2x3;
    +
    97  typedef tmat2x4<bool, highp> bool2x4;
    +
    98  typedef tmat3x2<bool, highp> bool3x2;
    +
    99  typedef tmat3x3<bool, highp> bool3x3;
    +
    100  typedef tmat3x4<bool, highp> bool3x4;
    +
    101  typedef tmat4x2<bool, highp> bool4x2;
    +
    102  typedef tmat4x3<bool, highp> bool4x3;
    +
    103  typedef tmat4x4<bool, highp> bool4x4;
    +
    104 
    +
    105  typedef int int1;
    +
    106  typedef tvec2<int, highp> int2;
    +
    107  typedef tvec3<int, highp> int3;
    +
    108  typedef tvec4<int, highp> int4;
    +
    109 
    +
    110  typedef int int1x1;
    +
    111  typedef tmat2x2<int, highp> int2x2;
    +
    112  typedef tmat2x3<int, highp> int2x3;
    +
    113  typedef tmat2x4<int, highp> int2x4;
    +
    114  typedef tmat3x2<int, highp> int3x2;
    +
    115  typedef tmat3x3<int, highp> int3x3;
    +
    116  typedef tmat3x4<int, highp> int3x4;
    +
    117  typedef tmat4x2<int, highp> int4x2;
    +
    118  typedef tmat4x3<int, highp> int4x3;
    +
    119  typedef tmat4x4<int, highp> int4x4;
    +
    120 
    +
    121  typedef float float1;
    +
    122  typedef tvec2<float, highp> float2;
    +
    123  typedef tvec3<float, highp> float3;
    +
    124  typedef tvec4<float, highp> float4;
    +
    125 
    +
    126  typedef float float1x1;
    +
    127  typedef tmat2x2<float, highp> float2x2;
    +
    128  typedef tmat2x3<float, highp> float2x3;
    +
    129  typedef tmat2x4<float, highp> float2x4;
    +
    130  typedef tmat3x2<float, highp> float3x2;
    +
    131  typedef tmat3x3<float, highp> float3x3;
    +
    132  typedef tmat3x4<float, highp> float3x4;
    +
    133  typedef tmat4x2<float, highp> float4x2;
    +
    134  typedef tmat4x3<float, highp> float4x3;
    +
    135  typedef tmat4x4<float, highp> float4x4;
    +
    136 
    +
    137  typedef double double1;
    +
    138  typedef tvec2<double, highp> double2;
    +
    139  typedef tvec3<double, highp> double3;
    +
    140  typedef tvec4<double, highp> double4;
    +
    141 
    +
    142  typedef double double1x1;
    +
    143  typedef tmat2x2<double, highp> double2x2;
    +
    144  typedef tmat2x3<double, highp> double2x3;
    +
    145  typedef tmat2x4<double, highp> double2x4;
    +
    146  typedef tmat3x2<double, highp> double3x2;
    +
    147  typedef tmat3x3<double, highp> double3x3;
    +
    148  typedef tmat3x4<double, highp> double3x4;
    +
    149  typedef tmat4x2<double, highp> double4x2;
    +
    150  typedef tmat4x3<double, highp> double4x3;
    +
    151  typedef tmat4x4<double, highp> double4x4;
    +
    152 
    +
    154 }//namespace glm
    +
    155 
    +
    156 #include "compatibility.inl"
    +
    tmat3x4< float, highp > float3x4
    single-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat2x2< double, highp > double2x2
    double-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat3x4< double, highp > double3x4
    double-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat2x2< int, highp > int2x2
    integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
    +
    tvec3< int, highp > int3
    integer vector with 3 components. (From GLM_GTX_compatibility extension)
    +
    tvec3< double, highp > double3
    double-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...
    +
    GLM_FUNC_QUALIFIER tvec4< T, P > lerp(const tvec4< T, P > &x, const tvec4< T, P > &y, const tvec4< T, P > &a)
    Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using v...
    +
    float float1x1
    single-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...
    +
    tmat3x3< double, highp > double3x3
    double-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat2x3< bool, highp > bool2x3
    boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
    +
    int int1x1
    integer matrix with 1 component. (From GLM_GTX_compatibility extension)
    +
    tmat4x3< bool, highp > bool4x3
    boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
    +
    tmat3x3< float, highp > float3x3
    single-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat2x4< float, highp > float2x4
    single-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...
    +
    tvec2< bool, highp > bool2
    boolean type with 2 components. (From GLM_GTX_compatibility extension)
    +
    GLM_FUNC_DECL tvec4< bool, P > isfinite(const tvec4< T, P > &x)
    Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)...
    +
    tvec4< float, highp > float4
    single-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat4x3< float, highp > float4x3
    single-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...
    +
    double double1
    double-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...
    +
    tvec2< int, highp > int2
    integer vector with 2 components. (From GLM_GTX_compatibility extension)
    +
    tmat4x2< double, highp > double4x2
    double-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat3x3< int, highp > int3x3
    integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
    +
    tmat4x4< bool, highp > bool4x4
    boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
    +
    tmat4x3< double, highp > double4x3
    double-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...
    +
    double double1x1
    double-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...
    +
    tmat4x2< int, highp > int4x2
    integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
    +
    tvec4< int, highp > int4
    integer vector with 4 components. (From GLM_GTX_compatibility extension)
    +
    tmat2x2< float, highp > float2x2
    single-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...
    +
    GLM_FUNC_QUALIFIER tvec4< T, P > saturate(const tvec4< T, P > &x)
    Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
    +
    tvec3< bool, highp > bool3
    boolean type with 3 components. (From GLM_GTX_compatibility extension)
    +
    tmat3x2< int, highp > int3x2
    integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
    +
    tmat3x2< double, highp > double3x2
    double-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat4x4< float, highp > float4x4
    single-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat4x2< float, highp > float4x2
    single-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...
    +
    float float1
    single-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...
    +
    tvec4< double, highp > double4
    double-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat3x2< float, highp > float3x2
    single-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vecType< T, P > atan(vecType< T, P > const &y, vecType< T, P > const &x)
    Arc tangent.
    +
    GLM_FUNC_DECL vecType< T, P > mix(vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)
    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
    +
    GLM_FUNC_QUALIFIER tvec4< T, P > atan2(const tvec4< T, P > &x, const tvec4< T, P > &y)
    Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what q...
    +
    tvec4< bool, highp > bool4
    boolean type with 4 components. (From GLM_GTX_compatibility extension)
    +
    tmat4x2< bool, highp > bool4x2
    boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
    +
    tmat2x4< double, highp > double2x4
    double-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat4x3< int, highp > int4x3
    integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
    +
    tmat2x3< double, highp > double2x3
    double-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat2x3< float, highp > float2x3
    single-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat3x4< int, highp > int3x4
    integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
    +
    tmat2x4< bool, highp > bool2x4
    boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
    +
    tmat3x4< bool, highp > bool3x4
    boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
    +
    tmat4x4< int, highp > int4x4
    integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
    +
    int int1
    integer vector with 1 component. (From GLM_GTX_compatibility extension)
    +
    tvec2< float, highp > float2
    single-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...
    +
    GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal)
    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...
    +
    tmat2x2< bool, highp > bool2x2
    boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
    +
    tmat2x3< int, highp > int2x3
    integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
    +
    tvec3< float, highp > float3
    single-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...
    +
    tmat4x4< double, highp > double4x4
    double-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...
    +
    bool bool1
    boolean type with 1 component. (From GLM_GTX_compatibility extension)
    +
    tvec2< double, highp > double2
    double-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...
    +
    bool bool1x1
    boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)
    +
    tmat3x3< bool, highp > bool3x3
    boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
    +
    GLM_FUNC_QUALIFIER T slerp(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
    Returns the slurp interpolation between two quaternions.
    +
    tmat2x4< int, highp > int2x4
    integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
    +
    tmat3x2< bool, highp > bool3x2
    boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
    diff --git a/doc/api/a00016.html b/doc/api/a00016.html index dfde7901..e189dfbb 100644 --- a/doc/api/a00016.html +++ b/doc/api/a00016.html @@ -3,8 +3,8 @@ - -GLM: common.hpp File Reference + +0.9.6: component_wise.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,32 +41,51 @@
    +
    -
    common.hpp File Reference
    +
    component_wise.hpp File Reference

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType::value_type compAdd (genType const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type compMax (genType const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type compMin (genType const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type compMul (genType const &v)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTX_component_wise

    +
    Date
    2007-05-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    -

    Definition in file common.hpp.

    +

    Definition in file component_wise.hpp.

    diff --git a/doc/api/a00016_source.html b/doc/api/a00016_source.html index 2a985c0d..68014358 100644 --- a/doc/api/a00016_source.html +++ b/doc/api/a00016_source.html @@ -3,8 +3,8 @@ - -GLM: common.hpp Source File + +0.9.6: component_wise.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,57 @@
    -
    common.hpp
    +
    component_wise.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_COMMON_INCLUDED
    -
    30 #define GLM_COMMON_INCLUDED
    -
    31 
    -
    32 #include "detail/func_common.hpp"
    -
    33 
    -
    34 #endif//GLM_COMMON_INCLUDED
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependencies
    +
    41 #include "../detail/setup.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_component_wise extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename genType>
    +
    55  GLM_FUNC_DECL typename genType::value_type compAdd(
    +
    56  genType const & v);
    +
    57 
    +
    60  template <typename genType>
    +
    61  GLM_FUNC_DECL typename genType::value_type compMul(
    +
    62  genType const & v);
    +
    63 
    +
    66  template <typename genType>
    +
    67  GLM_FUNC_DECL typename genType::value_type compMin(
    +
    68  genType const & v);
    +
    69 
    +
    72  template <typename genType>
    +
    73  GLM_FUNC_DECL typename genType::value_type compMax(
    +
    74  genType const & v);
    +
    75 
    +
    77 }//namespace glm
    +
    78 
    +
    79 #include "component_wise.inl"
    +
    GLM_FUNC_DECL genType::value_type compMul(genType const &v)
    Multiply all vector components together.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType::value_type compMax(genType const &v)
    Find the maximum value between single vector components.
    +
    GLM_FUNC_DECL genType::value_type compMin(genType const &v)
    Find the minimum value between single vector components.
    +
    GLM_FUNC_DECL genType::value_type compAdd(genType const &v)
    Add all vector components together.
    diff --git a/doc/api/a00017.html b/doc/api/a00017.html index 961bd50d..64db9e0e 100644 --- a/doc/api/a00017.html +++ b/doc/api/a00017.html @@ -3,8 +3,8 @@ - -GLM: compatibility.hpp File Reference + +0.9.6: constants.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,355 +41,128 @@
    -
    compatibility.hpp File Reference
    +
    constants.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    -typedef bool bool1
     
    -typedef bool bool1x1
     
    -typedef detail::tvec2< bool,
    -highp > 
    bool2
     
    -typedef detail::tmat2x2< bool,
    -highp > 
    bool2x2
     
    -typedef detail::tmat2x3< bool,
    -highp > 
    bool2x3
     
    -typedef detail::tmat2x4< bool,
    -highp > 
    bool2x4
     
    -typedef detail::tvec3< bool,
    -highp > 
    bool3
     
    -typedef detail::tmat3x2< bool,
    -highp > 
    bool3x2
     
    -typedef detail::tmat3x3< bool,
    -highp > 
    bool3x3
     
    -typedef detail::tmat3x4< bool,
    -highp > 
    bool3x4
     
    -typedef detail::tvec4< bool,
    -highp > 
    bool4
     
    -typedef detail::tmat4x2< bool,
    -highp > 
    bool4x2
     
    -typedef detail::tmat4x3< bool,
    -highp > 
    bool4x3
     
    -typedef detail::tmat4x4< bool,
    -highp > 
    bool4x4
     
    -typedef double double1
     
    -typedef double double1x1
     
    -typedef detail::tvec2< double,
    -highp > 
    double2
     
    -typedef detail::tmat2x2
    -< double, highp > 
    double2x2
     
    -typedef detail::tmat2x3
    -< double, highp > 
    double2x3
     
    -typedef detail::tmat2x4
    -< double, highp > 
    double2x4
     
    -typedef detail::tvec3< double,
    -highp > 
    double3
     
    -typedef detail::tmat3x2
    -< double, highp > 
    double3x2
     
    -typedef detail::tmat3x3
    -< double, highp > 
    double3x3
     
    -typedef detail::tmat3x4
    -< double, highp > 
    double3x4
     
    -typedef detail::tvec4< double,
    -highp > 
    double4
     
    -typedef detail::tmat4x2
    -< double, highp > 
    double4x2
     
    -typedef detail::tmat4x3
    -< double, highp > 
    double4x3
     
    -typedef detail::tmat4x4
    -< double, highp > 
    double4x4
     
    -typedef float float1
     
    -typedef float float1x1
     
    -typedef detail::tvec2< float,
    -highp > 
    float2
     
    -typedef detail::tmat2x2< float,
    -highp > 
    float2x2
     
    -typedef detail::tmat2x3< float,
    -highp > 
    float2x3
     
    -typedef detail::tmat2x4< float,
    -highp > 
    float2x4
     
    -typedef detail::tvec3< float,
    -highp > 
    float3
     
    -typedef detail::tmat3x2< float,
    -highp > 
    float3x2
     
    -typedef detail::tmat3x3< float,
    -highp > 
    float3x3
     
    -typedef detail::tmat3x4< float,
    -highp > 
    float3x4
     
    -typedef detail::tvec4< float,
    -highp > 
    float4
     
    -typedef detail::tmat4x2< float,
    -highp > 
    float4x2
     
    -typedef detail::tmat4x3< float,
    -highp > 
    float4x3
     
    -typedef detail::tmat4x4< float,
    -highp > 
    float4x4
     
    -typedef int int1
     
    -typedef int int1x1
     
    -typedef detail::tvec2< int, highp > int2
     
    -typedef detail::tmat2x2< int,
    -highp > 
    int2x2
     
    -typedef detail::tmat2x3< int,
    -highp > 
    int2x3
     
    -typedef detail::tmat2x4< int,
    -highp > 
    int2x4
     
    -typedef detail::tvec3< int, highp > int3
     
    -typedef detail::tmat3x2< int,
    -highp > 
    int3x2
     
    -typedef detail::tmat3x3< int,
    -highp > 
    int3x3
     
    -typedef detail::tmat3x4< int,
    -highp > 
    int3x4
     
    -typedef detail::tvec4< int, highp > int4
     
    -typedef detail::tmat4x2< int,
    -highp > 
    int4x2
     
    -typedef detail::tmat4x3< int,
    -highp > 
    int4x3
     
    -typedef detail::tmat4x4< int,
    -highp > 
    int4x4
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER T atan2 (T x, T y)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    atan2 (const detail::tvec2< T, P > &x, const detail::tvec2< T, P > &y)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    atan2 (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    atan2 (const detail::tvec4< T, P > &x, const detail::tvec4< T, P > &y)
     
    -template<typename genType >
    bool isfinite (genType const &x)
     
    -template<typename T , precision P>
    detail::tvec2< bool, P > isfinite (const detail::tvec2< T, P > &x)
     
    -template<typename T , precision P>
    detail::tvec3< bool, P > isfinite (const detail::tvec3< T, P > &x)
     
    -template<typename T , precision P>
    detail::tvec4< bool, P > isfinite (const detail::tvec4< T, P > &x)
     
    -template<typename T >
    GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    lerp (const detail::tvec2< T, P > &x, const detail::tvec2< T, P > &y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    lerp (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    lerp (const detail::tvec4< T, P > &x, const detail::tvec4< T, P > &y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    lerp (const detail::tvec2< T, P > &x, const detail::tvec2< T, P > &y, const detail::tvec2< T, P > &a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    lerp (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y, const detail::tvec3< T, P > &a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    lerp (const detail::tvec4< T, P > &x, const detail::tvec4< T, P > &y, const detail::tvec4< T, P > &a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER T saturate (T x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    saturate (const detail::tvec2< T, P > &x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    saturate (const detail::tvec3< T, P > &x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    saturate (const detail::tvec4< T, P > &x)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T slerp (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename genType >
    GLM_FUNC_DECL genType e ()
     
    template<typename genType >
    GLM_FUNC_DECL genType epsilon ()
     
    template<typename genType >
    GLM_FUNC_DECL genType euler ()
     
    template<typename genType >
    GLM_FUNC_DECL genType four_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType golden_ratio ()
     
    template<typename genType >
    GLM_FUNC_DECL genType half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ln_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ten ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_root_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType quarter_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_five ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_ln_four ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_three ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType third ()
     
    template<typename genType >
    GLM_FUNC_DECL genType three_over_two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_thirds ()
     
    template<typename genType >
    GLM_FUNC_DECL genType zero ()
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_compatibility

    -
    Date
    2007-01-24 / 2011-06-07
    +

    GLM_GTC_constants

    +
    Date
    2011-09-30 / 2012-01-25
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    gtc_half_float (dependence)
    -

    Definition in file compatibility.hpp.

    +

    Definition in file constants.hpp.

    diff --git a/doc/api/a00017_source.html b/doc/api/a00017_source.html index ec349115..7227a721 100644 --- a/doc/api/a00017_source.html +++ b/doc/api/a00017_source.html @@ -3,8 +3,8 @@ - -GLM: compatibility.hpp Source File + +0.9.6: constants.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,204 +41,153 @@
    -
    compatibility.hpp
    +
    constants.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_compatibility
    -
    40 #define GLM_GTX_compatibility
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 #include "../gtc/quaternion.hpp"
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_compatibility extension included")
    -
    48 #endif
    -
    49 
    -
    50 #if(GLM_COMPILER & GLM_COMPILER_VC)
    -
    51 # include <cfloat>
    -
    52 #elif(GLM_COMPILER & GLM_COMPILER_GCC)
    -
    53 # include <cmath>
    -
    54 # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
    -
    55 # undef isfinite
    -
    56 # endif
    -
    57 #endif//GLM_COMPILER
    -
    58 
    -
    59 namespace glm
    -
    60 {
    -
    63 
    -
    64  template <typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}
    -
    65  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec2<T, P> lerp(const detail::tvec2<T, P>& x, const detail::tvec2<T, P>& y, T a){return mix(x, y, a);}
    -
    66 
    -
    67  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec3<T, P> lerp(const detail::tvec3<T, P>& x, const detail::tvec3<T, P>& y, T a){return mix(x, y, a);}
    -
    68  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec4<T, P> lerp(const detail::tvec4<T, P>& x, const detail::tvec4<T, P>& y, T a){return mix(x, y, a);}
    -
    69  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec2<T, P> lerp(const detail::tvec2<T, P>& x, const detail::tvec2<T, P>& y, const detail::tvec2<T, P>& a){return mix(x, y, a);}
    -
    70  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec3<T, P> lerp(const detail::tvec3<T, P>& x, const detail::tvec3<T, P>& y, const detail::tvec3<T, P>& a){return mix(x, y, a);}
    -
    71  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec4<T, P> lerp(const detail::tvec4<T, P>& x, const detail::tvec4<T, P>& y, const detail::tvec4<T, P>& a){return mix(x, y, a);}
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependencies
    +
    42 #include "../detail/setup.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTC_constants extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename genType>
    +
    56  GLM_FUNC_DECL genType epsilon();
    +
    57 
    +
    60  template <typename genType>
    +
    61  GLM_FUNC_DECL genType zero();
    +
    62 
    +
    65  template <typename genType>
    +
    66  GLM_FUNC_DECL genType one();
    +
    67 
    +
    70  template <typename genType>
    +
    71  GLM_FUNC_DECL genType pi();
    72 
    -
    73  template <typename T, precision P> GLM_FUNC_QUALIFIER T slerp(detail::tquat<T, P> const & x, detail::tquat<T, P> const & y, T const & a){return mix(x, y, a);}
    -
    74 
    -
    75  template <typename T, precision P> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}
    -
    76  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec2<T, P> saturate(const detail::tvec2<T, P>& x){return clamp(x, T(0), T(1));}
    -
    77  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec3<T, P> saturate(const detail::tvec3<T, P>& x){return clamp(x, T(0), T(1));}
    -
    78  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec4<T, P> saturate(const detail::tvec4<T, P>& x){return clamp(x, T(0), T(1));}
    -
    79 
    -
    80  template <typename T, precision P> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}
    -
    81  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec2<T, P> atan2(const detail::tvec2<T, P>& x, const detail::tvec2<T, P>& y){return atan(x, y);}
    -
    82  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec3<T, P> atan2(const detail::tvec3<T, P>& x, const detail::tvec3<T, P>& y){return atan(x, y);}
    -
    83  template <typename T, precision P> GLM_FUNC_QUALIFIER detail::tvec4<T, P> atan2(const detail::tvec4<T, P>& x, const detail::tvec4<T, P>& y){return atan(x, y);}
    -
    84 
    -
    85  template <typename genType> bool isfinite(genType const & x);
    -
    86  template <typename T, precision P> detail::tvec2<bool, P> isfinite(const detail::tvec2<T, P>& x);
    -
    87  template <typename T, precision P> detail::tvec3<bool, P> isfinite(const detail::tvec3<T, P>& x);
    -
    88  template <typename T, precision P> detail::tvec4<bool, P> isfinite(const detail::tvec4<T, P>& x);
    -
    89 
    -
    90  typedef bool bool1;
    -
    91  typedef detail::tvec2<bool, highp> bool2;
    -
    92  typedef detail::tvec3<bool, highp> bool3;
    -
    93  typedef detail::tvec4<bool, highp> bool4;
    -
    94 
    -
    95  typedef bool bool1x1;
    -
    96  typedef detail::tmat2x2<bool, highp> bool2x2;
    -
    97  typedef detail::tmat2x3<bool, highp> bool2x3;
    -
    98  typedef detail::tmat2x4<bool, highp> bool2x4;
    -
    99  typedef detail::tmat3x2<bool, highp> bool3x2;
    -
    100  typedef detail::tmat3x3<bool, highp> bool3x3;
    -
    101  typedef detail::tmat3x4<bool, highp> bool3x4;
    -
    102  typedef detail::tmat4x2<bool, highp> bool4x2;
    -
    103  typedef detail::tmat4x3<bool, highp> bool4x3;
    -
    104  typedef detail::tmat4x4<bool, highp> bool4x4;
    -
    105 
    -
    106  typedef int int1;
    -
    107  typedef detail::tvec2<int, highp> int2;
    -
    108  typedef detail::tvec3<int, highp> int3;
    -
    109  typedef detail::tvec4<int, highp> int4;
    -
    110 
    -
    111  typedef int int1x1;
    -
    112  typedef detail::tmat2x2<int, highp> int2x2;
    -
    113  typedef detail::tmat2x3<int, highp> int2x3;
    -
    114  typedef detail::tmat2x4<int, highp> int2x4;
    -
    115  typedef detail::tmat3x2<int, highp> int3x2;
    -
    116  typedef detail::tmat3x3<int, highp> int3x3;
    -
    117  typedef detail::tmat3x4<int, highp> int3x4;
    -
    118  typedef detail::tmat4x2<int, highp> int4x2;
    -
    119  typedef detail::tmat4x3<int, highp> int4x3;
    -
    120  typedef detail::tmat4x4<int, highp> int4x4;
    -
    121 
    -
    122  typedef float float1;
    -
    123  typedef detail::tvec2<float, highp> float2;
    -
    124  typedef detail::tvec3<float, highp> float3;
    -
    125  typedef detail::tvec4<float, highp> float4;
    -
    126 
    -
    127  typedef float float1x1;
    -
    128  typedef detail::tmat2x2<float, highp> float2x2;
    -
    129  typedef detail::tmat2x3<float, highp> float2x3;
    -
    130  typedef detail::tmat2x4<float, highp> float2x4;
    -
    131  typedef detail::tmat3x2<float, highp> float3x2;
    -
    132  typedef detail::tmat3x3<float, highp> float3x3;
    -
    133  typedef detail::tmat3x4<float, highp> float3x4;
    -
    134  typedef detail::tmat4x2<float, highp> float4x2;
    -
    135  typedef detail::tmat4x3<float, highp> float4x3;
    -
    136  typedef detail::tmat4x4<float, highp> float4x4;
    +
    75  template <typename genType>
    +
    76  GLM_FUNC_DECL genType two_pi();
    +
    77 
    +
    80  template <typename genType>
    +
    81  GLM_FUNC_DECL genType root_pi();
    +
    82 
    +
    85  template <typename genType>
    +
    86  GLM_FUNC_DECL genType half_pi();
    +
    87 
    +
    90  template <typename genType>
    +
    91  GLM_FUNC_DECL genType three_over_two_pi();
    +
    92 
    +
    95  template <typename genType>
    +
    96  GLM_FUNC_DECL genType quarter_pi();
    +
    97 
    +
    100  template <typename genType>
    +
    101  GLM_FUNC_DECL genType one_over_pi();
    +
    102 
    +
    105  template <typename genType>
    +
    106  GLM_FUNC_DECL genType one_over_two_pi();
    +
    107 
    +
    110  template <typename genType>
    +
    111  GLM_FUNC_DECL genType two_over_pi();
    +
    112 
    +
    115  template <typename genType>
    +
    116  GLM_FUNC_DECL genType four_over_pi();
    +
    117 
    +
    120  template <typename genType>
    +
    121  GLM_FUNC_DECL genType two_over_root_pi();
    +
    122 
    +
    125  template <typename genType>
    +
    126  GLM_FUNC_DECL genType one_over_root_two();
    +
    127 
    +
    130  template <typename genType>
    +
    131  GLM_FUNC_DECL genType root_half_pi();
    +
    132 
    +
    135  template <typename genType>
    +
    136  GLM_FUNC_DECL genType root_two_pi();
    137 
    -
    138  typedef double double1;
    -
    139  typedef detail::tvec2<double, highp> double2;
    -
    140  typedef detail::tvec3<double, highp> double3;
    -
    141  typedef detail::tvec4<double, highp> double4;
    +
    140  template <typename genType>
    +
    141  GLM_FUNC_DECL genType root_ln_four();
    142 
    -
    143  typedef double double1x1;
    -
    144  typedef detail::tmat2x2<double, highp> double2x2;
    -
    145  typedef detail::tmat2x3<double, highp> double2x3;
    -
    146  typedef detail::tmat2x4<double, highp> double2x4;
    -
    147  typedef detail::tmat3x2<double, highp> double3x2;
    -
    148  typedef detail::tmat3x3<double, highp> double3x3;
    -
    149  typedef detail::tmat3x4<double, highp> double3x4;
    -
    150  typedef detail::tmat4x2<double, highp> double4x2;
    -
    151  typedef detail::tmat4x3<double, highp> double4x3;
    -
    152  typedef detail::tmat4x4<double, highp> double4x4;
    -
    153 
    -
    155 }//namespace glm
    -
    156 
    -
    157 #include "compatibility.inl"
    -
    158 
    -
    159 #endif//GLM_GTX_compatibility
    -
    160 
    -
    detail::tmat2x2< int, highp > int2x2
    integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
    -
    float float1x1
    single-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat3x4< int, highp > int3x4
    integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat2x2< float, highp > float2x2
    single-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...
    -
    GLM_FUNC_DECL genType atan(genType const &y, genType const &x)
    Arc tangent.
    -
    detail::tvec4< float, highp > float4
    single-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat4x2< bool, highp > bool4x2
    boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
    -
    GLM_FUNC_DECL detail::tquat< T, P > lerp(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Linear interpolation of two quaternions.
    -
    detail::tmat4x2< int, highp > int4x2
    integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
    -
    GLM_FUNC_QUALIFIER T saturate(T x)
    Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
    -
    detail::tvec3< int, highp > int3
    integer vector with 3 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat3x3< float, highp > float3x3
    single-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat4x3< double, highp > double4x3
    double-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...
    -
    GLM_FUNC_DECL genTypeT mix(genTypeT const &x, genTypeT const &y, genTypeU const &a)
    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
    -
    int int1x1
    integer matrix with 1 component. (From GLM_GTX_compatibility extension)
    -
    bool bool1x1
    boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)
    -
    detail::tvec2< int, highp > int2
    integer vector with 2 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat4x4< double, highp > double4x4
    double-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat2x2< double, highp > double2x2
    double-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat2x3< bool, highp > bool2x3
    boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
    -
    int int1
    integer vector with 1 component. (From GLM_GTX_compatibility extension)
    -
    detail::tmat2x4< float, highp > float2x4
    single-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat3x2< double, highp > double3x2
    double-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tvec4< bool, highp > bool4
    boolean type with 4 components. (From GLM_GTX_compatibility extension)
    -
    GLM_FUNC_QUALIFIER T atan2(T x, T y)
    Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what q...
    -
    detail::tmat3x2< bool, highp > bool3x2
    boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat4x4< int, highp > int4x4
    integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
    -
    bool bool1
    boolean type with 1 component. (From GLM_GTX_compatibility extension)
    -
    double double1x1
    double-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat4x3< float, highp > float4x3
    single-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat4x4< bool, highp > bool4x4
    boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat3x3< bool, highp > bool3x3
    boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat3x3< int, highp > int3x3
    integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat3x4< double, highp > double3x4
    double-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tvec4< int, highp > int4
    integer vector with 4 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat3x4< bool, highp > bool3x4
    boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat2x3< double, highp > double2x3
    double-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat4x2< double, highp > double4x2
    double-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat2x3< int, highp > int2x3
    integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
    -
    detail::tvec3< double, highp > double3
    double-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat2x4< int, highp > int2x4
    integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat2x4< double, highp > double2x4
    double-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat3x2< float, highp > float3x2
    single-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat4x3< bool, highp > bool4x3
    boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat2x3< float, highp > float2x3
    single-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...
    -
    GLM_FUNC_DECL detail::tquat< T, P > slerp(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Spherical linear interpolation of two quaternions.
    -
    GLM_FUNC_DECL genType clamp(genType const &x, genType const &minVal, genType const &maxVal)
    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...
    -
    detail::tmat3x2< int, highp > int3x2
    integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat2x2< bool, highp > bool2x2
    boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat4x4< float, highp > float4x4
    single-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tvec2< double, highp > double2
    double-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat4x3< int, highp > int4x3
    integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat3x3< double, highp > double3x3
    double-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tvec3< float, highp > float3
    single-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tvec3< bool, highp > bool3
    boolean type with 3 components. (From GLM_GTX_compatibility extension)
    -
    double double1
    double-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...
    -
    detail::tmat4x2< float, highp > float4x2
    single-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...
    -
    bool isfinite(genType const &x)
    Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)...
    -
    detail::tmat3x4< float, highp > float3x4
    single-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...
    -
    detail::tvec2< bool, highp > bool2
    boolean type with 2 components. (From GLM_GTX_compatibility extension)
    -
    detail::tmat2x4< bool, highp > bool2x4
    boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
    -
    detail::tvec4< double, highp > double4
    double-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...
    -
    float float1
    single-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...
    -
    detail::tvec2< float, highp > float2
    single-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...
    +
    145  template <typename genType>
    +
    146  GLM_FUNC_DECL genType e();
    +
    147 
    +
    150  template <typename genType>
    +
    151  GLM_FUNC_DECL genType euler();
    +
    152 
    +
    155  template <typename genType>
    +
    156  GLM_FUNC_DECL genType root_two();
    +
    157 
    +
    160  template <typename genType>
    +
    161  GLM_FUNC_DECL genType root_three();
    +
    162 
    +
    165  template <typename genType>
    +
    166  GLM_FUNC_DECL genType root_five();
    +
    167 
    +
    170  template <typename genType>
    +
    171  GLM_FUNC_DECL genType ln_two();
    +
    172 
    +
    175  template <typename genType>
    +
    176  GLM_FUNC_DECL genType ln_ten();
    +
    177 
    +
    180  template <typename genType>
    +
    181  GLM_FUNC_DECL genType ln_ln_two();
    +
    182 
    +
    185  template <typename genType>
    +
    186  GLM_FUNC_DECL genType third();
    +
    187 
    +
    190  template <typename genType>
    +
    191  GLM_FUNC_DECL genType two_thirds();
    +
    192 
    +
    195  template <typename genType>
    +
    196  GLM_FUNC_DECL genType golden_ratio();
    +
    197 
    +
    199 } //namespace glm
    +
    200 
    +
    201 #include "constants.inl"
    +
    GLM_FUNC_DECL genType two_over_pi()
    Return 2 / pi.
    +
    GLM_FUNC_DECL genType half_pi()
    Return pi / 2.
    +
    GLM_FUNC_DECL genType root_ln_four()
    Return sqrt(ln(4)).
    +
    GLM_FUNC_DECL genType two_pi()
    Return pi * 2.
    +
    GLM_FUNC_DECL genType euler()
    Return Euler's constant.
    +
    GLM_FUNC_DECL genType three_over_two_pi()
    Return pi / 2 * 3.
    +
    GLM_FUNC_DECL genType root_pi()
    Return square root of pi.
    +
    GLM_FUNC_DECL genType one()
    Return 1.
    +
    GLM_FUNC_DECL genType epsilon()
    Return the epsilon constant for floating point types.
    +
    GLM_FUNC_DECL genType root_two()
    Return sqrt(2).
    +
    GLM_FUNC_DECL genType root_five()
    Return sqrt(5).
    +
    GLM_FUNC_DECL genType e()
    Return e constant.
    +
    GLM_FUNC_DECL genType two_thirds()
    Return 2 / 3.
    +
    GLM_FUNC_DECL genType quarter_pi()
    Return pi / 4.
    +
    GLM_FUNC_DECL genType one_over_root_two()
    Return 1 / sqrt(2).
    +
    GLM_FUNC_DECL genType ln_two()
    Return ln(2).
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType root_half_pi()
    Return sqrt(pi / 2).
    +
    GLM_FUNC_DECL genType root_three()
    Return sqrt(3).
    +
    GLM_FUNC_DECL genType ln_ln_two()
    Return ln(ln(2)).
    +
    GLM_FUNC_DECL genType zero()
    Return 0.
    +
    GLM_FUNC_DECL genType four_over_pi()
    Return 4 / pi.
    +
    GLM_FUNC_DECL genType root_two_pi()
    Return sqrt(2 * pi).
    +
    GLM_FUNC_DECL genType pi()
    Return the pi constant.
    +
    GLM_FUNC_DECL genType third()
    Return 1 / 3.
    +
    GLM_FUNC_DECL genType golden_ratio()
    Return the golden ratio constant.
    +
    GLM_FUNC_DECL genType one_over_pi()
    Return 1 / pi.
    +
    GLM_FUNC_DECL genType two_over_root_pi()
    Return 2 / sqrt(pi).
    +
    GLM_FUNC_DECL genType ln_ten()
    Return ln(10).
    +
    GLM_FUNC_DECL genType one_over_two_pi()
    Return 1 / (pi * 2).
    diff --git a/doc/api/a00018.html b/doc/api/a00018.html index bda590c2..49055d63 100644 --- a/doc/api/a00018.html +++ b/doc/api/a00018.html @@ -3,8 +3,8 @@ - -GLM: component_wise.hpp File Reference + +0.9.6: dual_quaternion.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,57 +41,95 @@
    -
    component_wise.hpp File Reference
    +
    dual_quaternion.hpp File Reference

    Go to the source code of this file.

    - - - + + + + + + + + + + + + + + + + + + + + + + + + +

    -Namespaces

     glm
     

    +Typedefs

    typedef highp_ddualquat ddualquat
     
    typedef highp_fdualquat dualquat
     
    typedef highp_fdualquat fdualquat
     
    typedef tdualquat< double, highp > highp_ddualquat
     
    typedef tdualquat< float, highp > highp_dualquat
     
    typedef tdualquat< float, highp > highp_fdualquat
     
    typedef tdualquat< double, lowp > lowp_ddualquat
     
    typedef tdualquat< float, lowp > lowp_dualquat
     
    typedef tdualquat< float, lowp > lowp_fdualquat
     
    typedef tdualquat< double,
    +mediump > 
    mediump_ddualquat
     
    typedef tdualquat< float, mediump > mediump_dualquat
     
    typedef tdualquat< float, mediump > mediump_fdualquat
     
    - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    genType::value_type compAdd (genType const &v)
     
    template<typename genType >
    genType::value_type compMax (genType const &v)
     
    template<typename genType >
    genType::value_type compMin (genType const &v)
     
    template<typename genType >
    genType::value_type compMul (genType const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > dualquat_cast (tmat2x4< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > dualquat_cast (tmat3x4< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > inverse (tdualquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > lerp (tdualquat< T, P > const &x, tdualquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x4< T, P > mat2x4_cast (tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x4< T, P > mat3x4_cast (tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > normalize (tdualquat< T, P > const &q)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_component_wise

    -
    Date
    2007-05-21 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +

    GLM_GTX_dual_quaternion

    +
    Date
    2013-02-10 / 2013-02-20
    +
    Author
    Maksim Vorobiev (msome.nosp@m.one@.nosp@m.gmail.nosp@m..com)
    +
    See also
    GLM Core (dependence)
    +
    +gtc_half_float (dependence)
    +
    +GLM_GTC_constants (dependence)
    +
    +GLM_GTC_quaternion (dependence)
    -

    Definition in file component_wise.hpp.

    +

    Definition in file dual_quaternion.hpp.

    diff --git a/doc/api/a00018_source.html b/doc/api/a00018_source.html index 855e0421..32b4eb51 100644 --- a/doc/api/a00018_source.html +++ b/doc/api/a00018_source.html @@ -3,8 +3,8 @@ - -GLM: component_wise.hpp Source File + +0.9.6: dual_quaternion.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,59 +41,240 @@
    -
    component_wise.hpp
    +
    dual_quaternion.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_component_wise
    -
    39 #define GLM_GTX_component_wise
    -
    40 
    -
    41 // Dependencies
    -
    42 #include "../detail/setup.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_component_wise extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename genType>
    -
    56  typename genType::value_type compAdd(
    -
    57  genType const & v);
    -
    58 
    -
    61  template <typename genType>
    -
    62  typename genType::value_type compMul(
    -
    63  genType const & v);
    -
    64 
    -
    67  template <typename genType>
    -
    68  typename genType::value_type compMin(
    -
    69  genType const & v);
    -
    70 
    -
    73  template <typename genType>
    -
    74  typename genType::value_type compMax(
    -
    75  genType const & v);
    +
    41 #pragma once
    +
    42 
    +
    43 // Dependency:
    +
    44 #include "../glm.hpp"
    +
    45 #include "../gtc/constants.hpp"
    +
    46 #include "../gtc/quaternion.hpp"
    +
    47 
    +
    48 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    49 # pragma message("GLM: GLM_GTX_dual_quaternion extension included")
    +
    50 #endif
    +
    51 
    +
    52 namespace glm
    +
    53 {
    +
    56 
    +
    57  template <typename T, precision P>
    +
    58  struct tdualquat
    +
    59  {
    +
    60  typedef T value_type;
    +
    61  typedef glm::tquat<T, P> part_type;
    +
    62 
    +
    63  public:
    +
    64  glm::tquat<T, P> real, dual;
    +
    65 
    +
    66 #if GLM_FORCE_SIZE_FUNC
    +
    67  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    69 #else
    +
    70  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    72 #endif//GLM_FORCE_SIZE_FUNC
    +
    73 
    +
    75  // Implicit basic constructors
    76 
    -
    78 }//namespace glm
    -
    79 
    -
    80 #include "component_wise.inl"
    -
    81 
    -
    82 #endif//GLM_GTX_component_wise
    -
    genType::value_type compMin(genType const &v)
    Find the minimum value between single vector components.
    -
    genType::value_type compMul(genType const &v)
    Multiply all vector components together.
    -
    genType::value_type compMax(genType const &v)
    Find the maximum value between single vector components.
    -
    genType::value_type compAdd(genType const &v)
    Add all vector components together.
    +
    77  GLM_FUNC_DECL tdualquat();
    +
    78  template <precision Q>
    +
    79  GLM_FUNC_DECL tdualquat(tdualquat<T, Q> const & d);
    +
    80 
    +
    82  // Explicit basic constructors
    +
    83 
    +
    84  GLM_FUNC_DECL explicit tdualquat(ctor);
    +
    85  GLM_FUNC_DECL explicit tdualquat(tquat<T, P> const & real);
    +
    86  GLM_FUNC_DECL tdualquat(tquat<T, P> const & orientation, tvec3<T, P> const & translation);
    +
    87  GLM_FUNC_DECL tdualquat(tquat<T, P> const & real, tquat<T, P> const & dual);
    +
    88 
    +
    90  // tdualquat conversions
    +
    91 
    +
    92 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    93  template <typename U, precision Q>
    +
    94  GLM_FUNC_DECL explicit tdualquat(tdualquat<U, Q> const & q);
    +
    95 # else
    +
    96  template <typename U, precision Q>
    +
    97  GLM_FUNC_DECL tdualquat(tdualquat<U, Q> const & q);
    +
    98 # endif
    +
    99 
    +
    100  GLM_FUNC_DECL explicit tdualquat(tmat2x4<T, P> const & holder_mat);
    +
    101  GLM_FUNC_DECL explicit tdualquat(tmat3x4<T, P> const & aug_mat);
    +
    102 
    +
    103  // Accesses
    +
    104  GLM_FUNC_DECL part_type & operator[](int i);
    +
    105  GLM_FUNC_DECL part_type const & operator[](int i) const;
    +
    106 
    +
    107  // Operators
    +
    108  GLM_FUNC_DECL tdualquat<T, P> & operator*=(T const & s);
    +
    109  GLM_FUNC_DECL tdualquat<T, P> & operator/=(T const & s);
    +
    110  };
    +
    111 
    +
    112  template <typename T, precision P>
    +
    113  GLM_FUNC_DECL tquat<T, P> operator- (
    +
    114  tquat<T, P> const & q);
    +
    115 
    +
    116  template <typename T, precision P>
    +
    117  GLM_FUNC_DECL tdualquat<T, P> operator+ (
    +
    118  tdualquat<T, P> const & q,
    +
    119  tdualquat<T, P> const & p);
    +
    120 
    +
    121  template <typename T, precision P>
    +
    122  GLM_FUNC_DECL tdualquat<T, P> operator* (
    +
    123  tdualquat<T, P> const & q,
    +
    124  tdualquat<T, P> const & p);
    +
    125 
    +
    126  template <typename T, precision P>
    +
    127  GLM_FUNC_DECL tvec3<T, P> operator* (
    +
    128  tquat<T, P> const & q,
    +
    129  tvec3<T, P> const & v);
    +
    130 
    +
    131  template <typename T, precision P>
    +
    132  GLM_FUNC_DECL tvec3<T, P> operator* (
    +
    133  tvec3<T, P> const & v,
    +
    134  tquat<T, P> const & q);
    +
    135 
    +
    136  template <typename T, precision P>
    +
    137  GLM_FUNC_DECL tvec4<T, P> operator* (
    +
    138  tquat<T, P> const & q,
    +
    139  tvec4<T, P> const & v);
    +
    140 
    +
    141  template <typename T, precision P>
    +
    142  GLM_FUNC_DECL tvec4<T, P> operator* (
    +
    143  tvec4<T, P> const & v,
    +
    144  tquat<T, P> const & q);
    +
    145 
    +
    146  template <typename T, precision P>
    +
    147  GLM_FUNC_DECL tdualquat<T, P> operator* (
    +
    148  tdualquat<T, P> const & q,
    +
    149  T const & s);
    +
    150 
    +
    151  template <typename T, precision P>
    +
    152  GLM_FUNC_DECL tdualquat<T, P> operator* (
    +
    153  T const & s,
    +
    154  tdualquat<T, P> const & q);
    +
    155 
    +
    156  template <typename T, precision P>
    +
    157  GLM_FUNC_DECL tdualquat<T, P> operator/ (
    +
    158  tdualquat<T, P> const & q,
    +
    159  T const & s);
    +
    160 
    +
    164  template <typename T, precision P>
    +
    165  GLM_FUNC_DECL tdualquat<T, P> normalize(
    +
    166  tdualquat<T, P> const & q);
    +
    167 
    +
    171  template <typename T, precision P>
    +
    172  GLM_FUNC_DECL tdualquat<T, P> lerp(
    +
    173  tdualquat<T, P> const & x,
    +
    174  tdualquat<T, P> const & y,
    +
    175  T const & a);
    +
    176 
    +
    180  template <typename T, precision P>
    +
    181  GLM_FUNC_DECL tdualquat<T, P> inverse(
    +
    182  tdualquat<T, P> const & q);
    +
    183 
    +
    187  template <typename T, precision P>
    +
    188  GLM_FUNC_DECL tmat2x4<T, P> mat2x4_cast(
    +
    189  tdualquat<T, P> const & x);
    +
    190 
    +
    194  template <typename T, precision P>
    +
    195  GLM_FUNC_DECL tmat3x4<T, P> mat3x4_cast(
    +
    196  tdualquat<T, P> const & x);
    +
    197 
    +
    201  template <typename T, precision P>
    +
    202  GLM_FUNC_DECL tdualquat<T, P> dualquat_cast(
    +
    203  tmat2x4<T, P> const & x);
    +
    204 
    +
    208  template <typename T, precision P>
    +
    209  GLM_FUNC_DECL tdualquat<T, P> dualquat_cast(
    +
    210  tmat3x4<T, P> const & x);
    +
    211 
    +
    212 
    +
    216  typedef tdualquat<float, lowp> lowp_dualquat;
    +
    217 
    +
    221  typedef tdualquat<float, mediump> mediump_dualquat;
    +
    222 
    +
    226  typedef tdualquat<float, highp> highp_dualquat;
    +
    227 
    +
    228 
    +
    232  typedef tdualquat<float, lowp> lowp_fdualquat;
    +
    233 
    +
    237  typedef tdualquat<float, mediump> mediump_fdualquat;
    +
    238 
    +
    242  typedef tdualquat<float, highp> highp_fdualquat;
    +
    243 
    +
    244 
    +
    248  typedef tdualquat<double, lowp> lowp_ddualquat;
    +
    249 
    +
    253  typedef tdualquat<double, mediump> mediump_ddualquat;
    +
    254 
    +
    258  typedef tdualquat<double, highp> highp_ddualquat;
    +
    259 
    +
    260 
    +
    261 #if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    262  typedef highp_fdualquat dualquat;
    +
    266 
    +
    270  typedef highp_fdualquat fdualquat;
    +
    271 #elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    272  typedef highp_fdualquat dualquat;
    +
    273  typedef highp_fdualquat fdualquat;
    +
    274 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    275  typedef mediump_fdualquat dualquat;
    +
    276  typedef mediump_fdualquat fdualquat;
    +
    277 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
    +
    278  typedef lowp_fdualquat dualquat;
    +
    279  typedef lowp_fdualquat fdualquat;
    +
    280 #else
    +
    281 # error "GLM error: multiple default precision requested for single-precision floating-point types"
    +
    282 #endif
    +
    283 
    +
    284 
    +
    285 #if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    286  typedef highp_ddualquat ddualquat;
    +
    290 #elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    291  typedef highp_ddualquat ddualquat;
    +
    292 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    293  typedef mediump_ddualquat ddualquat;
    +
    294 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    295  typedef lowp_ddualquat ddualquat;
    +
    296 #else
    +
    297 # error "GLM error: Multiple default precision requested for double-precision floating-point types"
    +
    298 #endif
    +
    299 
    +
    301 } //namespace glm
    +
    302 
    +
    303 #include "dual_quaternion.inl"
    +
    GLM_FUNC_DECL tdualquat< T, P > lerp(tdualquat< T, P > const &x, tdualquat< T, P > const &y, T const &a)
    Returns the linear interpolation of two dual quaternion.
    +
    tdualquat< double, lowp > lowp_ddualquat
    Dual-quaternion of low double-precision floating-point numbers.
    +
    highp_ddualquat ddualquat
    Dual-quaternion of default double-precision floating-point numbers.
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    tdualquat< double, highp > highp_ddualquat
    Dual-quaternion of high double-precision floating-point numbers.
    +
    GLM_FUNC_DECL tdualquat< T, P > normalize(tdualquat< T, P > const &q)
    Returns the normalized quaternion.
    +
    GLM_FUNC_DECL tmat2x4< T, P > mat2x4_cast(tdualquat< T, P > const &x)
    Converts a quaternion to a 2 * 4 matrix.
    +
    tdualquat< float, lowp > lowp_fdualquat
    Dual-quaternion of low single-precision floating-point numbers.
    +
    highp_fdualquat dualquat
    Dual-quaternion of floating-point numbers.
    +
    GLM_FUNC_DECL tmat3x4< T, P > mat3x4_cast(tdualquat< T, P > const &x)
    Converts a quaternion to a 3 * 4 matrix.
    +
    tdualquat< float, highp > highp_fdualquat
    Dual-quaternion of high single-precision floating-point numbers.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tdualquat< T, P > dualquat_cast(tmat3x4< T, P > const &x)
    Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.
    +
    tdualquat< float, highp > highp_dualquat
    Dual-quaternion of high single-precision floating-point numbers.
    +
    tdualquat< float, mediump > mediump_fdualquat
    Dual-quaternion of medium single-precision floating-point numbers.
    +
    tdualquat< float, mediump > mediump_dualquat
    Dual-quaternion of medium single-precision floating-point numbers.
    +
    highp_fdualquat fdualquat
    Dual-quaternion of single-precision floating-point numbers.
    +
    tdualquat< float, lowp > lowp_dualquat
    Dual-quaternion of low single-precision floating-point numbers.
    +
    GLM_FUNC_DECL tmat4x4< T, P > orientation(tvec3< T, P > const &Normal, tvec3< T, P > const &Up)
    Build a rotation matrix from a normal and a up vector.
    +
    GLM_FUNC_DECL tdualquat< T, P > inverse(tdualquat< T, P > const &q)
    Returns the q inverse.
    +
    tdualquat< double, mediump > mediump_ddualquat
    Dual-quaternion of medium double-precision floating-point numbers.
    diff --git a/doc/api/a00019.html b/doc/api/a00019.html index 7e8f8f26..6496e36a 100644 --- a/doc/api/a00019.html +++ b/doc/api/a00019.html @@ -3,8 +3,8 @@ - -GLM: constants.hpp File Reference + +0.9.6: epsilon.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,122 +41,55 @@
    -
    gtc/constants.hpp File Reference
    +
    epsilon.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType e ()
     
    template<typename genType >
    GLM_FUNC_DECL genType epsilon ()
     
    template<typename genType >
    GLM_FUNC_DECL genType euler ()
     
    template<typename genType >
    GLM_FUNC_DECL genType golden_ratio ()
     
    template<typename genType >
    GLM_FUNC_DECL genType half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ln_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ten ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_root_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType quarter_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_five ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_ln_four ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_three ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType third ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_thirds ()
     
    template<typename genType >
    GLM_FUNC_DECL genType zero ()
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > epsilonEqual (vecType< T, P > const &x, vecType< T, P > const &y, T const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonEqual (genType const &x, genType const &y, genType const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL genType::boolType epsilonNotEqual (genType const &x, genType const &y, typename genType::value_type const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonNotEqual (genType const &x, genType const &y, genType const &epsilon)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_constants

    -
    Date
    2011-09-30 / 2012-01-25
    +

    GLM_GTC_epsilon

    +
    Date
    2012-04-07 / 2012-04-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -gtc_half_float (dependence)
    +gtc_half_float (dependence) +
    +GLM_GTC_quaternion (dependence)
    -

    Definition in file gtc/constants.hpp.

    +

    Definition in file epsilon.hpp.

    diff --git a/doc/api/a00019_source.html b/doc/api/a00019_source.html index b83646c9..df6278ec 100644 --- a/doc/api/a00019_source.html +++ b/doc/api/a00019_source.html @@ -3,8 +3,8 @@ - -GLM: constants.hpp Source File + +0.9.6: epsilon.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,139 +41,65 @@
    -
    gtc/constants.hpp
    +
    epsilon.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTC_constants
    -
    40 #define GLM_GTC_constants
    -
    41 
    +
    40 #pragma once
    +
    41 
    42 // Dependencies
    43 #include "../detail/setup.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTC_constants extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    57  template <typename genType>
    -
    58  GLM_FUNC_DECL genType epsilon();
    -
    59 
    -
    62  template <typename genType>
    -
    63  GLM_FUNC_DECL genType zero();
    +
    44 #include "../detail/precision.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    47 # pragma message("GLM: GLM_GTC_epsilon extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    59  template <typename T, precision P, template <typename, precision> class vecType>
    +
    60  GLM_FUNC_DECL vecType<bool, P> epsilonEqual(
    +
    61  vecType<T, P> const & x,
    +
    62  vecType<T, P> const & y,
    +
    63  T const & epsilon);
    64 
    -
    67  template <typename genType>
    -
    68  GLM_FUNC_DECL genType one();
    -
    69 
    -
    72  template <typename genType>
    -
    73  GLM_FUNC_DECL genType pi();
    +
    69  template <typename genType>
    +
    70  GLM_FUNC_DECL bool epsilonEqual(
    +
    71  genType const & x,
    +
    72  genType const & y,
    +
    73  genType const & epsilon);
    74 
    -
    77  template <typename genType>
    -
    78  GLM_FUNC_DECL genType root_pi();
    -
    79 
    -
    82  template <typename genType>
    -
    83  GLM_FUNC_DECL genType half_pi();
    +
    79  template <typename genType>
    +
    80  GLM_FUNC_DECL typename genType::boolType epsilonNotEqual(
    +
    81  genType const & x,
    +
    82  genType const & y,
    +
    83  typename genType::value_type const & epsilon);
    84 
    -
    87  template <typename genType>
    -
    88  GLM_FUNC_DECL genType quarter_pi();
    -
    89 
    -
    92  template <typename genType>
    -
    93  GLM_FUNC_DECL genType one_over_pi();
    +
    89  template <typename genType>
    +
    90  GLM_FUNC_DECL bool epsilonNotEqual(
    +
    91  genType const & x,
    +
    92  genType const & y,
    +
    93  genType const & epsilon);
    94 
    -
    97  template <typename genType>
    -
    98  GLM_FUNC_DECL genType two_over_pi();
    -
    99 
    -
    102  template <typename genType>
    -
    103  GLM_FUNC_DECL genType two_over_root_pi();
    -
    104 
    -
    107  template <typename genType>
    -
    108  GLM_FUNC_DECL genType one_over_root_two();
    -
    109 
    -
    112  template <typename genType>
    -
    113  GLM_FUNC_DECL genType root_half_pi();
    -
    114 
    -
    117  template <typename genType>
    -
    118  GLM_FUNC_DECL genType root_two_pi();
    -
    119 
    -
    122  template <typename genType>
    -
    123  GLM_FUNC_DECL genType root_ln_four();
    -
    124 
    -
    127  template <typename genType>
    -
    128  GLM_FUNC_DECL genType e();
    -
    129 
    -
    132  template <typename genType>
    -
    133  GLM_FUNC_DECL genType euler();
    -
    134 
    -
    137  template <typename genType>
    -
    138  GLM_FUNC_DECL genType root_two();
    -
    139 
    -
    142  template <typename genType>
    -
    143  GLM_FUNC_DECL genType root_three();
    -
    144 
    -
    147  template <typename genType>
    -
    148  GLM_FUNC_DECL genType root_five();
    -
    149 
    -
    152  template <typename genType>
    -
    153  GLM_FUNC_DECL genType ln_two();
    -
    154 
    -
    157  template <typename genType>
    -
    158  GLM_FUNC_DECL genType ln_ten();
    -
    159 
    -
    162  template <typename genType>
    -
    163  GLM_FUNC_DECL genType ln_ln_two();
    -
    164 
    -
    167  template <typename genType>
    -
    168  GLM_FUNC_DECL genType third();
    -
    169 
    -
    172  template <typename genType>
    -
    173  GLM_FUNC_DECL genType two_thirds();
    -
    174 
    -
    177  template <typename genType>
    -
    178  GLM_FUNC_DECL genType golden_ratio();
    -
    179 
    -
    181 } //namespace glm
    -
    182 
    -
    183 #include "constants.inl"
    -
    184 
    -
    185 #endif//GLM_GTC_constants
    -
    GLM_FUNC_DECL genType e()
    Return e constant.
    -
    GLM_FUNC_DECL genType epsilon()
    Return the epsilon constant for floating point types.
    -
    GLM_FUNC_DECL genType golden_ratio()
    Return the golden ratio constant.
    -
    GLM_FUNC_DECL genType root_ln_four()
    Return sqrt(ln(4)).
    -
    GLM_FUNC_DECL genType root_three()
    Return sqrt(3).
    -
    GLM_FUNC_DECL genType pi()
    Return the pi constant.
    -
    GLM_FUNC_DECL genType root_two_pi()
    Return sqrt(2 * pi).
    -
    GLM_FUNC_DECL genType ln_ten()
    Return ln(10).
    -
    GLM_FUNC_DECL genType one()
    Return 1.
    -
    GLM_FUNC_DECL genType two_thirds()
    Return 2 / 3.
    -
    GLM_FUNC_DECL genType zero()
    Return 0.
    -
    GLM_FUNC_DECL genType one_over_root_two()
    Return 1 / sqrt(2).
    -
    GLM_FUNC_DECL genType ln_two()
    Return ln(2).
    -
    GLM_FUNC_DECL genType two_over_root_pi()
    Return 2 / sqrt(pi).
    -
    GLM_FUNC_DECL genType root_two()
    Return sqrt(2).
    -
    GLM_FUNC_DECL genType two_over_pi()
    Return 2 / pi.
    -
    GLM_FUNC_DECL genType half_pi()
    Return pi / 2.
    -
    GLM_FUNC_DECL genType quarter_pi()
    Return pi / 4.
    -
    GLM_FUNC_DECL genType one_over_pi()
    Return 1 / pi.
    -
    GLM_FUNC_DECL genType euler()
    Return Euler&#39;s constant.
    -
    GLM_FUNC_DECL genType third()
    Return 1 / 3.
    -
    GLM_FUNC_DECL genType root_pi()
    Return square root of pi.
    -
    GLM_FUNC_DECL genType root_half_pi()
    Return sqrt(pi / 2).
    -
    GLM_FUNC_DECL genType root_five()
    Return sqrt(5).
    -
    GLM_FUNC_DECL genType ln_ln_two()
    Return ln(ln(2)).
    +
    96 }//namespace glm
    +
    97 
    +
    98 #include "epsilon.inl"
    +
    GLM_FUNC_DECL bool epsilonNotEqual(genType const &x, genType const &y, genType const &epsilon)
    Returns the component-wise comparison of |x - y| >= epsilon.
    +
    GLM_FUNC_DECL genType epsilon()
    Return the epsilon constant for floating point types.
    +
    GLM_FUNC_DECL bool epsilonEqual(genType const &x, genType const &y, genType const &epsilon)
    Returns the component-wise comparison of |x - y| < epsilon.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00020.html b/doc/api/a00020.html new file mode 100644 index 00000000..603dcd2f --- /dev/null +++ b/doc/api/a00020.html @@ -0,0 +1,139 @@ + + + + + + +0.9.6: euler_angles.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    euler_angles.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleX (T const &angleX)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleXY (T const &angleX, T const &angleY)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleXZ (T const &angleX, T const &angleZ)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleY (T const &angleY)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleYX (T const &angleY, T const &angleX)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleYXZ (T const &yaw, T const &pitch, T const &roll)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleYZ (T const &angleY, T const &angleZ)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleZ (T const &angleZ)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleZX (T const &angle, T const &angleX)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleZY (T const &angleZ, T const &angleY)
     
    template<typename T >
    GLM_FUNC_DECL tmat2x2< T,
    +defaultp > 
    orientate2 (T const &angle)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x3< T,
    +defaultp > 
    orientate3 (T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > orientate3 (tvec3< T, P > const &angles)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > orientate4 (tvec3< T, P > const &angles)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    yawPitchRoll (T const &yaw, T const &pitch, T const &roll)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_euler_angles

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +gtc_half_float (dependence)
    + +

    Definition in file euler_angles.hpp.

    +
    + + + + diff --git a/doc/api/a00020_source.html b/doc/api/a00020_source.html index 2e389a44..714d2290 100644 --- a/doc/api/a00020_source.html +++ b/doc/api/a00020_source.html @@ -3,8 +3,8 @@ - -GLM: constants.hpp Source File + +0.9.6: euler_angles.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,31 +41,121 @@
    -
    gtx/constants.hpp
    +
    euler_angles.hpp
    -
    1 
    -
    24 #ifndef GLM_GTX_constants
    -
    25 #define GLM_GTX_constants
    -
    26 
    -
    27 #include "../gtc/constants.hpp"
    -
    28 
    -
    29 #if(defined(GLM_MESSAGES))
    -
    30 # pragma message("GLM: GLM_GTX_constants extension is deprecated, include GLM_GTC_constants (glm/gtc/constants.hpp) instead")
    -
    31 #endif
    -
    32 
    -
    33 #endif//GLM_GTX_constants
    +Go to the documentation of this file.
    1 
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_euler_angles extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T>
    +
    56  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleX(
    +
    57  T const & angleX);
    +
    58 
    +
    61  template <typename T>
    +
    62  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleY(
    +
    63  T const & angleY);
    +
    64 
    +
    67  template <typename T>
    +
    68  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleZ(
    +
    69  T const & angleZ);
    +
    70 
    +
    73  template <typename T>
    +
    74  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleXY(
    +
    75  T const & angleX,
    +
    76  T const & angleY);
    +
    77 
    +
    80  template <typename T>
    +
    81  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleYX(
    +
    82  T const & angleY,
    +
    83  T const & angleX);
    +
    84 
    +
    87  template <typename T>
    +
    88  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleXZ(
    +
    89  T const & angleX,
    +
    90  T const & angleZ);
    +
    91 
    +
    94  template <typename T>
    +
    95  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleZX(
    +
    96  T const & angle,
    +
    97  T const & angleX);
    +
    98 
    +
    101  template <typename T>
    +
    102  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleYZ(
    +
    103  T const & angleY,
    +
    104  T const & angleZ);
    +
    105 
    +
    108  template <typename T>
    +
    109  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleZY(
    +
    110  T const & angleZ,
    +
    111  T const & angleY);
    +
    112 
    +
    115  template <typename T>
    +
    116  GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleYXZ(
    +
    117  T const & yaw,
    +
    118  T const & pitch,
    +
    119  T const & roll);
    +
    120 
    +
    123  template <typename T>
    +
    124  GLM_FUNC_DECL tmat4x4<T, defaultp> yawPitchRoll(
    +
    125  T const & yaw,
    +
    126  T const & pitch,
    +
    127  T const & roll);
    +
    128 
    +
    131  template <typename T>
    +
    132  GLM_FUNC_DECL tmat2x2<T, defaultp> orientate2(T const & angle);
    +
    133 
    +
    136  template <typename T>
    +
    137  GLM_FUNC_DECL tmat3x3<T, defaultp> orientate3(T const & angle);
    +
    138 
    +
    141  template <typename T, precision P>
    +
    142  GLM_FUNC_DECL tmat3x3<T, P> orientate3(tvec3<T, P> const & angles);
    +
    143 
    +
    146  template <typename T, precision P>
    +
    147  GLM_FUNC_DECL tmat4x4<T, P> orientate4(tvec3<T, P> const & angles);
    +
    148 
    +
    150 }//namespace glm
    +
    151 
    +
    152 #include "euler_angles.inl"
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleXZ(T const &angleX, T const &angleZ)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).
    +
    GLM_FUNC_DECL T yaw(tquat< T, P > const &x)
    Returns yaw value of euler angles expressed in radians.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleXY(T const &angleX, T const &angleY)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleYXZ(T const &yaw, T const &pitch, T const &roll)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleZX(T const &angle, T const &angleX)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleY(T const &angleY)
    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleZ(T const &angleZ)
    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > yawPitchRoll(T const &yaw, T const &pitch, T const &roll)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleZY(T const &angleZ, T const &angleY)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_DECL T roll(tquat< T, P > const &x)
    Returns roll value of euler angles expressed in radians.
    +
    GLM_FUNC_DECL tmat3x3< T, P > orientate3(tvec3< T, P > const &angles)
    Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).
    +
    GLM_FUNC_DECL T pitch(tquat< T, P > const &x)
    Returns pitch value of euler angles expressed in radians.
    +
    GLM_FUNC_DECL tmat2x2< T, defaultp > orientate2(T const &angle)
    Creates a 2D 2 * 2 rotation matrix from an euler angle.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleYZ(T const &angleY, T const &angleZ)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).
    +
    GLM_FUNC_DECL tmat4x4< T, P > orientate4(tvec3< T, P > const &angles)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleYX(T const &angleY, T const &angleX)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleX(T const &angleX)
    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.
    diff --git a/doc/api/a00021.html b/doc/api/a00021.html index 06030164..89f4f421 100644 --- a/doc/api/a00021.html +++ b/doc/api/a00021.html @@ -3,8 +3,8 @@ - -GLM: dual_quaternion.hpp File Reference + +0.9.6: exponential.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,109 +41,32 @@
    -
    -
    dual_quaternion.hpp File Reference
    +
    exponential.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    typedef highp_ddualquat ddualquat
     
    typedef highp_fdualquat dualquat
     
    typedef highp_fdualquat fdualquat
     
    typedef detail::tdualquat
    -< double, highp > 
    highp_ddualquat
     
    typedef detail::tdualquat
    -< float, highp > 
    highp_dualquat
     
    typedef detail::tdualquat
    -< float, highp > 
    highp_fdualquat
     
    typedef detail::tdualquat
    -< double, lowp > 
    lowp_ddualquat
     
    typedef detail::tdualquat
    -< float, lowp > 
    lowp_dualquat
     
    typedef detail::tdualquat
    -< float, lowp > 
    lowp_fdualquat
     
    typedef detail::tdualquat
    -< double, mediump > 
    mediump_ddualquat
     
    typedef detail::tdualquat
    -< float, mediump > 
    mediump_dualquat
     
    typedef detail::tdualquat
    -< float, mediump > 
    mediump_fdualquat
     
    - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename T , precision P>
    detail::tdualquat< T, P > dualquat_cast (detail::tmat2x4< T, P > const &x)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > dualquat_cast (detail::tmat3x4< T, P > const &x)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > inverse (detail::tdualquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > lerp (detail::tdualquat< T, P > const &x, detail::tdualquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    detail::tmat2x4< T, P > mat2x4_cast (detail::tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat3x4< T, P > mat3x4_cast (detail::tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > normalize (detail::tdualquat< T, P > const &q)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    gtx_dual_quaternion

    -
    Date
    2013-02-10 / 2013-02-20
    -
    Author
    Maksim Vorobiev (msome.nosp@m.one@.nosp@m.gmail.nosp@m..com)
    -
    See Also
    GLM Core (dependence)
    -
    -gtc_half_float (dependence)
    -
    -GLM_GTC_constants (dependence)
    -
    -GLM_GTC_quaternion (dependence)
    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    -

    Definition in file dual_quaternion.hpp.

    +

    Definition in file exponential.hpp.

    diff --git a/doc/api/a00021_source.html b/doc/api/a00021_source.html index b70355cf..1053d60e 100644 --- a/doc/api/a00021_source.html +++ b/doc/api/a00021_source.html @@ -3,8 +3,8 @@ - -GLM: dual_quaternion.hpp Source File + +0.9.6: exponential.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,231 +41,25 @@
    -
    dual_quaternion.hpp
    +
    exponential.hpp
    Go to the documentation of this file.
    1 
    -
    41 #ifndef GLM_GTX_dual_quaternion
    -
    42 #define GLM_GTX_dual_quaternion
    -
    43 
    -
    44 // Dependency:
    -
    45 #include "../glm.hpp"
    -
    46 #include "../gtc/constants.hpp"
    -
    47 #include "../gtc/quaternion.hpp"
    -
    48 
    -
    49 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    50 # pragma message("GLM: GLM_GTX_dual_quaternion extension included")
    -
    51 #endif
    -
    52 
    -
    53 namespace glm{
    -
    54 namespace detail
    -
    55 {
    -
    56  template <typename T, precision P>
    -
    57  struct tdualquat
    -
    58  {
    -
    59  enum ctor{null};
    -
    60 
    -
    61  typedef glm::detail::tquat<T, P> part_type;
    -
    62 
    -
    63  public:
    -
    64  glm::detail::tquat<T, P> real, dual;
    -
    65 
    -
    66  GLM_FUNC_DECL GLM_CONSTEXPR int length() const;
    -
    67 
    -
    68  // Constructors
    -
    69  tdualquat();
    -
    70  explicit tdualquat(tquat<T, P> const & real);
    -
    71  tdualquat(tquat<T, P> const & real,tquat<T, P> const & dual);
    -
    72  tdualquat(tquat<T, P> const & orientation,tvec3<T, P> const& translation);
    -
    73 
    -
    75  // tdualquat conversions
    -
    76  explicit tdualquat(tmat2x4<T, P> const & holder_mat);
    -
    77  explicit tdualquat(tmat3x4<T, P> const & aug_mat);
    -
    78 
    -
    79  // Accesses
    -
    80  part_type & operator[](int i);
    -
    81  part_type const & operator[](int i) const;
    -
    82 
    -
    83  // Operators
    -
    84  tdualquat<T, P> & operator*=(T const & s);
    -
    85  tdualquat<T, P> & operator/=(T const & s);
    -
    86  };
    -
    87 
    -
    88  template <typename T, precision P>
    -
    89  detail::tquat<T, P> operator- (
    -
    90  detail::tquat<T, P> const & q);
    -
    91 
    -
    92  template <typename T, precision P>
    -
    93  detail::tdualquat<T, P> operator+ (
    -
    94  detail::tdualquat<T, P> const & q,
    -
    95  detail::tdualquat<T, P> const & p);
    -
    96 
    -
    97  template <typename T, precision P>
    -
    98  detail::tdualquat<T, P> operator* (
    -
    99  detail::tdualquat<T, P> const & q,
    -
    100  detail::tdualquat<T, P> const & p);
    -
    101 
    -
    102  template <typename T, precision P>
    -
    103  detail::tvec3<T, P> operator* (
    -
    104  detail::tquat<T, P> const & q,
    -
    105  detail::tvec3<T, P> const & v);
    -
    106 
    -
    107  template <typename T, precision P>
    -
    108  detail::tvec3<T, P> operator* (
    -
    109  detail::tvec3<T, P> const & v,
    -
    110  detail::tquat<T, P> const & q);
    -
    111 
    -
    112  template <typename T, precision P>
    -
    113  detail::tvec4<T, P> operator* (
    -
    114  detail::tquat<T, P> const & q,
    -
    115  detail::tvec4<T, P> const & v);
    -
    116 
    -
    117  template <typename T, precision P>
    -
    118  detail::tvec4<T, P> operator* (
    -
    119  detail::tvec4<T, P> const & v,
    -
    120  detail::tquat<T, P> const & q);
    -
    121 
    -
    122  template <typename T, precision P>
    -
    123  detail::tdualquat<T, P> operator* (
    -
    124  detail::tdualquat<T, P> const & q,
    -
    125  T const & s);
    -
    126 
    -
    127  template <typename T, precision P>
    -
    128  detail::tdualquat<T, P> operator* (
    -
    129  T const & s,
    -
    130  detail::tdualquat<T, P> const & q);
    -
    131 
    -
    132  template <typename T, precision P>
    -
    133  detail::tdualquat<T, P> operator/ (
    -
    134  detail::tdualquat<T, P> const & q,
    -
    135  T const & s);
    -
    136 } //namespace detail
    -
    137 
    -
    140 
    -
    144  template <typename T, precision P>
    -
    145  detail::tdualquat<T, P> normalize(
    -
    146  detail::tdualquat<T, P> const & q);
    -
    147 
    -
    151  template <typename T, precision P>
    -
    152  detail::tdualquat<T, P> lerp(
    -
    153  detail::tdualquat<T, P> const & x,
    -
    154  detail::tdualquat<T, P> const & y,
    -
    155  T const & a);
    -
    156 
    -
    160  template <typename T, precision P>
    -
    161  detail::tdualquat<T, P> inverse(
    -
    162  detail::tdualquat<T, P> const & q);
    -
    163 
    -
    164  /*
    -
    169  template <typename T, precision P>
    -
    170  detail::tmat3x3<T, P> mat3_cast(
    -
    171  detail::tdualquat<T, P> const & x);
    -
    172  */
    -
    173 
    -
    177  template <typename T, precision P>
    -
    178  detail::tmat2x4<T, P> mat2x4_cast(
    -
    179  detail::tdualquat<T, P> const & x);
    -
    180 
    -
    184  template <typename T, precision P>
    -
    185  detail::tmat3x4<T, P> mat3x4_cast(
    -
    186  detail::tdualquat<T, P> const & x);
    -
    187 
    -
    191  template <typename T, precision P>
    -
    192  detail::tdualquat<T, P> dualquat_cast(
    -
    193  detail::tmat2x4<T, P> const & x);
    -
    194 
    -
    198  template <typename T, precision P>
    -
    199  detail::tdualquat<T, P> dualquat_cast(
    -
    200  detail::tmat3x4<T, P> const & x);
    -
    201 
    -
    202 
    -
    206  typedef detail::tdualquat<float, lowp> lowp_dualquat;
    -
    207 
    -
    211  typedef detail::tdualquat<float, mediump> mediump_dualquat;
    -
    212 
    -
    216  typedef detail::tdualquat<float, highp> highp_dualquat;
    -
    217 
    -
    218 
    -
    222  typedef detail::tdualquat<float, lowp> lowp_fdualquat;
    -
    223 
    -
    227  typedef detail::tdualquat<float, mediump> mediump_fdualquat;
    -
    228 
    -
    232  typedef detail::tdualquat<float, highp> highp_fdualquat;
    -
    233 
    -
    234 
    -
    238  typedef detail::tdualquat<double, lowp> lowp_ddualquat;
    -
    239 
    -
    243  typedef detail::tdualquat<double, mediump> mediump_ddualquat;
    -
    244 
    -
    248  typedef detail::tdualquat<double, highp> highp_ddualquat;
    -
    249 
    -
    250 
    -
    251 #if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -
    252  typedef highp_fdualquat dualquat;
    -
    256 
    - -
    261 #elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -
    262  typedef highp_fdualquat dualquat;
    -
    263  typedef highp_fdualquat fdualquat;
    -
    264 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -
    265  typedef mediump_fdualquat dualquat;
    - -
    267 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
    -
    268  typedef lowp_fdualquat dualquat;
    -
    269  typedef lowp_fdualquat fdualquat;
    -
    270 #else
    -
    271 # error "GLM error: multiple default precision requested for single-precision floating-point types"
    -
    272 #endif
    -
    273 
    -
    274 
    -
    275 #if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    276  typedef highp_ddualquat ddualquat;
    -
    280 #elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    281  typedef highp_ddualquat ddualquat;
    -
    282 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    - -
    284 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    285  typedef lowp_ddualquat ddualquat;
    -
    286 #else
    -
    287 # error "GLM error: Multiple default precision requested for double-precision floating-point types"
    -
    288 #endif
    -
    289 
    -
    291 } //namespace glm
    -
    292 
    -
    293 #include "dual_quaternion.inl"
    -
    294 
    -
    295 #endif//GLM_GTX_dual_quaternion
    -
    detail::tdualquat< float, highp > highp_dualquat
    Dual-quaternion of high single-precision floating-point numbers.
    -
    GLM_FUNC_DECL detail::tquat< T, P > lerp(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Linear interpolation of two quaternions.
    -
    detail::tmat3x4< T, P > mat3x4_cast(detail::tdualquat< T, P > const &x)
    Converts a quaternion to a 3 * 4 matrix.
    -
    detail::tdualquat< double, highp > highp_ddualquat
    Dual-quaternion of high double-precision floating-point numbers.
    -
    highp_fdualquat fdualquat
    Dual-quaternion of single-precision floating-point numbers.
    -
    detail::tdualquat< double, lowp > lowp_ddualquat
    Dual-quaternion of low double-precision floating-point numbers.
    -
    detail::tmat4x4< T, P > orientation(detail::tvec3< T, P > const &Normal, detail::tvec3< T, P > const &Up)
    Build a rotation matrix from a normal and a up vector.
    -
    GLM_FUNC_DECL genType normalize(genType const &x)
    Returns a vector in the same direction as x but with length of 1.
    -
    detail::tdualquat< double, mediump > mediump_ddualquat
    Dual-quaternion of medium double-precision floating-point numbers.
    -
    detail::tdualquat< float, lowp > lowp_dualquat
    Dual-quaternion of low single-precision floating-point numbers.
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    -
    detail::tdualquat< T, P > dualquat_cast(detail::tmat2x4< T, P > const &x)
    Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. ...
    -
    highp_ddualquat ddualquat
    Dual-quaternion of default double-precision floating-point numbers.
    -
    detail::tmat2x4< T, P > mat2x4_cast(detail::tdualquat< T, P > const &x)
    Converts a quaternion to a 2 * 4 matrix.
    -
    detail::tdualquat< float, mediump > mediump_fdualquat
    Dual-quaternion of medium single-precision floating-point numbers.
    -
    detail::tdualquat< float, lowp > lowp_fdualquat
    Dual-quaternion of low single-precision floating-point numbers.
    -
    detail::tdualquat< float, highp > highp_fdualquat
    Dual-quaternion of high single-precision floating-point numbers.
    -
    detail::tdualquat< float, mediump > mediump_dualquat
    Dual-quaternion of medium single-precision floating-point numbers.
    -
    highp_fdualquat dualquat
    Dual-quaternion of floating-point numbers.
    -
    GLM_FUNC_DECL detail::tquat< T, P > inverse(detail::tquat< T, P > const &q)
    Returns the q inverse.
    +
    29 #pragma once
    +
    30 
    + +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00022.html b/doc/api/a00022.html deleted file mode 100644 index 51fdb454..00000000 --- a/doc/api/a00022.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - -GLM: epsilon.hpp File Reference - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    - -
    -
    gtc/epsilon.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - -

    -Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > epsilonEqual (vecType< T, P > const &x, vecType< T, P > const &y, T const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonEqual (genType const &x, genType const &y, genType const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL genType::boolType epsilonNotEqual (genType const &x, genType const &y, typename genType::value_type const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonNotEqual (genType const &x, genType const &y, genType const &epsilon)
     
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_epsilon

    -
    Date
    2012-04-07 / 2012-04-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -gtc_half_float (dependence)
    -
    -GLM_GTC_quaternion (dependence)
    - -

    Definition in file gtc/epsilon.hpp.

    -
    - - - - diff --git a/doc/api/a00022_source.html b/doc/api/a00022_source.html index 70d81122..8f5f8a18 100644 --- a/doc/api/a00022_source.html +++ b/doc/api/a00022_source.html @@ -3,8 +3,8 @@ - -GLM: epsilon.hpp Source File + +0.9.6: ext.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,67 +41,176 @@
    -
    gtc/epsilon.hpp
    +
    ext.hpp
    -Go to the documentation of this file.
    1 
    -
    40 #ifndef GLM_GTC_epsilon
    -
    41 #define GLM_GTC_epsilon
    -
    42 
    -
    43 // Dependencies
    -
    44 #include "../detail/setup.hpp"
    -
    45 #include "../detail/precision.hpp"
    -
    46 
    -
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    48 # pragma message("GLM: GLM_GTC_epsilon extension included")
    -
    49 #endif
    -
    50 
    -
    51 namespace glm
    -
    52 {
    -
    55 
    -
    60  template <typename T, precision P, template <typename, precision> class vecType>
    -
    61  GLM_FUNC_DECL vecType<bool, P> epsilonEqual(
    -
    62  vecType<T, P> const & x,
    -
    63  vecType<T, P> const & y,
    -
    64  T const & epsilon);
    -
    65 
    -
    70  template <typename genType>
    -
    71  GLM_FUNC_DECL bool epsilonEqual(
    -
    72  genType const & x,
    -
    73  genType const & y,
    -
    74  genType const & epsilon);
    -
    75 
    -
    80  template <typename genType>
    -
    81  GLM_FUNC_DECL typename genType::boolType epsilonNotEqual(
    -
    82  genType const & x,
    -
    83  genType const & y,
    -
    84  typename genType::value_type const & epsilon);
    -
    85 
    -
    90  template <typename genType>
    -
    91  GLM_FUNC_DECL bool epsilonNotEqual(
    -
    92  genType const & x,
    -
    93  genType const & y,
    -
    94  genType const & epsilon);
    -
    95 
    -
    97 }//namespace glm
    -
    98 
    -
    99 #include "epsilon.inl"
    -
    100 
    -
    101 #endif//GLM_GTC_epsilon
    -
    GLM_FUNC_DECL genType epsilon()
    Return the epsilon constant for floating point types.
    -
    GLM_FUNC_DECL vecType< bool, P > epsilonEqual(vecType< T, P > const &x, vecType< T, P > const &y, T const &epsilon)
    Returns the component-wise comparison of |x - y| &lt; epsilon.
    -
    GLM_FUNC_DECL genType::boolType epsilonNotEqual(genType const &x, genType const &y, typename genType::value_type const &epsilon)
    Returns the component-wise comparison of |x - y| &lt; epsilon.
    +
    1 
    +
    53 #pragma once
    +
    54 
    +
    55 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED))
    +
    56 # define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED
    +
    57 # pragma message("GLM: All extensions included (not recommanded)")
    +
    58 #endif//GLM_MESSAGES
    +
    59 
    +
    60 #include "./gtc/bitfield.hpp"
    +
    61 #include "./gtc/constants.hpp"
    +
    62 #include "./gtc/epsilon.hpp"
    +
    63 #include "./gtc/integer.hpp"
    +
    64 #include "./gtc/matrix_access.hpp"
    +
    65 #include "./gtc/matrix_integer.hpp"
    +
    66 #include "./gtc/matrix_inverse.hpp"
    + +
    68 #include "./gtc/noise.hpp"
    +
    69 #include "./gtc/packing.hpp"
    +
    70 #include "./gtc/quaternion.hpp"
    +
    71 #include "./gtc/random.hpp"
    +
    72 #include "./gtc/reciprocal.hpp"
    +
    73 #include "./gtc/round.hpp"
    +
    74 #include "./gtc/type_precision.hpp"
    +
    75 #include "./gtc/type_ptr.hpp"
    +
    76 #include "./gtc/ulp.hpp"
    +
    77 #include "./gtc/vec1.hpp"
    +
    78 
    + +
    80 #include "./gtx/bit.hpp"
    +
    81 #include "./gtx/closest_point.hpp"
    +
    82 #include "./gtx/color_space.hpp"
    + +
    84 #include "./gtx/compatibility.hpp"
    +
    85 #include "./gtx/component_wise.hpp"
    + +
    87 #include "./gtx/euler_angles.hpp"
    +
    88 #include "./gtx/extend.hpp"
    + + + + +
    93 #include "./gtx/gradient_paint.hpp"
    + +
    95 #include "./gtx/inertia.hpp"
    +
    96 #include "./gtx/integer.hpp"
    +
    97 #include "./gtx/intersect.hpp"
    +
    98 #include "./gtx/log_base.hpp"
    + + + + +
    103 #include "./gtx/matrix_query.hpp"
    +
    104 #include "./gtx/mixed_product.hpp"
    +
    105 #include "./gtx/norm.hpp"
    +
    106 #include "./gtx/normal.hpp"
    +
    107 #include "./gtx/normalize_dot.hpp"
    + +
    109 #include "./gtx/optimum_pow.hpp"
    +
    110 #include "./gtx/orthonormalize.hpp"
    +
    111 #include "./gtx/perpendicular.hpp"
    + +
    113 #include "./gtx/projection.hpp"
    +
    114 #include "./gtx/quaternion.hpp"
    +
    115 #include "./gtx/raw_data.hpp"
    +
    116 #include "./gtx/rotate_vector.hpp"
    +
    117 #include "./gtx/spline.hpp"
    +
    118 #include "./gtx/std_based_type.hpp"
    +
    119 #if !(GLM_COMPILER & GLM_COMPILER_CUDA)
    +
    120 # include "./gtx/string_cast.hpp"
    +
    121 #endif
    +
    122 #include "./gtx/transform.hpp"
    +
    123 #include "./gtx/transform2.hpp"
    +
    124 #include "./gtx/type_aligned.hpp"
    +
    125 #include "./gtx/vector_angle.hpp"
    +
    126 #include "./gtx/vector_query.hpp"
    +
    127 #include "./gtx/wrap.hpp"
    +
    128 
    +
    129 #if GLM_HAS_TEMPLATE_ALIASES
    + +
    131 #endif
    +
    132 
    +
    133 #if GLM_HAS_RANGE_FOR
    +
    134 # include "./gtx/range.hpp"
    +
    135 #endif
    +
    136 
    +
    137 #if GLM_ARCH & GLM_ARCH_SSE2
    +
    138 # include "./gtx/simd_vec4.hpp"
    +
    139 # include "./gtx/simd_mat4.hpp"
    +
    140 #endif
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00023.html b/doc/api/a00023.html new file mode 100644 index 00000000..c305e72c --- /dev/null +++ b/doc/api/a00023.html @@ -0,0 +1,82 @@ + + + + + + +0.9.6: extend.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    extend.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_extend

    +
    Date
    2006-01-07 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file extend.hpp.

    +
    + + + + diff --git a/doc/api/a00023_source.html b/doc/api/a00023_source.html index 7c679bc3..6ef14eb0 100644 --- a/doc/api/a00023_source.html +++ b/doc/api/a00023_source.html @@ -3,8 +3,8 @@ - -GLM: epsilon.hpp Source File + +0.9.6: extend.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,44 @@
    -
    gtx/epsilon.hpp
    +
    extend.hpp
    -
    1 
    -
    24 #if(defined(GLM_MESSAGES))
    -
    25 # pragma message("GLM: GLM_GTX_epsilon extension is deprecated, include GLM_GTC_epsilon (glm/gtc/epsilon) instead")
    -
    26 #endif
    -
    27 
    -
    28 // Promoted:
    -
    29 #include "../gtc/epsilon.hpp"
    +Go to the documentation of this file.
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_extend extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename genType>
    +
    55  GLM_FUNC_DECL genType extend(
    +
    56  genType const & Origin,
    +
    57  genType const & Source,
    +
    58  typename genType::value_type const Length);
    +
    59 
    +
    61 }//namespace glm
    +
    62 
    +
    63 #include "extend.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType extend(genType const &Origin, genType const &Source, typename genType::value_type const Length)
    Extends of Length the Origin position using the (Source - Origin) direction.
    diff --git a/doc/api/a00024.html b/doc/api/a00024.html index 28f7fc26..33909603 100644 --- a/doc/api/a00024.html +++ b/doc/api/a00024.html @@ -3,8 +3,8 @@ - -GLM: euler_angles.hpp File Reference + +0.9.6: extented_min_max.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,92 +41,77 @@
    -
    euler_angles.hpp File Reference
    +
    extented_min_max.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleX (T const &angleX)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleXY (T const &angleX, T const &angleY)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleXZ (T const &angleX, T const &angleZ)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleY (T const &angleY)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleYX (T const &angleY, T const &angleX)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleYXZ (T const &yaw, T const &pitch, T const &roll)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleYZ (T const &angleY, T const &angleZ)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleZ (T const &angleZ)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleZX (T const &angle, T const &angleX)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleZY (T const &angleZ, T const &angleY)
     
    template<typename T >
    detail::tmat2x2< T, defaultp > orientate2 (T const &angle)
     
    template<typename T >
    detail::tmat3x3< T, defaultp > orientate3 (T const &angle)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > orientate3 (detail::tvec3< T, P > const &angles)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > orientate4 (detail::tvec3< T, P > const &angles)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > yawPitchRoll (T const &yaw, T const &pitch, T const &roll)
     
    template<typename T >
    GLM_FUNC_DECL T max (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    GLM_FUNC_DECL T max (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename T >
    GLM_FUNC_DECL T min (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    GLM_FUNC_DECL T min (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_euler_angles

    -
    Date
    2005-12-21 / 2011-06-07
    +

    GLM_GTX_extented_min_max

    +
    Date
    2007-03-14 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -gtc_half_float (dependence)
    +gtx_half_float (dependence)
    -

    Definition in file euler_angles.hpp.

    +

    Definition in file extented_min_max.hpp.

    diff --git a/doc/api/a00024_source.html b/doc/api/a00024_source.html index e295b215..1395b828 100644 --- a/doc/api/a00024_source.html +++ b/doc/api/a00024_source.html @@ -3,8 +3,8 @@ - -GLM: euler_angles.hpp Source File + +0.9.6: extented_min_max.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,123 +41,117 @@
    -
    euler_angles.hpp
    +
    extented_min_max.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_euler_angles
    -
    40 #define GLM_GTX_euler_angles
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_euler_angles extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    56  template <typename T>
    -
    57  detail::tmat4x4<T, defaultp> eulerAngleX(
    -
    58  T const & angleX);
    -
    59 
    -
    62  template <typename T>
    -
    63  detail::tmat4x4<T, defaultp> eulerAngleY(
    -
    64  T const & angleY);
    -
    65 
    -
    68  template <typename T>
    -
    69  detail::tmat4x4<T, defaultp> eulerAngleZ(
    -
    70  T const & angleZ);
    -
    71 
    -
    74  template <typename T>
    -
    75  detail::tmat4x4<T, defaultp> eulerAngleXY(
    -
    76  T const & angleX,
    -
    77  T const & angleY);
    -
    78 
    -
    81  template <typename T>
    -
    82  detail::tmat4x4<T, defaultp> eulerAngleYX(
    -
    83  T const & angleY,
    -
    84  T const & angleX);
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_extented_min_max extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T>
    +
    56  GLM_FUNC_DECL T min(
    +
    57  T const & x,
    +
    58  T const & y,
    +
    59  T const & z);
    +
    60 
    +
    63  template <typename T, template <typename> class C>
    +
    64  GLM_FUNC_DECL C<T> min(
    +
    65  C<T> const & x,
    +
    66  typename C<T>::T const & y,
    +
    67  typename C<T>::T const & z);
    +
    68 
    +
    71  template <typename T, template <typename> class C>
    +
    72  GLM_FUNC_DECL C<T> min(
    +
    73  C<T> const & x,
    +
    74  C<T> const & y,
    +
    75  C<T> const & z);
    +
    76 
    +
    79  template <typename T>
    +
    80  GLM_FUNC_DECL T min(
    +
    81  T const & x,
    +
    82  T const & y,
    +
    83  T const & z,
    +
    84  T const & w);
    85 
    -
    88  template <typename T>
    -
    89  detail::tmat4x4<T, defaultp> eulerAngleXZ(
    -
    90  T const & angleX,
    -
    91  T const & angleZ);
    -
    92 
    -
    95  template <typename T>
    -
    96  detail::tmat4x4<T, defaultp> eulerAngleZX(
    -
    97  T const & angle,
    -
    98  T const & angleX);
    -
    99 
    -
    102  template <typename T>
    -
    103  detail::tmat4x4<T, defaultp> eulerAngleYZ(
    -
    104  T const & angleY,
    -
    105  T const & angleZ);
    -
    106 
    -
    109  template <typename T>
    -
    110  detail::tmat4x4<T, defaultp> eulerAngleZY(
    -
    111  T const & angleZ,
    -
    112  T const & angleY);
    -
    113 
    -
    116  template <typename T>
    -
    117  detail::tmat4x4<T, defaultp> eulerAngleYXZ(
    -
    118  T const & yaw,
    -
    119  T const & pitch,
    -
    120  T const & roll);
    -
    121 
    -
    124  template <typename T>
    -
    125  detail::tmat4x4<T, defaultp> yawPitchRoll(
    -
    126  T const & yaw,
    -
    127  T const & pitch,
    -
    128  T const & roll);
    -
    129 
    -
    132  template <typename T>
    -
    133  detail::tmat2x2<T, defaultp> orientate2(T const & angle);
    -
    134 
    -
    137  template <typename T>
    -
    138  detail::tmat3x3<T, defaultp> orientate3(T const & angle);
    -
    139 
    -
    142  template <typename T, precision P>
    -
    143  detail::tmat3x3<T, P> orientate3(detail::tvec3<T, P> const & angles);
    -
    144 
    -
    147  template <typename T, precision P>
    -
    148  detail::tmat4x4<T, P> orientate4(detail::tvec3<T, P> const & angles);
    -
    149 
    -
    151 }//namespace glm
    -
    152 
    -
    153 #include "euler_angles.inl"
    +
    88  template <typename T, template <typename> class C>
    +
    89  GLM_FUNC_DECL C<T> min(
    +
    90  C<T> const & x,
    +
    91  typename C<T>::T const & y,
    +
    92  typename C<T>::T const & z,
    +
    93  typename C<T>::T const & w);
    +
    94 
    +
    97  template <typename T, template <typename> class C>
    +
    98  GLM_FUNC_DECL C<T> min(
    +
    99  C<T> const & x,
    +
    100  C<T> const & y,
    +
    101  C<T> const & z,
    +
    102  C<T> const & w);
    +
    103 
    +
    106  template <typename T>
    +
    107  GLM_FUNC_DECL T max(
    +
    108  T const & x,
    +
    109  T const & y,
    +
    110  T const & z);
    +
    111 
    +
    114  template <typename T, template <typename> class C>
    +
    115  GLM_FUNC_DECL C<T> max(
    +
    116  C<T> const & x,
    +
    117  typename C<T>::T const & y,
    +
    118  typename C<T>::T const & z);
    +
    119 
    +
    122  template <typename T, template <typename> class C>
    +
    123  GLM_FUNC_DECL C<T> max(
    +
    124  C<T> const & x,
    +
    125  C<T> const & y,
    +
    126  C<T> const & z);
    +
    127 
    +
    130  template <typename T>
    +
    131  GLM_FUNC_DECL T max(
    +
    132  T const & x,
    +
    133  T const & y,
    +
    134  T const & z,
    +
    135  T const & w);
    +
    136 
    +
    139  template <typename T, template <typename> class C>
    +
    140  GLM_FUNC_DECL C<T> max(
    +
    141  C<T> const & x,
    +
    142  typename C<T>::T const & y,
    +
    143  typename C<T>::T const & z,
    +
    144  typename C<T>::T const & w);
    +
    145 
    +
    148  template <typename T, template <typename> class C>
    +
    149  GLM_FUNC_DECL C<T> max(
    +
    150  C<T> const & x,
    +
    151  C<T> const & y,
    +
    152  C<T> const & z,
    +
    153  C<T> const & w);
    154 
    -
    155 #endif//GLM_GTX_euler_angles
    -
    detail::tmat4x4< T, defaultp > yawPitchRoll(T const &yaw, T const &pitch, T const &roll)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
    -
    detail::tmat4x4< T, defaultp > eulerAngleZX(T const &angle, T const &angleX)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).
    -
    detail::tmat4x4< T, defaultp > eulerAngleYZ(T const &angleY, T const &angleZ)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    detail::tmat4x4< T, defaultp > eulerAngleXY(T const &angleX, T const &angleY)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).
    -
    detail::tmat3x3< T, defaultp > orientate3(T const &angle)
    Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.
    -
    detail::tmat4x4< T, defaultp > eulerAngleZ(T const &angleZ)
    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.
    -
    detail::tmat4x4< T, P > orientate4(detail::tvec3< T, P > const &angles)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
    -
    GLM_FUNC_DECL T roll(detail::tquat< T, P > const &x)
    Returns roll value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees ot...
    -
    detail::tmat4x4< T, defaultp > eulerAngleYXZ(T const &yaw, T const &pitch, T const &roll)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
    -
    detail::tmat4x4< T, defaultp > eulerAngleX(T const &angleX)
    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.
    -
    detail::tmat4x4< T, defaultp > eulerAngleYX(T const &angleY, T const &angleX)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).
    -
    detail::tmat4x4< T, defaultp > eulerAngleY(T const &angleY)
    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.
    -
    detail::tmat4x4< T, defaultp > eulerAngleZY(T const &angleZ, T const &angleY)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).
    -
    GLM_FUNC_DECL T pitch(detail::tquat< T, P > const &x)
    Returns pitch value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees o...
    -
    detail::tmat2x2< T, defaultp > orientate2(T const &angle)
    Creates a 2D 2 * 2 rotation matrix from an euler angle.
    -
    GLM_FUNC_DECL T yaw(detail::tquat< T, P > const &x)
    Returns yaw value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees oth...
    -
    detail::tmat4x4< T, defaultp > eulerAngleXZ(T const &angleX, T const &angleZ)
    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).
    +
    156 }//namespace glm
    +
    157 
    +
    158 #include "extented_min_max.inl"
    +
    GLM_FUNC_DECL C< T > max(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
    Return the maximum component-wise values of 4 inputs.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL C< T > min(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
    Return the minimum component-wise values of 4 inputs.
    diff --git a/doc/api/a00025.html b/doc/api/a00025.html index 1374d566..1cbf8f86 100644 --- a/doc/api/a00025.html +++ b/doc/api/a00025.html @@ -3,8 +3,8 @@ - -GLM: exponential.hpp File Reference + +0.9.6: fast_exponential.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,32 +41,77 @@
    +
    -
    exponential.hpp File Reference
    +
    fast_exponential.hpp File Reference

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    GLM_FUNC_DECL T fastExp (T x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastExp (vecType< T, P > const &x)
     
    template<typename T >
    GLM_FUNC_DECL T fastExp2 (T x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastExp2 (vecType< T, P > const &x)
     
    template<typename T >
    GLM_FUNC_DECL T fastLog (T x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastLog (vecType< T, P > const &x)
     
    template<typename T >
    GLM_FUNC_DECL T fastLog2 (T x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastLog2 (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fastPow (genType x, genType y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastPow (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename genTypeT , typename genTypeU >
    GLM_FUNC_DECL genTypeT fastPow (genTypeT x, genTypeU y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastPow (vecType< T, P > const &x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTX_fast_exponential

    +
    Date
    2006-01-09 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +gtx_half_float (dependence)
    -

    Definition in file exponential.hpp.

    +

    Definition in file fast_exponential.hpp.

    diff --git a/doc/api/a00025_source.html b/doc/api/a00025_source.html index d7f20e73..ac0b25af 100644 --- a/doc/api/a00025_source.html +++ b/doc/api/a00025_source.html @@ -3,8 +3,8 @@ - -GLM: exponential.hpp Source File + +0.9.6: fast_exponential.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,78 @@
    -
    exponential.hpp
    +
    fast_exponential.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_EXPONENTIAL_INCLUDED
    -
    30 #define GLM_EXPONENTIAL_INCLUDED
    -
    31 
    -
    32 #include "detail/func_exponential.hpp"
    -
    33 
    -
    34 #endif//GLM_EXPONENTIAL_INCLUDED
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_fast_exponential extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename genType>
    +
    56  GLM_FUNC_DECL genType fastPow(genType x, genType y);
    +
    57 
    +
    60  template <typename T, precision P, template <typename, precision> class vecType>
    +
    61  GLM_FUNC_DECL vecType<T, P> fastPow(vecType<T, P> const & x, vecType<T, P> const & y);
    +
    62 
    +
    65  template <typename genTypeT, typename genTypeU>
    +
    66  GLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y);
    +
    67 
    +
    70  template <typename T, precision P, template <typename, precision> class vecType>
    +
    71  GLM_FUNC_DECL vecType<T, P> fastPow(vecType<T, P> const & x);
    +
    72 
    +
    75  template <typename T>
    +
    76  GLM_FUNC_DECL T fastExp(T x);
    +
    77 
    +
    80  template <typename T, precision P, template <typename, precision> class vecType>
    +
    81  GLM_FUNC_DECL vecType<T, P> fastExp(vecType<T, P> const & x);
    +
    82 
    +
    85  template <typename T>
    +
    86  GLM_FUNC_DECL T fastLog(T x);
    +
    87 
    +
    90  template <typename T, precision P, template <typename, precision> class vecType>
    +
    91  GLM_FUNC_DECL vecType<T, P> fastLog(vecType<T, P> const & x);
    +
    92 
    +
    95  template <typename T>
    +
    96  GLM_FUNC_DECL T fastExp2(T x);
    +
    97 
    +
    100  template <typename T, precision P, template <typename, precision> class vecType>
    +
    101  GLM_FUNC_DECL vecType<T, P> fastExp2(vecType<T, P> const & x);
    +
    102 
    +
    105  template <typename T>
    +
    106  GLM_FUNC_DECL T fastLog2(T x);
    +
    107 
    +
    110  template <typename T, precision P, template <typename, precision> class vecType>
    +
    111  GLM_FUNC_DECL vecType<T, P> fastLog2(vecType<T, P> const & x);
    +
    112 
    +
    114 }//namespace glm
    +
    115 
    +
    116 #include "fast_exponential.inl"
    +
    GLM_FUNC_DECL vecType< T, P > fastLog2(vecType< T, P > const &x)
    Faster than the common log2 function but less accurate.
    +
    GLM_FUNC_DECL vecType< T, P > fastLog(vecType< T, P > const &x)
    Faster than the common exp2 function but less accurate.
    +
    GLM_FUNC_DECL vecType< T, P > fastPow(vecType< T, P > const &x)
    Faster than the common pow function but less accurate.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vecType< T, P > fastExp(vecType< T, P > const &x)
    Faster than the common exp function but less accurate.
    +
    GLM_FUNC_DECL vecType< T, P > fastExp2(vecType< T, P > const &x)
    Faster than the common exp2 function but less accurate.
    diff --git a/doc/api/a00026.html b/doc/api/a00026.html new file mode 100644 index 00000000..8370def3 --- /dev/null +++ b/doc/api/a00026.html @@ -0,0 +1,100 @@ + + + + + + +0.9.6: fast_square_root.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    fast_square_root.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType fastDistance (genType x, genType y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T fastDistance (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType fastInverseSqrt (genType x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastInverseSqrt (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type fastLength (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fastNormalize (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fastSqrt (genType x)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_fast_square_root

    +
    Date
    2006-01-04 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file fast_square_root.hpp.

    +
    + + + + diff --git a/doc/api/a00026_source.html b/doc/api/a00026_source.html index e7835c63..d729df0c 100644 --- a/doc/api/a00026_source.html +++ b/doc/api/a00026_source.html @@ -3,8 +3,8 @@ - -GLM: ext.hpp Source File + +0.9.6: fast_square_root.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,162 +41,63 @@
    -
    ext.hpp
    +
    fast_square_root.hpp
    -
    1 
    -
    58 #ifndef GLM_EXT_INCLUDED
    -
    59 #define GLM_EXT_INCLUDED
    -
    60 
    -
    61 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED))
    -
    62 # define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED
    -
    63 # pragma message("GLM: All extensions included (not recommanded)")
    -
    64 #endif//GLM_MESSAGES
    -
    65 
    -
    66 #include "./gtc/constants.hpp"
    -
    67 #include "./gtc/epsilon.hpp"
    -
    68 #include "./gtc/matrix_access.hpp"
    -
    69 #include "./gtc/matrix_integer.hpp"
    -
    70 #include "./gtc/matrix_inverse.hpp"
    - -
    72 #include "./gtc/noise.hpp"
    -
    73 #include "./gtc/packing.hpp"
    -
    74 #include "./gtc/quaternion.hpp"
    -
    75 #include "./gtc/random.hpp"
    -
    76 #include "./gtc/reciprocal.hpp"
    -
    77 #include "./gtc/type_precision.hpp"
    -
    78 #include "./gtc/type_ptr.hpp"
    -
    79 #include "./gtc/ulp.hpp"
    -
    80 
    - -
    82 #include "./gtx/bit.hpp"
    -
    83 #include "./gtx/closest_point.hpp"
    -
    84 #include "./gtx/color_space.hpp"
    - -
    86 #include "./gtx/compatibility.hpp"
    -
    87 #include "./gtx/component_wise.hpp"
    - -
    89 #include "./gtx/euler_angles.hpp"
    -
    90 #include "./gtx/extend.hpp"
    - - - - -
    95 #include "./gtx/gradient_paint.hpp"
    - -
    97 #include "./gtx/inertia.hpp"
    -
    98 #include "./gtx/int_10_10_10_2.hpp"
    -
    99 #include "./gtx/integer.hpp"
    -
    100 #include "./gtx/intersect.hpp"
    -
    101 #include "./gtx/log_base.hpp"
    - - - - -
    106 #include "./gtx/matrix_query.hpp"
    -
    107 #include "./gtx/mixed_product.hpp"
    -
    108 #include "./gtx/multiple.hpp"
    -
    109 #include "./gtx/norm.hpp"
    -
    110 #include "./gtx/normal.hpp"
    -
    111 #include "./gtx/normalize_dot.hpp"
    - -
    113 #include "./gtx/optimum_pow.hpp"
    -
    114 #include "./gtx/orthonormalize.hpp"
    -
    115 #include "./gtx/perpendicular.hpp"
    - -
    117 #include "./gtx/projection.hpp"
    -
    118 #include "./gtx/quaternion.hpp"
    -
    119 #include "./gtx/raw_data.hpp"
    -
    120 #include "./gtx/rotate_vector.hpp"
    -
    121 #include "./gtx/spline.hpp"
    -
    122 #include "./gtx/std_based_type.hpp"
    -
    123 #include "./gtx/string_cast.hpp"
    -
    124 #include "./gtx/transform.hpp"
    -
    125 #include "./gtx/transform2.hpp"
    -
    126 #include "./gtx/vec1.hpp"
    -
    127 #include "./gtx/vector_angle.hpp"
    -
    128 #include "./gtx/vector_query.hpp"
    -
    129 #include "./gtx/wrap.hpp"
    -
    130 
    -
    131 #if(GLM_ARCH & GLM_ARCH_SSE2)
    -
    132 # include "./gtx/simd_vec4.hpp"
    -
    133 # include "./gtx/simd_mat4.hpp"
    -
    134 #endif
    -
    135 
    -
    136 #endif //GLM_EXT_INCLUDED
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    +Go to the documentation of this file.
    1 
    +
    40 #pragma once
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    46 # pragma message("GLM: GLM_GTX_fast_square_root extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename genType>
    +
    57  GLM_FUNC_DECL genType fastSqrt(genType x);
    +
    58 
    +
    61  template <typename genType>
    +
    62  GLM_FUNC_DECL genType fastInverseSqrt(genType x);
    +
    63 
    +
    66  template <typename T, precision P, template <typename, precision> class vecType>
    +
    67  GLM_FUNC_DECL vecType<T, P> fastInverseSqrt(vecType<T, P> const & x);
    +
    68 
    +
    71  template <typename genType>
    +
    72  GLM_FUNC_DECL typename genType::value_type fastLength(genType const & x);
    +
    73 
    +
    76  template <typename genType>
    +
    77  GLM_FUNC_DECL genType fastDistance(genType x, genType y);
    +
    78 
    +
    81  template <typename T, precision P, template <typename, precision> class vecType>
    +
    82  GLM_FUNC_DECL T fastDistance(vecType<T, P> const & x, vecType<T, P> const & y);
    +
    83 
    +
    86  template <typename genType>
    +
    87  GLM_FUNC_DECL genType fastNormalize(genType const & x);
    +
    88 
    +
    90 }// namespace glm
    +
    91 
    +
    92 #include "fast_square_root.inl"
    +
    GLM_FUNC_DECL T fastDistance(vecType< T, P > const &x, vecType< T, P > const &y)
    Faster than the common distance function but less accurate.
    +
    GLM_FUNC_DECL genType fastNormalize(genType const &x)
    Faster than the common normalize function but less accurate.
    +
    GLM_FUNC_DECL vecType< T, P > fastInverseSqrt(vecType< T, P > const &x)
    Faster than the common inversesqrt function but less accurate.
    +
    GLM_FUNC_DECL genType::value_type fastLength(genType const &x)
    Faster than the common length function but less accurate.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType fastSqrt(genType x)
    Faster than the common sqrt function but less accurate.
    diff --git a/doc/api/a00027.html b/doc/api/a00027.html index 21f97e28..97fc15fc 100644 --- a/doc/api/a00027.html +++ b/doc/api/a00027.html @@ -3,8 +3,8 @@ - -GLM: extend.hpp File Reference + +0.9.6: fast_trigonometry.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,48 +41,63 @@
    -
    extend.hpp File Reference
    +
    fast_trigonometry.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
     
    template<typename T >
    GLM_FUNC_DECL T fastAcos (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastAsin (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastAtan (T y, T x)
     
    template<typename T >
    GLM_FUNC_DECL T fastAtan (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastCos (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastSin (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastTan (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T wrapAngle (T angle)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_extend

    -
    Date
    2006-01-07 / 2011-06-07
    +

    GLM_GTX_fast_trigonometry

    +
    Date
    2006-01-08 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file extend.hpp.

    +

    Definition in file fast_trigonometry.hpp.

    diff --git a/doc/api/a00027_source.html b/doc/api/a00027_source.html index 31a8c9bb..3c6f4aa6 100644 --- a/doc/api/a00027_source.html +++ b/doc/api/a00027_source.html @@ -3,8 +3,8 @@ - -GLM: extend.hpp Source File + +0.9.6: fast_trigonometry.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,46 +41,70 @@
    -
    extend.hpp
    +
    fast_trigonometry.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_extend
    -
    39 #define GLM_GTX_extend
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 #include "../gtc/constants.hpp"
    43 
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_extend extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    +
    45 # pragma message("GLM: GLM_GTX_fast_trigonometry extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    49 {
    52 
    -
    55  template <typename genType>
    -
    56  GLM_FUNC_DECL genType extend(
    -
    57  genType const & Origin,
    -
    58  genType const & Source,
    -
    59  typename genType::value_type const Length);
    -
    60 
    -
    62 }//namespace glm
    -
    63 
    -
    64 #include "extend.inl"
    -
    65 
    -
    66 #endif//GLM_GTX_extend
    -
    GLM_FUNC_DECL genType extend(genType const &Origin, genType const &Source, typename genType::value_type const Length)
    Extends of Length the Origin position using the (Source - Origin) direction.
    +
    55  template <typename T>
    +
    56  GLM_FUNC_DECL T wrapAngle(T angle);
    +
    57 
    +
    60  template <typename T>
    +
    61  GLM_FUNC_DECL T fastSin(T angle);
    +
    62 
    +
    65  template <typename T>
    +
    66  GLM_FUNC_DECL T fastCos(T angle);
    +
    67 
    +
    71  template <typename T>
    +
    72  GLM_FUNC_DECL T fastTan(T angle);
    +
    73 
    +
    77  template <typename T>
    +
    78  GLM_FUNC_DECL T fastAsin(T angle);
    +
    79 
    +
    83  template <typename T>
    +
    84  GLM_FUNC_DECL T fastAcos(T angle);
    +
    85 
    +
    89  template <typename T>
    +
    90  GLM_FUNC_DECL T fastAtan(T y, T x);
    +
    91 
    +
    95  template <typename T>
    +
    96  GLM_FUNC_DECL T fastAtan(T angle);
    +
    97 
    +
    99 }//namespace glm
    +
    100 
    +
    101 #include "fast_trigonometry.inl"
    +
    GLM_FUNC_DECL T fastTan(T angle)
    Faster than the common tan function but less accurate.
    +
    GLM_FUNC_DECL T fastAtan(T angle)
    Faster than the common atan function but less accurate.
    +
    GLM_FUNC_DECL T fastAcos(T angle)
    Faster than the common acos function but less accurate.
    +
    GLM_FUNC_DECL T fastCos(T angle)
    Faster than the common cos function but less accurate.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL T fastSin(T angle)
    Faster than the common sin function but less accurate.
    +
    GLM_FUNC_DECL T wrapAngle(T angle)
    Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_DECL T fastAsin(T angle)
    Faster than the common asin function but less accurate.
    diff --git a/doc/api/a00028.html b/doc/api/a00028.html index 7cfaa141..79bcc74b 100644 --- a/doc/api/a00028.html +++ b/doc/api/a00028.html @@ -3,8 +3,8 @@ - -GLM: extented_min_max.hpp File Reference + +0.9.6: func_common.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,83 +41,128 @@
    -
    extented_min_max.hpp File Reference
    +
    func_common.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    max (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    max (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename T >
    min (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    min (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename genType >
    GLM_FUNC_DECL genType abs (genType x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > ceil (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType clamp (genType x, genType minVal, genType maxVal)
     
    GLM_FUNC_DECL int floatBitsToInt (float const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< int, P > floatBitsToInt (vecType< float, P > const &v)
     
    GLM_FUNC_DECL uint floatBitsToUint (float const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< uint, P > floatBitsToUint (vecType< float, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > floor (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fma (genType const &a, genType const &b, genType const &c)
     
    template<typename genType >
    GLM_FUNC_DECL genType fract (genType x)
     
    template<typename genType , typename genIType >
    GLM_FUNC_DECL genType frexp (genType const &x, genIType &exp)
     
    GLM_FUNC_DECL float intBitsToFloat (int const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< float, P > intBitsToFloat (vecType< int, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isinf (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isnan (vecType< T, P > const &x)
     
    template<typename genType , typename genIType >
    GLM_FUNC_DECL genType ldexp (genType const &x, genIType const &exp)
     
    template<typename genType >
    GLM_FUNC_DECL genType max (genType x, genType y)
     
    template<typename genType >
    GLM_FUNC_DECL genType min (genType x, genType y)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > mix (vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)
     
    template<typename genType >
    GLM_FUNC_DECL genType mod (genType x, genType y)
     
    template<typename genType >
    GLM_FUNC_DECL genType modf (genType x, genType &i)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > round (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > roundEven (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sign (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType smoothstep (genType edge0, genType edge1, genType x)
     
    template<typename genType >
    GLM_FUNC_DECL genType step (genType edge, genType x)
     
    template<template< typename, precision > class vecType, typename T , precision P>
    GLM_FUNC_DECL vecType< T, P > step (T edge, vecType< T, P > const &x)
     
    template<template< typename, precision > class vecType, typename T , precision P>
    GLM_FUNC_DECL vecType< T, P > step (vecType< T, P > const &edge, vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > trunc (vecType< T, P > const &x)
     
    GLM_FUNC_DECL float uintBitsToFloat (uint const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< float, P > uintBitsToFloat (vecType< uint, P > const &v)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_extented_min_max

    -
    Date
    2007-03-14 / 2011-06-07
    +

    GLM Core

    +
    Date
    2008-03-08 / 2010-01-26
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -gtx_half_float (dependence)
    +
    See also
    GLSL 4.20.8 specification, section 8.3 Common Functions
    -

    Definition in file extented_min_max.hpp.

    +

    Definition in file func_common.hpp.

    diff --git a/doc/api/a00028_source.html b/doc/api/a00028_source.html index c60e44f5..c57c3698 100644 --- a/doc/api/a00028_source.html +++ b/doc/api/a00028_source.html @@ -3,8 +3,8 @@ - -GLM: extented_min_max.hpp Source File + +0.9.6: func_common.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,151 +41,198 @@
    -
    extented_min_max.hpp
    +
    func_common.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_extented_min_max
    -
    40 #define GLM_GTX_extented_min_max
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_extented_min_max extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    56  template <typename T>
    -
    57  T min(
    -
    58  T const & x,
    -
    59  T const & y,
    -
    60  T const & z);
    -
    61 
    -
    64  template
    -
    65  <
    -
    66  typename T,
    -
    67  template <typename> class C
    -
    68  >
    -
    69  C<T> min(
    -
    70  C<T> const & x,
    -
    71  typename C<T>::T const & y,
    -
    72  typename C<T>::T const & z);
    -
    73 
    -
    76  template
    -
    77  <
    -
    78  typename T,
    -
    79  template <typename> class C
    -
    80  >
    -
    81  C<T> min(
    -
    82  C<T> const & x,
    -
    83  C<T> const & y,
    -
    84  C<T> const & z);
    -
    85 
    -
    88  template <typename T>
    -
    89  T min(
    -
    90  T const & x,
    -
    91  T const & y,
    -
    92  T const & z,
    -
    93  T const & w);
    -
    94 
    -
    97  template
    -
    98  <
    -
    99  typename T,
    -
    100  template <typename> class C
    -
    101  >
    -
    102  C<T> min(
    -
    103  C<T> const & x,
    -
    104  typename C<T>::T const & y,
    -
    105  typename C<T>::T const & z,
    -
    106  typename C<T>::T const & w);
    -
    107 
    -
    110  template
    -
    111  <
    -
    112  typename T,
    -
    113  template <typename> class C
    -
    114  >
    -
    115  C<T> min(
    -
    116  C<T> const & x,
    -
    117  C<T> const & y,
    -
    118  C<T> const & z,
    -
    119  C<T> const & w);
    -
    120 
    -
    123  template <typename T>
    -
    124  T max(
    -
    125  T const & x,
    -
    126  T const & y,
    -
    127  T const & z);
    -
    128 
    -
    131  template
    -
    132  <
    -
    133  typename T,
    -
    134  template <typename> class C
    -
    135  >
    -
    136  C<T> max(
    -
    137  C<T> const & x,
    -
    138  typename C<T>::T const & y,
    -
    139  typename C<T>::T const & z);
    -
    140 
    -
    143  template
    -
    144  <
    -
    145  typename T,
    -
    146  template <typename> class C
    -
    147  >
    -
    148  C<T> max(
    -
    149  C<T> const & x,
    -
    150  C<T> const & y,
    -
    151  C<T> const & z);
    -
    152 
    -
    155  template <typename T>
    -
    156  T max(
    -
    157  T const & x,
    -
    158  T const & y,
    -
    159  T const & z,
    -
    160  T const & w);
    -
    161 
    -
    164  template
    -
    165  <
    -
    166  typename T,
    -
    167  template <typename> class C
    -
    168  >
    -
    169  C<T> max(
    -
    170  C<T> const & x,
    -
    171  typename C<T>::T const & y,
    -
    172  typename C<T>::T const & z,
    -
    173  typename C<T>::T const & w);
    +
    36 #pragma once
    +
    37 
    +
    38 #include "setup.hpp"
    +
    39 #include "precision.hpp"
    +
    40 #include "type_int.hpp"
    +
    41 #include "_fixes.hpp"
    +
    42 
    +
    43 namespace glm
    +
    44 {
    +
    47 
    +
    54  template <typename genType>
    +
    55  GLM_FUNC_DECL genType abs(genType x);
    +
    56 
    +
    57  template <typename T, precision P, template <typename, precision> class vecType>
    +
    58  GLM_FUNC_DECL vecType<T, P> abs(vecType<T, P> const & x);
    +
    59 
    +
    66  template <typename T, precision P, template <typename, precision> class vecType>
    +
    67  GLM_FUNC_DECL vecType<T, P> sign(vecType<T, P> const & x);
    +
    68 
    +
    75  template <typename T, precision P, template <typename, precision> class vecType>
    +
    76  GLM_FUNC_DECL vecType<T, P> floor(vecType<T, P> const & x);
    +
    77 
    +
    85  template <typename T, precision P, template <typename, precision> class vecType>
    +
    86  GLM_FUNC_DECL vecType<T, P> trunc(vecType<T, P> const & x);
    +
    87 
    +
    98  template <typename T, precision P, template <typename, precision> class vecType>
    +
    99  GLM_FUNC_DECL vecType<T, P> round(vecType<T, P> const & x);
    +
    100 
    +
    110  template <typename T, precision P, template <typename, precision> class vecType>
    +
    111  GLM_FUNC_DECL vecType<T, P> roundEven(vecType<T, P> const & x);
    +
    112 
    +
    120  template <typename T, precision P, template <typename, precision> class vecType>
    +
    121  GLM_FUNC_DECL vecType<T, P> ceil(vecType<T, P> const & x);
    +
    122 
    +
    129  template <typename genType>
    +
    130  GLM_FUNC_DECL genType fract(genType x);
    +
    131 
    +
    132  template <typename T, precision P, template <typename, precision> class vecType>
    +
    133  GLM_FUNC_DECL vecType<T, P> fract(vecType<T, P> const & x);
    +
    134 
    +
    142  template <typename genType>
    +
    143  GLM_FUNC_DECL genType mod(genType x, genType y);
    +
    144 
    +
    145  template <typename T, precision P, template <typename, precision> class vecType>
    +
    146  GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, T y);
    +
    147 
    +
    148  template <typename T, precision P, template <typename, precision> class vecType>
    +
    149  GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, vecType<T, P> const & y);
    +
    150 
    +
    160  template <typename genType>
    +
    161  GLM_FUNC_DECL genType modf(genType x, genType & i);
    +
    162 
    +
    169  template <typename genType>
    +
    170  GLM_FUNC_DECL genType min(genType x, genType y);
    +
    171 
    +
    172  template <typename T, precision P, template <typename, precision> class vecType>
    +
    173  GLM_FUNC_DECL vecType<T, P> min(vecType<T, P> const & x, T y);
    174 
    -
    177  template
    -
    178  <
    -
    179  typename T,
    -
    180  template <typename> class C
    -
    181  >
    -
    182  C<T> max(
    -
    183  C<T> const & x,
    -
    184  C<T> const & y,
    -
    185  C<T> const & z,
    -
    186  C<T> const & w);
    -
    187 
    -
    189 }//namespace glm
    -
    190 
    -
    191 #include "extented_min_max.inl"
    +
    175  template <typename T, precision P, template <typename, precision> class vecType>
    +
    176  GLM_FUNC_DECL vecType<T, P> min(vecType<T, P> const & x, vecType<T, P> const & y);
    +
    177 
    +
    184  template <typename genType>
    +
    185  GLM_FUNC_DECL genType max(genType x, genType y);
    +
    186 
    +
    187  template <typename T, precision P, template <typename, precision> class vecType>
    +
    188  GLM_FUNC_DECL vecType<T, P> max(vecType<T, P> const & x, T y);
    +
    189 
    +
    190  template <typename T, precision P, template <typename, precision> class vecType>
    +
    191  GLM_FUNC_DECL vecType<T, P> max(vecType<T, P> const & x, vecType<T, P> const & y);
    192 
    -
    193 #endif//GLM_GTX_extented_min_max
    -
    GLM_FUNC_DECL genType max(genType const &x, genType const &y)
    Returns y if x &lt; y; otherwise, it returns x.
    -
    GLM_FUNC_DECL genType min(genType const &x, genType const &y)
    Returns y if y &lt; x; otherwise, it returns x.
    +
    200  template <typename genType>
    +
    201  GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal);
    +
    202 
    +
    203  template <typename T, precision P, template <typename, precision> class vecType>
    +
    204  GLM_FUNC_DECL vecType<T, P> clamp(vecType<T, P> const & x, T minVal, T maxVal);
    +
    205 
    +
    206  template <typename T, precision P, template <typename, precision> class vecType>
    +
    207  GLM_FUNC_DECL vecType<T, P> clamp(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal);
    +
    208 
    +
    251  template <typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    252  GLM_FUNC_DECL vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a);
    +
    253 
    +
    254  template <typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    255  GLM_FUNC_DECL vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, U a);
    +
    256 
    +
    257  template <typename genTypeT, typename genTypeU>
    +
    258  GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a);
    +
    259 
    +
    264  template <typename genType>
    +
    265  GLM_FUNC_DECL genType step(genType edge, genType x);
    +
    266 
    +
    271  template <template <typename, precision> class vecType, typename T, precision P>
    +
    272  GLM_FUNC_DECL vecType<T, P> step(T edge, vecType<T, P> const & x);
    +
    273 
    +
    278  template <template <typename, precision> class vecType, typename T, precision P>
    +
    279  GLM_FUNC_DECL vecType<T, P> step(vecType<T, P> const & edge, vecType<T, P> const & x);
    +
    280 
    +
    295  template <typename genType>
    +
    296  GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x);
    +
    297 
    +
    298  template <typename T, precision P, template <typename, precision> class vecType>
    +
    299  GLM_FUNC_DECL vecType<T, P> smoothstep(T edge0, T edge1, vecType<T, P> const & x);
    +
    300 
    +
    301  template <typename T, precision P, template <typename, precision> class vecType>
    +
    302  GLM_FUNC_DECL vecType<T, P> smoothstep(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x);
    +
    303 
    +
    316  template <typename T, precision P, template <typename, precision> class vecType>
    +
    317  GLM_FUNC_DECL vecType<bool, P> isnan(vecType<T, P> const & x);
    +
    318 
    +
    329  template <typename T, precision P, template <typename, precision> class vecType>
    +
    330  GLM_FUNC_DECL vecType<bool, P> isinf(vecType<T, P> const & x);
    +
    331 
    +
    338  GLM_FUNC_DECL int floatBitsToInt(float const & v);
    +
    339 
    +
    346  template <template <typename, precision> class vecType, precision P>
    +
    347  GLM_FUNC_DECL vecType<int, P> floatBitsToInt(vecType<float, P> const & v);
    +
    348 
    +
    355  GLM_FUNC_DECL uint floatBitsToUint(float const & v);
    +
    356 
    +
    363  template <template <typename, precision> class vecType, precision P>
    +
    364  GLM_FUNC_DECL vecType<uint, P> floatBitsToUint(vecType<float, P> const & v);
    +
    365 
    +
    374  GLM_FUNC_DECL float intBitsToFloat(int const & v);
    +
    375 
    +
    384  template <template <typename, precision> class vecType, precision P>
    +
    385  GLM_FUNC_DECL vecType<float, P> intBitsToFloat(vecType<int, P> const & v);
    +
    386 
    +
    395  GLM_FUNC_DECL float uintBitsToFloat(uint const & v);
    +
    396 
    +
    405  template <template <typename, precision> class vecType, precision P>
    +
    406  GLM_FUNC_DECL vecType<float, P> uintBitsToFloat(vecType<uint, P> const & v);
    +
    407 
    +
    414  template <typename genType>
    +
    415  GLM_FUNC_DECL genType fma(genType const & a, genType const & b, genType const & c);
    +
    416 
    +
    431  template <typename genType, typename genIType>
    +
    432  GLM_FUNC_DECL genType frexp(genType const & x, genIType & exp);
    +
    433 
    +
    445  template <typename genType, typename genIType>
    +
    446  GLM_FUNC_DECL genType ldexp(genType const & x, genIType const & exp);
    +
    447 
    +
    449 }//namespace glm
    +
    450 
    +
    451 #include "func_common.inl"
    +
    452 
    +
    GLM_FUNC_DECL vecType< bool, P > isinf(vecType< T, P > const &x)
    Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...
    +
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:302
    +
    GLM_FUNC_DECL genType mod(genType x, genType y)
    Modulus.
    +
    GLM_FUNC_DECL vecType< T, P > roundEven(vecType< T, P > const &x)
    Returns a value equal to the nearest integer to x.
    +
    GLM_FUNC_DECL vecType< T, P > exp(vecType< T, P > const &v)
    Returns the natural exponentiation of x, i.e., e^x.
    +
    GLM_FUNC_DECL genType max(genType x, genType y)
    Returns y if x < y; otherwise, it returns x.
    +
    GLM_FUNC_DECL genType abs(genType x)
    Returns x if x >= 0; otherwise, it returns -x.
    +
    GLM_FUNC_DECL genType ldexp(genType const &x, genIType const &exp)
    Builds a floating-point number from x and the corresponding integral exponent of two in exp...
    +
    GLM_FUNC_DECL vecType< T, P > step(vecType< T, P > const &edge, vecType< T, P > const &x)
    Returns 0.0 if x < edge, otherwise it returns 1.0.
    +
    GLM_FUNC_DECL genType min(genType x, genType y)
    Returns y if y < x; otherwise, it returns x.
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL genType fma(genType const &a, genType const &b, genType const &c)
    Computes and returns a * b + c.
    +
    GLM_FUNC_DECL vecType< T, P > mix(vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)
    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
    +
    GLM_FUNC_DECL vecType< bool, P > isnan(vecType< T, P > const &x)
    Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of...
    +
    GLM_FUNC_DECL vecType< T, P > trunc(vecType< T, P > const &x)
    Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...
    +
    GLM_FUNC_DECL vecType< T, P > ceil(vecType< T, P > const &x)
    Returns a value equal to the nearest integer that is greater than or equal to x.
    +
    GLM_FUNC_DECL genType modf(genType x, genType &i)
    Returns the fractional part of x and sets i to the integer part (as a whole number floating point val...
    +
    GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal)
    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...
    +
    GLM_FUNC_DECL vecType< float, P > uintBitsToFloat(vecType< uint, P > const &v)
    Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value...
    +
    GLM_FUNC_DECL vecType< uint, P > floatBitsToUint(vecType< float, P > const &v)
    Returns a unsigned integer value representing the encoding of a floating-point value.
    +
    GLM_FUNC_DECL vecType< T, P > round(vecType< T, P > const &x)
    Returns a value equal to the nearest integer to x.
    +
    GLM_FUNC_DECL vecType< int, P > floatBitsToInt(vecType< float, P > const &v)
    Returns a signed integer value representing the encoding of a floating-point value.
    +
    GLM_FUNC_DECL vecType< T, P > sign(vecType< T, P > const &x)
    Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vecType< T, P > floor(vecType< T, P > const &x)
    Returns a value equal to the nearest integer that is less then or equal to x.
    +
    GLM_FUNC_DECL genType frexp(genType const &x, genIType &exp)
    Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two...
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL genType fract(genType x)
    Return x - floor(x).
    +
    GLM_FUNC_DECL vecType< float, P > intBitsToFloat(vecType< int, P > const &v)
    Returns a floating-point value corresponding to a signed integer encoding of a floating-point value...
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x)
    Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 a...
    diff --git a/doc/api/a00029.html b/doc/api/a00029.html index 4ff68a11..eceadc06 100644 --- a/doc/api/a00029.html +++ b/doc/api/a00029.html @@ -3,8 +3,8 @@ - -GLM: fast_exponential.hpp File Reference + +0.9.6: func_exponential.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,68 +41,60 @@
    -
    fast_exponential.hpp File Reference
    +
    func_exponential.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    fastExp (const T &x)
     
    template<typename T >
    fastExp2 (const T &x)
     
    template<typename T >
    fastLn (const T &x)
     
    template<typename T >
    fastLog (const T &x)
     
    template<typename T >
    fastLog2 (const T &x)
     
    template<typename genType >
    genType fastPow (genType const &x, genType const &y)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT fastPow (genTypeT const &x, genTypeU const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > exp (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > exp2 (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > inversesqrt (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > log (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > log2 (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > pow (vecType< T, P > const &base, vecType< T, P > const &exponent)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sqrt (vecType< T, P > const &v)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_fast_exponential

    -
    Date
    2006-01-09 / 2011-06-07
    +

    GLM Core

    +
    Date
    2008-08-08 / 2011-06-14
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -gtx_half_float (dependence)
    +
    See also
    GLSL 4.20.8 specification, section 8.2 Exponential Functions
    -

    Definition in file fast_exponential.hpp.

    +

    Definition in file func_exponential.hpp.

    diff --git a/doc/api/a00029_source.html b/doc/api/a00029_source.html index efa9df68..50faef78 100644 --- a/doc/api/a00029_source.html +++ b/doc/api/a00029_source.html @@ -3,8 +3,8 @@ - -GLM: fast_exponential.hpp Source File + +0.9.6: func_exponential.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,70 +41,70 @@
    -
    fast_exponential.hpp
    +
    func_exponential.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_fast_exponential
    -
    40 #define GLM_GTX_fast_exponential
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_fast_exponential extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    56  template <typename genType>
    -
    57  genType fastPow(
    -
    58  genType const & x,
    -
    59  genType const & y);
    -
    60 
    -
    63  template <typename genTypeT, typename genTypeU>
    -
    64  genTypeT fastPow(
    -
    65  genTypeT const & x,
    -
    66  genTypeU const & y);
    -
    67 
    -
    70  template <typename T>
    -
    71  T fastExp(const T& x);
    -
    72 
    -
    75  template <typename T>
    -
    76  T fastLog(const T& x);
    -
    77 
    -
    80  template <typename T>
    -
    81  T fastExp2(const T& x);
    -
    82 
    -
    85  template <typename T>
    -
    86  T fastLog2(const T& x);
    -
    87 
    -
    90  template <typename T>
    -
    91  T fastLn(const T& x);
    -
    92 
    -
    94 }//namespace glm
    -
    95 
    -
    96 #include "fast_exponential.inl"
    -
    97 
    -
    98 #endif//GLM_GTX_fast_exponential
    -
    T fastLn(const T &x)
    Faster than the common ln function but less accurate.
    -
    T fastLog(const T &x)
    Faster than the common log function but less accurate.
    -
    T fastExp(const T &x)
    Faster than the common exp function but less accurate.
    -
    T fastExp2(const T &x)
    Faster than the common exp2 function but less accurate.
    -
    genType fastPow(genType const &x, genType const &y)
    Faster than the common pow function but less accurate.
    -
    T fastLog2(const T &x)
    Faster than the common log2 function but less accurate.
    +
    36 #pragma once
    +
    37 
    +
    38 #include "type_vec1.hpp"
    +
    39 #include "type_vec2.hpp"
    +
    40 #include "type_vec3.hpp"
    +
    41 #include "type_vec4.hpp"
    +
    42 #include <cmath>
    +
    43 
    +
    44 namespace glm
    +
    45 {
    +
    48 
    +
    57  template <typename T, precision P, template <typename, precision> class vecType>
    +
    58  GLM_FUNC_DECL vecType<T, P> pow(vecType<T, P> const & base, vecType<T, P> const & exponent);
    +
    59 
    +
    67  template <typename T, precision P, template <typename, precision> class vecType>
    +
    68  GLM_FUNC_DECL vecType<T, P> exp(vecType<T, P> const & v);
    +
    69 
    +
    79  template <typename T, precision P, template <typename, precision> class vecType>
    +
    80  GLM_FUNC_DECL vecType<T, P> log(vecType<T, P> const & v);
    +
    81 
    +
    89  template <typename T, precision P, template <typename, precision> class vecType>
    +
    90  GLM_FUNC_DECL vecType<T, P> exp2(vecType<T, P> const & v);
    +
    91 
    +
    100  template <typename T, precision P, template <typename, precision> class vecType>
    +
    101  GLM_FUNC_DECL vecType<T, P> log2(vecType<T, P> const & v);
    +
    102 
    +
    110  //template <typename genType>
    +
    111  //GLM_FUNC_DECL genType sqrt(genType const & x);
    +
    112  template <typename T, precision P, template <typename, precision> class vecType>
    +
    113  GLM_FUNC_DECL vecType<T, P> sqrt(vecType<T, P> const & v);
    +
    114 
    +
    122  template <typename T, precision P, template <typename, precision> class vecType>
    +
    123  GLM_FUNC_DECL vecType<T, P> inversesqrt(vecType<T, P> const & v);
    +
    124 
    +
    126 }//namespace glm
    +
    127 
    +
    128 #include "func_exponential.inl"
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vecType< T, P > exp(vecType< T, P > const &v)
    Returns the natural exponentiation of x, i.e., e^x.
    +
    GLM_FUNC_DECL vecType< T, P > log2(vecType< T, P > const &v)
    Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y...
    +
    GLM_FUNC_DECL vecType< T, P > inversesqrt(vecType< T, P > const &v)
    Returns the reciprocal of the positive square root of v.
    +
    GLM_FUNC_DECL vecType< T, P > log(vecType< T, P > const &v)
    Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y...
    +
    GLM_FUNC_DECL vecType< T, P > sqrt(vecType< T, P > const &v)
    Returns the positive square root of v.
    +
    GLM_FUNC_DECL vecType< T, P > pow(vecType< T, P > const &base, vecType< T, P > const &exponent)
    Returns 'base' raised to the power 'exponent'.
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vecType< T, P > exp2(vecType< T, P > const &v)
    Returns 2 raised to the v power.
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00030.html b/doc/api/a00030.html index 37c4ca1a..44d29256 100644 --- a/doc/api/a00030.html +++ b/doc/api/a00030.html @@ -3,8 +3,8 @@ - -GLM: fast_square_root.hpp File Reference + +0.9.6: func_geometric.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,60 +41,63 @@
    -
    fast_square_root.hpp File Reference
    +
    func_geometric.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    genType::value_type fastDistance (genType const &x, genType const &y)
     
    template<typename genType >
    genType fastInverseSqrt (genType const &x)
     
    template<typename genType >
    genType::value_type fastLength (genType const &x)
     
    template<typename genType >
    genType fastNormalize (genType const &x)
     
    template<typename genType >
    genType fastSqrt (genType const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > cross (tvec3< T, P > const &x, tvec3< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T distance (vecType< T, P > const &p0, vecType< T, P > const &p1)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T dot (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType faceforward (genType const &N, genType const &I, genType const &Nref)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T length (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > normalize (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType reflect (genType const &I, genType const &N)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > refract (vecType< T, P > const &I, vecType< T, P > const &N, T eta)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_fast_square_root

    -
    Date
    2006-01-04 / 2011-06-07
    +

    GLM Core

    +
    Date
    2008-08-03 / 2011-06-14
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLSL 4.20.8 specification, section 8.5 Geometric Functions
    -

    Definition in file fast_square_root.hpp.

    +

    Definition in file func_geometric.hpp.

    diff --git a/doc/api/a00030_source.html b/doc/api/a00030_source.html index b1d65f7a..3235d684 100644 --- a/doc/api/a00030_source.html +++ b/doc/api/a00030_source.html @@ -3,8 +3,8 @@ - -GLM: fast_square_root.hpp Source File + +0.9.6: func_geometric.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,59 +41,81 @@
    -
    fast_square_root.hpp
    +
    func_geometric.hpp
    Go to the documentation of this file.
    1 
    -
    40 #ifndef GLM_GTX_fast_square_root
    -
    41 #define GLM_GTX_fast_square_root
    -
    42 
    -
    43 // Dependency:
    -
    44 #include "../glm.hpp"
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_fast_square_root extension included")
    -
    48 #endif
    -
    49 
    -
    50 namespace glm
    -
    51 {
    +
    36 #pragma once
    +
    37 
    +
    38 #include "type_vec3.hpp"
    +
    39 
    +
    40 namespace glm
    +
    41 {
    +
    44 
    +
    51  template <typename T, precision P, template <typename, precision> class vecType>
    +
    52  GLM_FUNC_DECL T length(
    +
    53  vecType<T, P> const & x);
    54 
    -
    57  template <typename genType>
    -
    58  genType fastSqrt(genType const & x);
    -
    59 
    -
    62  template <typename genType>
    -
    63  genType fastInverseSqrt(genType const & x);
    -
    64 
    -
    67  template <typename genType>
    -
    68  typename genType::value_type fastLength(genType const & x);
    -
    69 
    -
    72  template <typename genType>
    -
    73  typename genType::value_type fastDistance(genType const & x, genType const & y);
    -
    74 
    -
    77  template <typename genType>
    -
    78  genType fastNormalize(genType const & x);
    -
    79 
    -
    81 }// namespace glm
    -
    82 
    -
    83 #include "fast_square_root.inl"
    -
    84 
    -
    85 #endif//GLM_GTX_fast_square_root
    -
    genType fastSqrt(genType const &x)
    Faster than the common sqrt function but less accurate.
    -
    genType fastInverseSqrt(genType const &x)
    Faster than the common inversesqrt function but less accurate.
    -
    genType::value_type fastDistance(genType const &x, genType const &y)
    Faster than the common distance function but less accurate.
    -
    genType fastNormalize(genType const &x)
    Faster than the common normalize function but less accurate.
    -
    genType::value_type fastLength(genType const &x)
    Faster than the common length function but less accurate.
    +
    61  template <typename T, precision P, template <typename, precision> class vecType>
    +
    62  GLM_FUNC_DECL T distance(
    +
    63  vecType<T, P> const & p0,
    +
    64  vecType<T, P> const & p1);
    +
    65 
    +
    72  template <typename T, precision P, template <typename, precision> class vecType>
    +
    73  GLM_FUNC_DECL T dot(
    +
    74  vecType<T, P> const & x,
    +
    75  vecType<T, P> const & y);
    +
    76 
    +
    83  template <typename T, precision P>
    +
    84  GLM_FUNC_DECL tvec3<T, P> cross(
    +
    85  tvec3<T, P> const & x,
    +
    86  tvec3<T, P> const & y);
    +
    87 
    +
    93  template <typename T, precision P, template <typename, precision> class vecType>
    +
    94  GLM_FUNC_DECL vecType<T, P> normalize(
    +
    95  vecType<T, P> const & x);
    +
    96 
    +
    103  template <typename genType>
    +
    104  GLM_FUNC_DECL genType faceforward(
    +
    105  genType const & N,
    +
    106  genType const & I,
    +
    107  genType const & Nref);
    +
    108 
    +
    116  template <typename genType>
    +
    117  GLM_FUNC_DECL genType reflect(
    +
    118  genType const & I,
    +
    119  genType const & N);
    +
    120 
    +
    129  template <typename T, precision P, template <typename, precision> class vecType>
    +
    130  GLM_FUNC_DECL vecType<T, P> refract(
    +
    131  vecType<T, P> const & I,
    +
    132  vecType<T, P> const & N,
    +
    133  T eta);
    +
    134 
    +
    136 }//namespace glm
    +
    137 
    +
    138 #include "func_geometric.inl"
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    GLM_FUNC_DECL vecType< T, P > normalize(vecType< T, P > const &x)
    Returns a vector in the same direction as x but with length of 1.
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vecType< T, P > refract(vecType< T, P > const &I, vecType< T, P > const &N, T eta)
    For the incident vector I and surface normal N, and the ratio of indices of refraction eta...
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType reflect(genType const &I, genType const &N)
    For the incident vector I and surface orientation N, returns the reflection direction : result = I - ...
    +
    GLM_FUNC_DECL T distance(vecType< T, P > const &p0, vecType< T, P > const &p1)
    Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
    +
    GLM_FUNC_DECL genType faceforward(genType const &N, genType const &I, genType const &Nref)
    If dot(Nref, I) < 0.0, return N, otherwise, return -N.
    +
    GLM_FUNC_DECL T dot(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the dot product of x and y, i.e., result = x * y.
    +
    GLM_FUNC_DECL tvec3< T, P > cross(tvec3< T, P > const &x, tvec3< T, P > const &y)
    Returns the cross product of x and y.
    diff --git a/doc/api/a00031.html b/doc/api/a00031.html index e73f867e..f247ba56 100644 --- a/doc/api/a00031.html +++ b/doc/api/a00031.html @@ -3,8 +3,8 @@ - -GLM: fast_trigonometry.hpp File Reference + +0.9.6: func_integer.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,66 +41,78 @@
    -
    fast_trigonometry.hpp File Reference
    +
    func_integer.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    fastAcos (const T &angle)
     
    template<typename T >
    fastAsin (const T &angle)
     
    template<typename T >
    fastAtan (const T &y, const T &x)
     
    template<typename T >
    fastAtan (const T &angle)
     
    template<typename T >
    fastCos (const T &angle)
     
    template<typename T >
    fastSin (const T &angle)
     
    template<typename T >
    fastTan (const T &angle)
     
    template<typename genType >
    GLM_FUNC_DECL int bitCount (genType v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< int, P > bitCount (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldExtract (vecType< T, P > const &Value, int Offset, int Bits)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldInsert (vecType< T, P > const &Base, vecType< T, P > const &Insert, int Offset, int Bits)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldReverse (vecType< T, P > const &v)
     
    template<typename genIUType >
    GLM_FUNC_DECL int findLSB (genIUType x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< int, P > findLSB (vecType< T, P > const &v)
     
    template<typename genIUType >
    GLM_FUNC_DECL int findMSB (genIUType x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< int, P > findMSB (vecType< T, P > const &v)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL void imulExtended (vecType< int, P > const &x, vecType< int, P > const &y, vecType< int, P > &msb, vecType< int, P > &lsb)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< uint, P > uaddCarry (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &carry)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL void umulExtended (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &msb, vecType< uint, P > &lsb)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< uint, P > usubBorrow (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &borrow)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_fast_trigonometry

    -
    Date
    2006-01-08 / 2011-06-07
    +

    GLM Core

    +
    Date
    2010-03-17 / 2011-06-18
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLSL 4.20.8 specification, section 8.8 Integer Functions
    -

    Definition in file fast_trigonometry.hpp.

    +

    Definition in file func_integer.hpp.

    diff --git a/doc/api/a00031_source.html b/doc/api/a00031_source.html index ba8da12a..142bd778 100644 --- a/doc/api/a00031_source.html +++ b/doc/api/a00031_source.html @@ -3,8 +3,8 @@ - -GLM: fast_trigonometry.hpp Source File + +0.9.6: func_integer.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,67 +41,109 @@
    -
    fast_trigonometry.hpp
    +
    func_integer.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_fast_trigonometry
    -
    39 #define GLM_GTX_fast_trigonometry
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_fast_trigonometry extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    56  template <typename T>
    -
    57  T fastSin(const T& angle);
    -
    58 
    -
    62  template <typename T>
    -
    63  T fastCos(const T& angle);
    -
    64 
    -
    68  template <typename T>
    -
    69  T fastTan(const T& angle);
    -
    70 
    -
    74  template <typename T>
    -
    75  T fastAsin(const T& angle);
    -
    76 
    -
    80  template <typename T>
    -
    81  T fastAcos(const T& angle);
    -
    82 
    -
    86  template <typename T>
    -
    87  T fastAtan(const T& y, const T& x);
    -
    88 
    -
    92  template <typename T>
    -
    93  T fastAtan(const T& angle);
    -
    94 
    -
    96 }//namespace glm
    -
    97 
    -
    98 #include "fast_trigonometry.inl"
    -
    99 
    -
    100 #endif//GLM_GTX_fast_trigonometry
    -
    T fastAcos(const T &angle)
    Faster than the common acos function but less accurate.
    -
    T fastAtan(const T &y, const T &x)
    Faster than the common atan function but less accurate.
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    T fastAsin(const T &angle)
    Faster than the common asin function but less accurate.
    -
    T fastTan(const T &angle)
    Faster than the common tan function but less accurate.
    -
    T fastSin(const T &angle)
    Faster than the common sin function but less accurate.
    -
    T fastCos(const T &angle)
    Faster than the common cos function but less accurate.
    +
    38 #pragma once
    +
    39 
    +
    40 #include "setup.hpp"
    +
    41 #include "precision.hpp"
    +
    42 #include "func_common.hpp"
    + +
    44 
    +
    45 namespace glm
    +
    46 {
    +
    49 
    +
    58  template <precision P, template <typename, precision> class vecType>
    +
    59  GLM_FUNC_DECL vecType<uint, P> uaddCarry(
    +
    60  vecType<uint, P> const & x,
    +
    61  vecType<uint, P> const & y,
    +
    62  vecType<uint, P> & carry);
    +
    63 
    +
    72  template <precision P, template <typename, precision> class vecType>
    +
    73  GLM_FUNC_DECL vecType<uint, P> usubBorrow(
    +
    74  vecType<uint, P> const & x,
    +
    75  vecType<uint, P> const & y,
    +
    76  vecType<uint, P> & borrow);
    +
    77 
    +
    86  template <precision P, template <typename, precision> class vecType>
    +
    87  GLM_FUNC_DECL void umulExtended(
    +
    88  vecType<uint, P> const & x,
    +
    89  vecType<uint, P> const & y,
    +
    90  vecType<uint, P> & msb,
    +
    91  vecType<uint, P> & lsb);
    +
    92 
    +
    101  template <precision P, template <typename, precision> class vecType>
    +
    102  GLM_FUNC_DECL void imulExtended(
    +
    103  vecType<int, P> const & x,
    +
    104  vecType<int, P> const & y,
    +
    105  vecType<int, P> & msb,
    +
    106  vecType<int, P> & lsb);
    +
    107 
    +
    123  template <typename T, precision P, template <typename, precision> class vecType>
    +
    124  GLM_FUNC_DECL vecType<T, P> bitfieldExtract(
    +
    125  vecType<T, P> const & Value,
    +
    126  int Offset,
    +
    127  int Bits);
    +
    128 
    +
    143  template <typename T, precision P, template <typename, precision> class vecType>
    +
    144  GLM_FUNC_DECL vecType<T, P> bitfieldInsert(
    +
    145  vecType<T, P> const & Base,
    +
    146  vecType<T, P> const & Insert,
    +
    147  int Offset,
    +
    148  int Bits);
    +
    149 
    +
    158  template <typename T, precision P, template <typename, precision> class vecType>
    +
    159  GLM_FUNC_DECL vecType<T, P> bitfieldReverse(vecType<T, P> const & v);
    +
    160 
    +
    167  template <typename genType>
    +
    168  GLM_FUNC_DECL int bitCount(genType v);
    +
    169 
    +
    176  template <typename T, precision P, template <typename, precision> class vecType>
    +
    177  GLM_FUNC_DECL vecType<int, P> bitCount(vecType<T, P> const & v);
    +
    178 
    +
    187  template <typename genIUType>
    +
    188  GLM_FUNC_DECL int findLSB(genIUType x);
    +
    189 
    +
    198  template <typename T, precision P, template <typename, precision> class vecType>
    +
    199  GLM_FUNC_DECL vecType<int, P> findLSB(vecType<T, P> const & v);
    +
    200 
    +
    210  template <typename genIUType>
    +
    211  GLM_FUNC_DECL int findMSB(genIUType x);
    +
    212 
    +
    222  template <typename T, precision P, template <typename, precision> class vecType>
    +
    223  GLM_FUNC_DECL vecType<int, P> findMSB(vecType<T, P> const & v);
    +
    224 
    +
    226 }//namespace glm
    +
    227 
    +
    228 #include "func_integer.inl"
    +
    GLM_FUNC_DECL vecType< T, P > bitfieldExtract(vecType< T, P > const &Value, int Offset, int Bits)
    Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of...
    +
    GLM_FUNC_DECL vecType< T, P > bitfieldInsert(vecType< T, P > const &Base, vecType< T, P > const &Insert, int Offset, int Bits)
    Returns the insertion the bits least-significant bits of insert into base.
    +
    GLM_FUNC_DECL vecType< uint, P > uaddCarry(vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &carry)
    Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).
    +
    GLM_FUNC_DECL vecType< int, P > findLSB(vecType< T, P > const &v)
    Returns the bit number of the least significant bit set to 1 in the binary representation of value...
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vecType< uint, P > usubBorrow(vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &borrow)
    Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.
    +
    GLM_FUNC_DECL vecType< T, P > bitfieldReverse(vecType< T, P > const &v)
    Returns the reversal of the bits of value.
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vecType< int, P > findMSB(vecType< T, P > const &v)
    Returns the bit number of the most significant bit in the binary representation of value...
    +
    GLM_FUNC_DECL void umulExtended(vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &msb, vecType< uint, P > &lsb)
    Multiplies 32-bit integers x and y, producing a 64-bit result.
    +
    GLM_FUNC_DECL void imulExtended(vecType< int, P > const &x, vecType< int, P > const &y, vecType< int, P > &msb, vecType< int, P > &lsb)
    Multiplies 32-bit integers x and y, producing a 64-bit result.
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vecType< int, P > bitCount(vecType< T, P > const &v)
    Returns the number of bits set to 1 in the binary representation of value.
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00032.html b/doc/api/a00032.html new file mode 100644 index 00000000..e196c94e --- /dev/null +++ b/doc/api/a00032.html @@ -0,0 +1,93 @@ + + + + + + +0.9.6: func_matrix.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    func_matrix.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Functions

    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL T determinant (matType< T, P > const &m)
     
    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL matType< T, P > inverse (matType< T, P > const &m)
     
    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL matType< T, P > matrixCompMult (matType< T, P > const &x, matType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecTypeA, template< typename, precision > class vecTypeB>
    GLM_FUNC_DECL
    +detail::outerProduct_trait< T,
    +P, vecTypeA, vecTypeB >::type 
    outerProduct (vecTypeA< T, P > const &c, vecTypeB< T, P > const &r)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2008-08-03 / 2011-06-15
    +
    Author
    Christophe Riccio
    +
    See also
    GLSL 4.20.8 specification, section 8.6 Matrix Functions
    + +

    Definition in file func_matrix.hpp.

    +
    + + + + diff --git a/doc/api/a00032_source.html b/doc/api/a00032_source.html index 77dc7e0d..31fbd13d 100644 --- a/doc/api/a00032_source.html +++ b/doc/api/a00032_source.html @@ -3,8 +3,8 @@ - -GLM: func_common.hpp Source File + +0.9.6: func_matrix.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,198 +41,125 @@
    -
    func_common.hpp
    +
    func_matrix.hpp
    -
    1 
    -
    36 #ifndef GLM_FUNC_COMMON_INCLUDED
    -
    37 #define GLM_FUNC_COMMON_INCLUDED
    -
    38 
    -
    39 #include "setup.hpp"
    -
    40 #include "precision.hpp"
    -
    41 #include "type_int.hpp"
    -
    42 #include "_fixes.hpp"
    -
    43 
    -
    44 namespace glm
    -
    45 {
    -
    48 
    -
    55  template <typename genType>
    -
    56  GLM_FUNC_DECL genType abs(genType const & x);
    -
    57 
    -
    64  template <typename genType>
    -
    65  GLM_FUNC_DECL genType sign(genType const & x);
    -
    66 
    -
    73  template <typename genType>
    -
    74  GLM_FUNC_DECL genType floor(genType const & x);
    -
    75 
    -
    83  template <typename genType>
    -
    84  GLM_FUNC_DECL genType trunc(genType const & x);
    +Go to the documentation of this file.
    1 
    +
    40 #pragma once
    +
    41 
    +
    42 // Dependencies
    +
    43 #include "../detail/precision.hpp"
    +
    44 #include "../detail/setup.hpp"
    +
    45 #include "../detail/type_mat.hpp"
    +
    46 #include "../vec2.hpp"
    +
    47 #include "../vec3.hpp"
    +
    48 #include "../vec4.hpp"
    +
    49 #include "../mat2x2.hpp"
    +
    50 #include "../mat2x3.hpp"
    +
    51 #include "../mat2x4.hpp"
    +
    52 #include "../mat3x2.hpp"
    +
    53 #include "../mat3x3.hpp"
    +
    54 #include "../mat3x4.hpp"
    +
    55 #include "../mat4x2.hpp"
    +
    56 #include "../mat4x3.hpp"
    +
    57 #include "../mat4x4.hpp"
    +
    58 
    +
    59 namespace glm{
    +
    60 namespace detail
    +
    61 {
    +
    62  template <typename T, precision P>
    +
    63  struct outerProduct_trait<T, P, tvec2, tvec2>
    +
    64  {
    +
    65  typedef tmat2x2<T, P> type;
    +
    66  };
    +
    67 
    +
    68  template <typename T, precision P>
    +
    69  struct outerProduct_trait<T, P, tvec2, tvec3>
    +
    70  {
    +
    71  typedef tmat2x3<T, P> type;
    +
    72  };
    +
    73 
    +
    74  template <typename T, precision P>
    +
    75  struct outerProduct_trait<T, P, tvec2, tvec4>
    +
    76  {
    +
    77  typedef tmat2x4<T, P> type;
    +
    78  };
    +
    79 
    +
    80  template <typename T, precision P>
    +
    81  struct outerProduct_trait<T, P, tvec3, tvec2>
    +
    82  {
    +
    83  typedef tmat3x2<T, P> type;
    +
    84  };
    85 
    -
    96  template <typename genType>
    -
    97  GLM_FUNC_DECL genType round(genType const & x);
    -
    98 
    -
    108  template <typename genType>
    -
    109  GLM_FUNC_DECL genType roundEven(genType const & x);
    -
    110 
    -
    118  template <typename genType>
    -
    119  GLM_FUNC_DECL genType ceil(genType const & x);
    +
    86  template <typename T, precision P>
    +
    87  struct outerProduct_trait<T, P, tvec3, tvec3>
    +
    88  {
    +
    89  typedef tmat3x3<T, P> type;
    +
    90  };
    +
    91 
    +
    92  template <typename T, precision P>
    +
    93  struct outerProduct_trait<T, P, tvec3, tvec4>
    +
    94  {
    +
    95  typedef tmat3x4<T, P> type;
    +
    96  };
    +
    97 
    +
    98  template <typename T, precision P>
    +
    99  struct outerProduct_trait<T, P, tvec4, tvec2>
    +
    100  {
    +
    101  typedef tmat4x2<T, P> type;
    +
    102  };
    +
    103 
    +
    104  template <typename T, precision P>
    +
    105  struct outerProduct_trait<T, P, tvec4, tvec3>
    +
    106  {
    +
    107  typedef tmat4x3<T, P> type;
    +
    108  };
    +
    109 
    +
    110  template <typename T, precision P>
    +
    111  struct outerProduct_trait<T, P, tvec4, tvec4>
    +
    112  {
    +
    113  typedef tmat4x4<T, P> type;
    +
    114  };
    +
    115 
    +
    116 }//namespace detail
    +
    117 
    120 
    -
    127  template <typename genType>
    -
    128  GLM_FUNC_DECL genType fract(genType const & x);
    -
    129 
    -
    137  template <typename genType>
    -
    138  GLM_FUNC_DECL genType mod(
    -
    139  genType const & x,
    -
    140  genType const & y);
    +
    128  template <typename T, precision P, template <typename, precision> class matType>
    +
    129  GLM_FUNC_DECL matType<T, P> matrixCompMult(matType<T, P> const & x, matType<T, P> const & y);
    +
    130 
    +
    139  template <typename T, precision P, template <typename, precision> class vecTypeA, template <typename, precision> class vecTypeB>
    +
    140  GLM_FUNC_DECL typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type outerProduct(vecTypeA<T, P> const & c, vecTypeB<T, P> const & r);
    141 
    -
    149  template <typename genType>
    -
    150  GLM_FUNC_DECL genType mod(
    -
    151  genType const & x,
    -
    152  typename genType::value_type const & y);
    -
    153 
    -
    163  template <typename genType>
    -
    164  GLM_FUNC_DECL genType modf(
    -
    165  genType const & x,
    -
    166  genType & i);
    -
    167 
    -
    174  template <typename genType>
    -
    175  GLM_FUNC_DECL genType min(
    -
    176  genType const & x,
    -
    177  genType const & y);
    -
    178 
    -
    179  template <typename genType>
    -
    180  GLM_FUNC_DECL genType min(
    -
    181  genType const & x,
    -
    182  typename genType::value_type const & y);
    -
    183 
    -
    190  template <typename genType>
    -
    191  GLM_FUNC_DECL genType max(
    -
    192  genType const & x,
    -
    193  genType const & y);
    -
    194 
    -
    195  template <typename genType>
    -
    196  GLM_FUNC_DECL genType max(
    -
    197  genType const & x,
    -
    198  typename genType::value_type const & y);
    -
    199 
    -
    207  template <typename genType>
    -
    208  GLM_FUNC_DECL genType clamp(
    -
    209  genType const & x,
    -
    210  genType const & minVal,
    -
    211  genType const & maxVal);
    -
    212 
    -
    213  template <typename genType, precision P>
    -
    214  GLM_FUNC_DECL genType clamp(
    -
    215  genType const & x,
    -
    216  typename genType::value_type const & minVal,
    -
    217  typename genType::value_type const & maxVal);
    -
    218 
    -
    261  template <typename genTypeT, typename genTypeU>
    -
    262  GLM_FUNC_DECL genTypeT mix(
    -
    263  genTypeT const & x,
    -
    264  genTypeT const & y,
    -
    265  genTypeU const & a);
    -
    266 
    -
    271  template <typename genType>
    -
    272  GLM_FUNC_DECL genType step(
    -
    273  genType const & edge,
    -
    274  genType const & x);
    -
    275 
    -
    280  template <template <typename, precision> class vecType, typename T, precision P>
    -
    281  GLM_FUNC_DECL vecType<T, P> step(
    -
    282  T const & edge,
    -
    283  vecType<T, P> const & x);
    -
    284 
    -
    299  template <typename genType>
    -
    300  GLM_FUNC_DECL genType smoothstep(
    -
    301  genType const & edge0,
    -
    302  genType const & edge1,
    -
    303  genType const & x);
    -
    304 
    -
    305  template <typename genType>
    -
    306  GLM_FUNC_DECL genType smoothstep(
    -
    307  typename genType::value_type const & edge0,
    -
    308  typename genType::value_type const & edge1,
    -
    309  genType const & x);
    -
    310 
    -
    323  template <typename genType>
    -
    324  GLM_FUNC_DECL typename genType::bool_type isnan(genType const & x);
    -
    325 
    -
    336  template <typename genType>
    -
    337  GLM_FUNC_DECL typename genType::bool_type isinf(genType const & x);
    -
    338 
    -
    345  GLM_FUNC_DECL int floatBitsToInt(float const & v);
    -
    346 
    -
    353  template <template <typename, precision> class vecType, precision P>
    -
    354  GLM_FUNC_DECL vecType<int, P> floatBitsToInt(vecType<float, P> const & v);
    -
    355 
    -
    362  GLM_FUNC_DECL uint floatBitsToUint(float const & v);
    -
    363 
    -
    370  template <template <typename, precision> class vecType, precision P>
    -
    371  GLM_FUNC_DECL vecType<uint, P> floatBitsToUint(vecType<float, P> const & v);
    -
    372 
    -
    381  GLM_FUNC_DECL float intBitsToFloat(int const & v);
    -
    382 
    -
    391  template <template <typename, precision> class vecType, precision P>
    -
    392  GLM_FUNC_DECL vecType<float, P> intBitsToFloat(vecType<int, P> const & v);
    -
    393 
    -
    402  GLM_FUNC_DECL float uintBitsToFloat(uint const & v);
    -
    403 
    -
    412  template <template <typename, precision> class vecType, precision P>
    -
    413  GLM_FUNC_DECL vecType<float, P> uintBitsToFloat(vecType<uint, P> const & v);
    -
    414 
    -
    421  template <typename genType>
    -
    422  GLM_FUNC_DECL genType fma(genType const & a, genType const & b, genType const & c);
    -
    423 
    -
    438  template <typename genType, typename genIType>
    -
    439  GLM_FUNC_DECL genType frexp(genType const & x, genIType & exp);
    -
    440 
    -
    452  template <typename genType, typename genIType>
    -
    453  GLM_FUNC_DECL genType ldexp(genType const & x, genIType const & exp);
    -
    454 
    -
    456 }//namespace glm
    -
    457 
    -
    458 #include "func_common.inl"
    -
    459 
    -
    460 #endif//GLM_FUNC_COMMON_INCLUDED
    -
    GLM_FUNC_DECL genType floor(genType const &x)
    Returns a value equal to the nearest integer that is less then or equal to x.
    -
    GLM_FUNC_DECL genTypeT mix(genTypeT const &x, genTypeT const &y, genTypeU const &a)
    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
    -
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:171
    -
    GLM_FUNC_DECL genType mod(genType const &x, genType const &y)
    Modulus.
    -
    GLM_FUNC_DECL genType modf(genType const &x, genType &i)
    Returns the fractional part of x and sets i to the integer part (as a whole number floating point val...
    -
    GLM_FUNC_DECL genType exp(genType const &x)
    Returns the natural exponentiation of x, i.e., e^x.
    -
    GLM_FUNC_DECL genType fract(genType const &x)
    Return x - floor(x).
    -
    GLM_FUNC_DECL genType ceil(genType const &x)
    Returns a value equal to the nearest integer that is greater than or equal to x.
    -
    GLM_FUNC_DECL genType::bool_type isnan(genType const &x)
    Returns true if x holds a NaN (not a number) representation in the underlying implementation&#39;s set of...
    -
    GLM_FUNC_DECL genType fma(genType const &a, genType const &b, genType const &c)
    Computes and returns a * b + c.
    -
    GLM_FUNC_DECL float intBitsToFloat(int const &v)
    Returns a floating-point value corresponding to a signed integer encoding of a floating-point value...
    -
    GLM_FUNC_DECL genType step(genType const &edge, genType const &x)
    Returns 0.0 if x &lt; edge, otherwise it returns 1.0 for each component of a genType.
    -
    GLM_FUNC_DECL int floatBitsToInt(float const &v)
    Returns a signed integer value representing the encoding of a floating-point value.
    -
    GLM_FUNC_DECL genType trunc(genType const &x)
    Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...
    -
    GLM_FUNC_DECL genType roundEven(genType const &x)
    Returns a value equal to the nearest integer to x.
    -
    GLM_FUNC_DECL genType round(genType const &x)
    Returns a value equal to the nearest integer to x.
    -
    GLM_FUNC_DECL float uintBitsToFloat(uint const &v)
    Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value...
    -
    GLM_FUNC_DECL uint floatBitsToUint(float const &v)
    Returns a unsigned integer value representing the encoding of a floating-point value.
    -
    GLM_FUNC_DECL genType abs(genType const &x)
    Returns x if x &gt;= 0; otherwise, it returns -x.
    -
    GLM_FUNC_DECL genType::bool_type isinf(genType const &x)
    Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...
    -
    GLM_FUNC_DECL genType ldexp(genType const &x, genIType const &exp)
    Builds a floating-point number from x and the corresponding integral exponent of two in exp...
    -
    GLM_FUNC_DECL genType smoothstep(genType const &edge0, genType const &edge1, genType const &x)
    Returns 0.0 if x &lt;= edge0 and 1.0 if x &gt;= edge1 and performs smooth Hermite interpolation between 0 a...
    -
    GLM_FUNC_DECL genType clamp(genType const &x, genType const &minVal, genType const &maxVal)
    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...
    -
    GLM_FUNC_DECL genType max(genType const &x, genType const &y)
    Returns y if x &lt; y; otherwise, it returns x.
    -
    GLM_FUNC_DECL genType sign(genType const &x)
    Returns 1.0 if x &gt; 0, 0.0 if x == 0, or -1.0 if x &lt; 0.
    -
    GLM_FUNC_DECL genType min(genType const &x, genType const &y)
    Returns y if y &lt; x; otherwise, it returns x.
    -
    GLM_FUNC_DECL genType frexp(genType const &x, genIType &exp)
    Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two...
    +
    148 # if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012))
    +
    149  template <typename T, precision P, template <typename, precision> class matType>
    +
    150  GLM_FUNC_DECL typename matType<T, P>::transpose_type transpose(matType<T, P> const & x);
    +
    151 # endif
    +
    152 
    +
    159  template <typename T, precision P, template <typename, precision> class matType>
    +
    160  GLM_FUNC_DECL T determinant(matType<T, P> const & m);
    +
    161 
    +
    168  template <typename T, precision P, template <typename, precision> class matType>
    +
    169  GLM_FUNC_DECL matType<T, P> inverse(matType<T, P> const & m);
    +
    170 
    +
    172 }//namespace glm
    +
    173 
    +
    174 #include "func_matrix.inl"
    +
    GLM_FUNC_DECL detail::outerProduct_trait< T, P, vecTypeA, vecTypeB >::type outerProduct(vecTypeA< T, P > const &c, vecTypeB< T, P > const &r)
    Treats the first parameter c as a column vector and the second parameter r as a row vector and does a...
    +
    GLM_FUNC_DECL matType< T, P > inverse(matType< T, P > const &m)
    Return the inverse of a squared matrix.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL matType< T, P > matrixCompMult(matType< T, P > const &x, matType< T, P > const &y)
    Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and...
    +
    GLM_FUNC_DECL T determinant(matType< T, P > const &m)
    Returns the transposed matrix of x.
    diff --git a/doc/api/a00033.html b/doc/api/a00033.html new file mode 100644 index 00000000..b786cce4 --- /dev/null +++ b/doc/api/a00033.html @@ -0,0 +1,94 @@ + + + + + + +0.9.6: func_noise.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    func_noise.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType::value_type noise1 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL tvec2< typename
    +genType::value_type, defaultp > 
    noise2 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL tvec3< typename
    +genType::value_type, defaultp > 
    noise3 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL tvec4< typename
    +genType::value_type, defaultp > 
    noise4 (genType const &x)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2008-08-01 / 2011-06-18
    +
    Author
    Christophe Riccio
    +
    See also
    GLSL 4.20.8 specification, section 8.13 Noise Functions
    + +

    Definition in file func_noise.hpp.

    +
    + + + + diff --git a/doc/api/a00033_source.html b/doc/api/a00033_source.html index bb10b784..15648426 100644 --- a/doc/api/a00033_source.html +++ b/doc/api/a00033_source.html @@ -3,8 +3,8 @@ - -GLM: func_exponential.hpp Source File + +0.9.6: func_noise.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,66 +41,55 @@
    -
    func_exponential.hpp
    +
    func_noise.hpp
    -
    1 
    -
    36 #ifndef glm_core_func_exponential
    -
    37 #define glm_core_func_exponential
    -
    38 
    -
    39 #include "type_vec1.hpp"
    -
    40 #include "type_vec2.hpp"
    -
    41 #include "type_vec3.hpp"
    -
    42 #include "type_vec4.hpp"
    -
    43 #include <cmath>
    +Go to the documentation of this file.
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 #include "type_vec1.hpp"
    +
    41 #include "type_vec2.hpp"
    +
    42 #include "type_vec3.hpp"
    +
    43 #include "setup.hpp"
    44 
    -
    45 namespace glm
    +
    45 namespace glm
    46 {
    49 
    -
    58  template <typename genType>
    -
    59  GLM_FUNC_DECL genType pow(genType const & base, genType const & exponent);
    -
    60 
    -
    68  template <typename genType>
    -
    69  GLM_FUNC_DECL genType exp(genType const & x);
    -
    70 
    -
    80  template <typename genType>
    -
    81  GLM_FUNC_DECL genType log(genType const & x);
    -
    82 
    -
    90  template <typename genType>
    -
    91  GLM_FUNC_DECL genType exp2(genType const & x);
    -
    92 
    -
    101  template <typename genType>
    -
    102  GLM_FUNC_DECL genType log2(genType const & x);
    -
    103 
    -
    111  template <typename genType>
    -
    112  GLM_FUNC_DECL genType sqrt(genType const & x);
    -
    113 
    -
    121  template <typename genType>
    -
    122  GLM_FUNC_DECL genType inversesqrt(genType const & x);
    -
    123 
    -
    125 }//namespace glm
    -
    126 
    -
    127 #include "func_exponential.inl"
    -
    128 
    -
    129 #endif//glm_core_func_exponential
    -
    GLM_FUNC_DECL genType sqrt(genType const &x)
    Returns the positive square root of x.
    -
    GLM_FUNC_DECL genType inversesqrt(genType const &x)
    Returns the reciprocal of the positive square root of x.
    -
    GLM_FUNC_DECL genType exp(genType const &x)
    Returns the natural exponentiation of x, i.e., e^x.
    -
    GLM_FUNC_DECL genType log2(genType const &x)
    Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y...
    -
    GLM_FUNC_DECL genType pow(genType const &base, genType const &exponent)
    Returns &#39;base&#39; raised to the power &#39;exponent&#39;.
    -
    GLM_FUNC_DECL genType exp2(genType const &x)
    Returns 2 raised to the x power.
    -
    GLM_FUNC_DECL genType log(genType const &x)
    Returns the natural logarithm of x, i.e., returns the value y which satisfies the equation x = e^y...
    +
    56  template <typename genType>
    +
    57  GLM_FUNC_DECL typename genType::value_type noise1(genType const & x);
    +
    58 
    +
    65  template <typename genType>
    +
    66  GLM_FUNC_DECL tvec2<typename genType::value_type, defaultp> noise2(genType const & x);
    +
    67 
    +
    74  template <typename genType>
    +
    75  GLM_FUNC_DECL tvec3<typename genType::value_type, defaultp> noise3(genType const & x);
    +
    76 
    +
    83  template <typename genType>
    +
    84  GLM_FUNC_DECL tvec4<typename genType::value_type, defaultp> noise4(genType const & x);
    +
    85 
    +
    87 }//namespace glm
    +
    88 
    +
    89 #include "func_noise.inl"
    +
    GLM_FUNC_DECL tvec2< typename genType::value_type, defaultp > noise2(genType const &x)
    Returns a 2D noise value based on the input value x.
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL genType::value_type noise1(genType const &x)
    Returns a 1D noise value based on the input value x.
    +
    GLM_FUNC_DECL tvec3< typename genType::value_type, defaultp > noise3(genType const &x)
    Returns a 3D noise value based on the input value x.
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL tvec4< typename genType::value_type, defaultp > noise4(genType const &x)
    Returns a 4D noise value based on the input value x.
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00034.html b/doc/api/a00034.html new file mode 100644 index 00000000..571b9103 --- /dev/null +++ b/doc/api/a00034.html @@ -0,0 +1,105 @@ + + + + + + +0.9.6: func_packing.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    func_packing.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    GLM_FUNC_DECL double packDouble2x32 (uvec2 const &v)
     
    GLM_FUNC_DECL uint packHalf2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint packSnorm2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint packSnorm4x8 (vec4 const &v)
     
    GLM_FUNC_DECL uint packUnorm2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint packUnorm4x8 (vec4 const &v)
     
    GLM_FUNC_DECL uvec2 unpackDouble2x32 (double const &v)
     
    GLM_FUNC_DECL vec2 unpackHalf2x16 (uint const &v)
     
    GLM_FUNC_DECL vec2 unpackSnorm2x16 (uint const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm4x8 (uint const &p)
     
    GLM_FUNC_DECL vec2 unpackUnorm2x16 (uint const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm4x8 (uint const &p)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2010-03-17 / 2011-06-15
    +
    Author
    Christophe Riccio
    +
    See also
    GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +
    +GLM_GTC_packing
    + +

    Definition in file func_packing.hpp.

    +
    + + + + diff --git a/doc/api/a00034_source.html b/doc/api/a00034_source.html index f57c5137..7e2a6b5f 100644 --- a/doc/api/a00034_source.html +++ b/doc/api/a00034_source.html @@ -3,8 +3,8 @@ - -GLM: func_geometric.hpp Source File + +0.9.6: func_packing.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,87 +41,75 @@
    -
    func_geometric.hpp
    +
    func_packing.hpp
    -
    1 
    -
    36 #ifndef glm_core_func_geometric
    -
    37 #define glm_core_func_geometric
    -
    38 
    -
    39 #include "type_vec3.hpp"
    -
    40 
    -
    41 namespace glm
    -
    42 {
    -
    45 
    -
    52  template <typename genType>
    -
    53  GLM_FUNC_DECL typename genType::value_type length(
    -
    54  genType const & x);
    -
    55 
    -
    62  template <typename genType>
    -
    63  GLM_FUNC_DECL typename genType::value_type distance(
    -
    64  genType const & p0,
    -
    65  genType const & p1);
    -
    66 
    -
    73  template <typename T, precision P, template <typename, precision> class vecType>
    -
    74  GLM_FUNC_DECL T dot(
    -
    75  vecType<T, P> const & x,
    -
    76  vecType<T, P> const & y);
    -
    77 
    -
    84  template <typename genType>
    -
    85  GLM_FUNC_DECL genType dot(
    -
    86  genType const & x,
    -
    87  genType const & y);
    -
    88 
    -
    95  template <typename T, precision P>
    -
    96  GLM_FUNC_DECL detail::tvec3<T, P> cross(
    -
    97  detail::tvec3<T, P> const & x,
    -
    98  detail::tvec3<T, P> const & y);
    -
    99 
    -
    104  template <typename genType>
    -
    105  GLM_FUNC_DECL genType normalize(
    -
    106  genType const & x);
    -
    107 
    -
    114  template <typename genType>
    -
    115  GLM_FUNC_DECL genType faceforward(
    -
    116  genType const & N,
    -
    117  genType const & I,
    -
    118  genType const & Nref);
    -
    119 
    -
    127  template <typename genType>
    -
    128  GLM_FUNC_DECL genType reflect(
    -
    129  genType const & I,
    -
    130  genType const & N);
    -
    131 
    -
    140  template <typename T, precision P, template <typename, precision> class vecType>
    -
    141  GLM_FUNC_DECL vecType<T, P> refract(
    -
    142  vecType<T, P> const & I,
    -
    143  vecType<T, P> const & N,
    -
    144  T const & eta);
    -
    145 
    -
    147 }//namespace glm
    -
    148 
    -
    149 #include "func_geometric.inl"
    +Go to the documentation of this file.
    1 
    +
    37 #pragma once
    +
    38 
    +
    39 #include "type_vec2.hpp"
    +
    40 #include "type_vec4.hpp"
    +
    41 
    +
    42 namespace glm
    +
    43 {
    +
    46 
    +
    58  GLM_FUNC_DECL uint packUnorm2x16(vec2 const & v);
    +
    59 
    +
    71  GLM_FUNC_DECL uint packSnorm2x16(vec2 const & v);
    +
    72 
    +
    84  GLM_FUNC_DECL uint packUnorm4x8(vec4 const & v);
    +
    85 
    +
    97  GLM_FUNC_DECL uint packSnorm4x8(vec4 const & v);
    +
    98 
    +
    110  GLM_FUNC_DECL vec2 unpackUnorm2x16(uint const & p);
    +
    111 
    +
    123  GLM_FUNC_DECL vec2 unpackSnorm2x16(uint const & p);
    +
    124 
    +
    136  GLM_FUNC_DECL vec4 unpackUnorm4x8(uint const & p);
    +
    137 
    +
    149  GLM_FUNC_DECL vec4 unpackSnorm4x8(uint const & p);
    150 
    -
    151 #endif//glm_core_func_geometric
    -
    GLM_FUNC_DECL genType faceforward(genType const &N, genType const &I, genType const &Nref)
    If dot(Nref, I) &lt; 0.0, return N, otherwise, return -N.
    -
    GLM_FUNC_DECL T dot(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the dot product of x and y, i.e., result = x * y.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > cross(detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
    Returns the cross product of x and y.
    -
    GLM_FUNC_DECL genType normalize(genType const &x)
    Returns a vector in the same direction as x but with length of 1.
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    -
    GLM_FUNC_DECL vecType< T, P > refract(vecType< T, P > const &I, vecType< T, P > const &N, T const &eta)
    For the incident vector I and surface normal N, and the ratio of indices of refraction eta...
    -
    GLM_FUNC_DECL genType reflect(genType const &I, genType const &N)
    For the incident vector I and surface orientation N, returns the reflection direction : result = I - ...
    -
    GLM_FUNC_DECL genType::value_type distance(genType const &p0, genType const &p1)
    Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
    +
    159  GLM_FUNC_DECL double packDouble2x32(uvec2 const & v);
    +
    160 
    +
    168  GLM_FUNC_DECL uvec2 unpackDouble2x32(double const & v);
    +
    169 
    +
    178  GLM_FUNC_DECL uint packHalf2x16(vec2 const & v);
    +
    179 
    +
    188  GLM_FUNC_DECL vec2 unpackHalf2x16(uint const & v);
    +
    189 
    +
    191 }//namespace glm
    +
    192 
    +
    193 #include "func_packing.inl"
    +
    GLM_FUNC_DECL uint packSnorm2x16(vec2 const &v)
    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
    +
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:302
    +
    GLM_FUNC_DECL vec4 unpackSnorm4x8(uint const &p)
    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
    +
    GLM_FUNC_DECL vec2 unpackUnorm2x16(uint const &p)
    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
    +
    GLM_FUNC_DECL uint packHalf2x16(vec2 const &v)
    Returns an unsigned integer obtained by converting the components of a two-component floating-point v...
    +
    GLM_FUNC_DECL vec2 unpackSnorm2x16(uint const &p)
    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
    +
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    +
    GLM_FUNC_DECL uvec2 unpackDouble2x32(double const &v)
    Returns a two-component unsigned integer vector representation of v.
    +
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vec2 unpackHalf2x16(uint const &v)
    Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned...
    +
    GLM_FUNC_DECL double packDouble2x32(uvec2 const &v)
    Returns a double-precision value obtained by packing the components of v into a 64-bit value...
    +
    GLM_FUNC_DECL uint packSnorm4x8(vec4 const &v)
    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
    +
    GLM_FUNC_DECL uint packUnorm4x8(vec4 const &v)
    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
    +
    GLM_FUNC_DECL uint packUnorm2x16(vec2 const &v)
    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
    +
    GLM_FUNC_DECL vec4 unpackUnorm4x8(uint const &p)
    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
    +
    highp_uvec2 uvec2
    2 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:472
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00035.html b/doc/api/a00035.html new file mode 100644 index 00000000..88815796 --- /dev/null +++ b/doc/api/a00035.html @@ -0,0 +1,124 @@ + + + + + + +0.9.6: func_trigonometric.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    func_trigonometric.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > acos (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > acosh (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > asin (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > asinh (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > atan (vecType< T, P > const &y, vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > atan (vecType< T, P > const &y_over_x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > atanh (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > cos (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > cosh (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > degrees (vecType< T, P > const &radians)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > radians (vecType< T, P > const &degrees)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sin (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sinh (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > tan (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > tanh (vecType< T, P > const &angle)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2008-08-01 / 2011-06-15
    +
    Author
    Christophe Riccio
    +
    See also
    GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +

    Definition in file func_trigonometric.hpp.

    +
    + + + + diff --git a/doc/api/a00035_source.html b/doc/api/a00035_source.html index 48dcadb4..f0d18c93 100644 --- a/doc/api/a00035_source.html +++ b/doc/api/a00035_source.html @@ -3,8 +3,8 @@ - -GLM: func_integer.hpp Source File + +0.9.6: func_trigonometric.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,96 +41,95 @@
    -
    func_integer.hpp
    +
    func_trigonometric.hpp
    -
    1 
    -
    38 #ifndef glm_core_func_integer
    -
    39 #define glm_core_func_integer
    -
    40 
    -
    41 #include "setup.hpp"
    -
    42 
    -
    43 namespace glm
    -
    44 {
    -
    47 
    -
    56  template <typename genUType>
    -
    57  GLM_FUNC_DECL genUType uaddCarry(
    -
    58  genUType const & x,
    -
    59  genUType const & y,
    -
    60  genUType & carry);
    -
    61 
    -
    70  template <typename genUType>
    -
    71  GLM_FUNC_DECL genUType usubBorrow(
    -
    72  genUType const & x,
    -
    73  genUType const & y,
    -
    74  genUType & borrow);
    -
    75 
    -
    84  template <typename genUType>
    -
    85  GLM_FUNC_DECL void umulExtended(
    -
    86  genUType const & x,
    -
    87  genUType const & y,
    -
    88  genUType & msb,
    -
    89  genUType & lsb);
    -
    90 
    -
    99  template <typename genIType>
    -
    100  GLM_FUNC_DECL void imulExtended(
    -
    101  genIType const & x,
    -
    102  genIType const & y,
    -
    103  genIType & msb,
    -
    104  genIType & lsb);
    -
    105 
    -
    121  template <typename genIUType>
    -
    122  GLM_FUNC_DECL genIUType bitfieldExtract(
    -
    123  genIUType const & Value,
    -
    124  int const & Offset,
    -
    125  int const & Bits);
    -
    126 
    -
    141  template <typename genIUType>
    -
    142  GLM_FUNC_DECL genIUType bitfieldInsert(
    -
    143  genIUType const & Base,
    -
    144  genIUType const & Insert,
    -
    145  int const & Offset,
    -
    146  int const & Bits);
    -
    147 
    -
    156  template <typename genIUType>
    -
    157  GLM_FUNC_DECL genIUType bitfieldReverse(genIUType const & Value);
    -
    158 
    -
    167  template <typename T, template <typename> class genIUType>
    -
    168  GLM_FUNC_DECL typename genIUType<T>::signed_type bitCount(genIUType<T> const & Value);
    -
    169 
    -
    180  template <typename T, template <typename> class genIUType>
    -
    181  GLM_FUNC_DECL typename genIUType<T>::signed_type findLSB(genIUType<T> const & Value);
    -
    182 
    -
    194  template <typename T, template <typename> class genIUType>
    -
    195  GLM_FUNC_DECL typename genIUType<T>::signed_type findMSB(genIUType<T> const & Value);
    -
    196 
    -
    198 }//namespace glm
    -
    199 
    -
    200 #include "func_integer.inl"
    -
    201 
    -
    202 #endif//glm_core_func_integer
    -
    203 
    -
    GLM_FUNC_DECL genIUType< T >::signed_type findLSB(genIUType< T > const &Value)
    Returns the bit number of the least significant bit set to 1 in the binary representation of value...
    -
    GLM_FUNC_DECL genIUType< T >::signed_type bitCount(genIUType< T > const &Value)
    Returns the number of bits set to 1 in the binary representation of value.
    -
    GLM_FUNC_DECL void imulExtended(genIType const &x, genIType const &y, genIType &msb, genIType &lsb)
    Multiplies 32-bit integers x and y, producing a 64-bit result.
    -
    GLM_FUNC_DECL genIUType bitfieldExtract(genIUType const &Value, int const &Offset, int const &Bits)
    Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of...
    -
    GLM_FUNC_DECL genIUType bitfieldReverse(genIUType const &Value)
    Returns the reversal of the bits of value.
    -
    GLM_FUNC_DECL void umulExtended(genUType const &x, genUType const &y, genUType &msb, genUType &lsb)
    Multiplies 32-bit integers x and y, producing a 64-bit result.
    -
    GLM_FUNC_DECL genIUType bitfieldInsert(genIUType const &Base, genIUType const &Insert, int const &Offset, int const &Bits)
    Returns the insertion the bits least-significant bits of insert into base.
    -
    GLM_FUNC_DECL genIUType< T >::signed_type findMSB(genIUType< T > const &Value)
    Returns the bit number of the most significant bit in the binary representation of value...
    -
    GLM_FUNC_DECL genUType uaddCarry(genUType const &x, genUType const &y, genUType &carry)
    Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).
    -
    GLM_FUNC_DECL genUType usubBorrow(genUType const &x, genUType const &y, genUType &borrow)
    Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.
    +Go to the documentation of this file.
    1 
    +
    40 #pragma once
    +
    41 
    +
    42 #include "setup.hpp"
    +
    43 #include "precision.hpp"
    +
    44 
    +
    45 namespace glm
    +
    46 {
    +
    49 
    +
    56  template <typename T, precision P, template <typename, precision> class vecType>
    +
    57  GLM_FUNC_DECL vecType<T, P> radians(vecType<T, P> const & degrees);
    +
    58 
    +
    65  template <typename T, precision P, template <typename, precision> class vecType>
    +
    66  GLM_FUNC_DECL vecType<T, P> degrees(vecType<T, P> const & radians);
    +
    67 
    +
    75  template <typename T, precision P, template <typename, precision> class vecType>
    +
    76  GLM_FUNC_DECL vecType<T, P> sin(vecType<T, P> const & angle);
    +
    77 
    +
    85  template <typename T, precision P, template <typename, precision> class vecType>
    +
    86  GLM_FUNC_DECL vecType<T, P> cos(vecType<T, P> const & angle);
    +
    87 
    +
    94  template <typename T, precision P, template <typename, precision> class vecType>
    +
    95  GLM_FUNC_DECL vecType<T, P> tan(vecType<T, P> const & angle);
    +
    96 
    +
    105  template <typename T, precision P, template <typename, precision> class vecType>
    +
    106  GLM_FUNC_DECL vecType<T, P> asin(vecType<T, P> const & x);
    +
    107 
    +
    116  template <typename T, precision P, template <typename, precision> class vecType>
    +
    117  GLM_FUNC_DECL vecType<T, P> acos(vecType<T, P> const & x);
    +
    118 
    +
    129  template <typename T, precision P, template <typename, precision> class vecType>
    +
    130  GLM_FUNC_DECL vecType<T, P> atan(vecType<T, P> const & y, vecType<T, P> const & x);
    +
    131 
    +
    139  template <typename T, precision P, template <typename, precision> class vecType>
    +
    140  GLM_FUNC_DECL vecType<T, P> atan(vecType<T, P> const & y_over_x);
    +
    141 
    +
    148  template <typename T, precision P, template <typename, precision> class vecType>
    +
    149  GLM_FUNC_DECL vecType<T, P> sinh(vecType<T, P> const & angle);
    +
    150 
    +
    157  template <typename T, precision P, template <typename, precision> class vecType>
    +
    158  GLM_FUNC_DECL vecType<T, P> cosh(vecType<T, P> const & angle);
    +
    159 
    +
    166  template <typename T, precision P, template <typename, precision> class vecType>
    +
    167  GLM_FUNC_DECL vecType<T, P> tanh(vecType<T, P> const & angle);
    +
    168 
    +
    175  template <typename T, precision P, template <typename, precision> class vecType>
    +
    176  GLM_FUNC_DECL vecType<T, P> asinh(vecType<T, P> const & x);
    +
    177 
    +
    185  template <typename T, precision P, template <typename, precision> class vecType>
    +
    186  GLM_FUNC_DECL vecType<T, P> acosh(vecType<T, P> const & x);
    +
    187 
    +
    195  template <typename T, precision P, template <typename, precision> class vecType>
    +
    196  GLM_FUNC_DECL vecType<T, P> atanh(vecType<T, P> const & x);
    +
    197 
    +
    199 }//namespace glm
    +
    200 
    +
    201 #include "func_trigonometric.inl"
    +
    GLM_FUNC_DECL vecType< T, P > acosh(vecType< T, P > const &x)
    Arc hyperbolic cosine; returns the non-negative inverse of cosh.
    +
    GLM_FUNC_DECL vecType< T, P > sin(vecType< T, P > const &angle)
    The standard trigonometric sine function.
    +
    GLM_FUNC_DECL vecType< T, P > atan(vecType< T, P > const &y_over_x)
    Arc tangent.
    +
    GLM_FUNC_DECL vecType< T, P > cosh(vecType< T, P > const &angle)
    Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vecType< T, P > asin(vecType< T, P > const &x)
    Arc sine.
    +
    GLM_FUNC_DECL vecType< T, P > asinh(vecType< T, P > const &x)
    Arc hyperbolic sine; returns the inverse of sinh.
    +
    GLM_FUNC_DECL vecType< T, P > atanh(vecType< T, P > const &x)
    Arc hyperbolic tangent; returns the inverse of tanh.
    +
    GLM_FUNC_DECL vecType< T, P > sinh(vecType< T, P > const &angle)
    Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.
    +
    GLM_FUNC_DECL vecType< T, P > radians(vecType< T, P > const &degrees)
    Converts degrees to radians and returns the result.
    +
    GLM_FUNC_DECL vecType< T, P > acos(vecType< T, P > const &x)
    Arc cosine.
    +
    GLM_FUNC_DECL vecType< T, P > tanh(vecType< T, P > const &angle)
    Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
    +
    GLM_FUNC_DECL vecType< T, P > degrees(vecType< T, P > const &radians)
    Converts radians to degrees and returns the result.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vecType< T, P > tan(vecType< T, P > const &angle)
    The standard trigonometric tangent function.
    +
    GLM_FUNC_DECL vecType< T, P > cos(vecType< T, P > const &angle)
    The standard trigonometric cosine function.
    diff --git a/doc/api/a00036.html b/doc/api/a00036.html new file mode 100644 index 00000000..d3360b7c --- /dev/null +++ b/doc/api/a00036.html @@ -0,0 +1,106 @@ + + + + + + +0.9.6: func_vector_relational.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    func_vector_relational.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool all (vecType< bool, P > const &v)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool any (vecType< bool, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > equal (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > greaterThan (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > greaterThanEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > lessThan (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > lessThanEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > not_ (vecType< bool, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > notEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2008-08-03 / 2011-06-15
    +
    Author
    Christophe Riccio
    +
    See also
    GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +

    Definition in file func_vector_relational.hpp.

    +
    + + + + diff --git a/doc/api/a00036_source.html b/doc/api/a00036_source.html index ac54cfd7..af342ad6 100644 --- a/doc/api/a00036_source.html +++ b/doc/api/a00036_source.html @@ -3,8 +3,8 @@ - -GLM: func_matrix.hpp Source File + +0.9.6: func_vector_relational.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,124 +41,71 @@
    -
    func_matrix.hpp
    +
    func_vector_relational.hpp
    -
    1 
    -
    40 #ifndef GLM_CORE_func_matrix
    -
    41 #define GLM_CORE_func_matrix
    -
    42 
    -
    43 // Dependencies
    -
    44 #include "../detail/precision.hpp"
    -
    45 #include "../detail/setup.hpp"
    -
    46 #include "../detail/type_mat.hpp"
    -
    47 #include "../vec2.hpp"
    -
    48 #include "../vec3.hpp"
    -
    49 #include "../vec4.hpp"
    -
    50 #include "../mat2x2.hpp"
    -
    51 #include "../mat2x3.hpp"
    -
    52 #include "../mat2x4.hpp"
    -
    53 #include "../mat3x2.hpp"
    -
    54 #include "../mat3x3.hpp"
    -
    55 #include "../mat3x4.hpp"
    -
    56 #include "../mat4x2.hpp"
    -
    57 #include "../mat4x3.hpp"
    -
    58 #include "../mat4x4.hpp"
    +Go to the documentation of this file.
    1 
    +
    41 #pragma once
    +
    42 
    +
    43 #include "precision.hpp"
    +
    44 #include "setup.hpp"
    +
    45 
    +
    46 namespace glm
    +
    47 {
    +
    50 
    +
    57  template <typename T, precision P, template <typename, precision> class vecType>
    +
    58  GLM_FUNC_DECL vecType<bool, P> lessThan(vecType<T, P> const & x, vecType<T, P> const & y);
    59 
    -
    60 namespace glm{
    -
    61 namespace detail
    -
    62 {
    -
    63  template <typename T, precision P>
    -
    64  struct outerProduct_trait<T, P, tvec2, tvec2>
    -
    65  {
    -
    66  typedef tmat2x2<T, P> type;
    -
    67  };
    +
    66  template <typename T, precision P, template <typename, precision> class vecType>
    +
    67  GLM_FUNC_DECL vecType<bool, P> lessThanEqual(vecType<T, P> const & x, vecType<T, P> const & y);
    68 
    -
    69  template <typename T, precision P>
    -
    70  struct outerProduct_trait<T, P, tvec2, tvec3>
    -
    71  {
    -
    72  typedef tmat2x3<T, P> type;
    -
    73  };
    -
    74 
    -
    75  template <typename T, precision P>
    -
    76  struct outerProduct_trait<T, P, tvec2, tvec4>
    -
    77  {
    -
    78  typedef tmat2x4<T, P> type;
    -
    79  };
    -
    80 
    -
    81  template <typename T, precision P>
    -
    82  struct outerProduct_trait<T, P, tvec3, tvec2>
    -
    83  {
    -
    84  typedef tmat3x2<T, P> type;
    -
    85  };
    +
    75  template <typename T, precision P, template <typename, precision> class vecType>
    +
    76  GLM_FUNC_DECL vecType<bool, P> greaterThan(vecType<T, P> const & x, vecType<T, P> const & y);
    +
    77 
    +
    84  template <typename T, precision P, template <typename, precision> class vecType>
    +
    85  GLM_FUNC_DECL vecType<bool, P> greaterThanEqual(vecType<T, P> const & x, vecType<T, P> const & y);
    86 
    -
    87  template <typename T, precision P>
    -
    88  struct outerProduct_trait<T, P, tvec3, tvec3>
    -
    89  {
    -
    90  typedef tmat3x3<T, P> type;
    -
    91  };
    -
    92 
    -
    93  template <typename T, precision P>
    -
    94  struct outerProduct_trait<T, P, tvec3, tvec4>
    -
    95  {
    -
    96  typedef tmat3x4<T, P> type;
    -
    97  };
    -
    98 
    -
    99  template <typename T, precision P>
    -
    100  struct outerProduct_trait<T, P, tvec4, tvec2>
    -
    101  {
    -
    102  typedef tmat4x2<T, P> type;
    -
    103  };
    +
    93  template <typename T, precision P, template <typename, precision> class vecType>
    +
    94  GLM_FUNC_DECL vecType<bool, P> equal(vecType<T, P> const & x, vecType<T, P> const & y);
    +
    95 
    +
    102  template <typename T, precision P, template <typename, precision> class vecType>
    +
    103  GLM_FUNC_DECL vecType<bool, P> notEqual(vecType<T, P> const & x, vecType<T, P> const & y);
    104 
    -
    105  template <typename T, precision P>
    -
    106  struct outerProduct_trait<T, P, tvec4, tvec3>
    -
    107  {
    -
    108  typedef tmat4x3<T, P> type;
    -
    109  };
    -
    110 
    -
    111  template <typename T, precision P>
    -
    112  struct outerProduct_trait<T, P, tvec4, tvec4>
    -
    113  {
    -
    114  typedef tmat4x4<T, P> type;
    -
    115  };
    -
    116 
    -
    117 }//namespace detail
    -
    118 
    -
    121 
    -
    129  template <typename T, precision P, template <typename, precision> class matType>
    -
    130  GLM_FUNC_DECL matType<T, P> matrixCompMult(matType<T, P> const & x, matType<T, P> const & y);
    -
    131 
    -
    142  template <typename T, precision P, template <typename, precision> class vecTypeA, template <typename, precision> class vecTypeB>
    -
    143  GLM_FUNC_DECL typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type outerProduct(vecTypeA<T, P> const & c, vecTypeB<T, P> const & r);
    -
    144 
    -
    151 # if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11))
    -
    152  template <typename T, precision P, template <typename, precision> class matType>
    -
    153  GLM_FUNC_DECL typename matType<T, P>::transpose_type transpose(matType<T, P> const & x);
    -
    154 # endif
    -
    155 
    -
    162  template <typename T, precision P, template <typename, precision> class matType>
    -
    163  GLM_FUNC_DECL T determinant(matType<T, P> const & m);
    -
    164 
    -
    171  template <typename T, precision P, template <typename, precision> class matType>
    -
    172  GLM_FUNC_DECL matType<T, P> inverse(matType<T, P> const & m);
    -
    173 
    -
    175 }//namespace glm
    -
    176 
    -
    177 #include "func_matrix.inl"
    -
    178 
    -
    179 #endif//GLM_CORE_func_matrix
    -
    GLM_FUNC_DECL detail::tquat< T, P > inverse(detail::tquat< T, P > const &q)
    Returns the q inverse.
    +
    111  template <precision P, template <typename, precision> class vecType>
    +
    112  GLM_FUNC_DECL bool any(vecType<bool, P> const & v);
    +
    113 
    +
    120  template <precision P, template <typename, precision> class vecType>
    +
    121  GLM_FUNC_DECL bool all(vecType<bool, P> const & v);
    +
    122 
    +
    130  template <precision P, template <typename, precision> class vecType>
    +
    131  GLM_FUNC_DECL vecType<bool, P> not_(vecType<bool, P> const & v);
    +
    132 
    +
    134 }//namespace glm
    +
    135 
    +
    136 #include "func_vector_relational.inl"
    +
    GLM_FUNC_DECL bool all(vecType< bool, P > const &v)
    Returns true if all components of x are true.
    +
    GLM_FUNC_DECL vecType< bool, P > lessThanEqual(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x <= y.
    +
    GLM_FUNC_DECL vecType< bool, P > not_(vecType< bool, P > const &v)
    Returns the component-wise logical complement of x.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vecType< bool, P > notEqual(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x != y.
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vecType< bool, P > lessThan(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison result of x < y.
    +
    GLM_FUNC_DECL vecType< bool, P > greaterThan(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x > y.
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL bool any(vecType< bool, P > const &v)
    Returns true if any component of x is true.
    +
    GLM_FUNC_DECL vecType< bool, P > equal(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x == y.
    +
    GLM_FUNC_DECL vecType< bool, P > greaterThanEqual(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x >= y.
    diff --git a/doc/api/a00037.html b/doc/api/a00037.html new file mode 100644 index 00000000..25f2bb9c --- /dev/null +++ b/doc/api/a00037.html @@ -0,0 +1,985 @@ + + + + + + +0.9.6: fwd.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    fwd.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef highp_dquat dquat
     
    typedef highp_float32_t f32
     
    typedef f32mat2x2 f32mat2
     
    typedef highp_f32mat2x2 f32mat2x2
     
    typedef highp_f32mat2x3 f32mat2x3
     
    typedef highp_f32mat2x4 f32mat2x4
     
    typedef f32mat3x3 f32mat3
     
    typedef highp_f32mat3x2 f32mat3x2
     
    typedef highp_f32mat3x3 f32mat3x3
     
    typedef highp_f32mat3x4 f32mat3x4
     
    typedef f32mat4x4 f32mat4
     
    typedef highp_f32mat4x2 f32mat4x2
     
    typedef highp_f32mat4x3 f32mat4x3
     
    typedef highp_f32mat4x4 f32mat4x4
     
    typedef highp_f32quat f32quat
     
    typedef highp_f32vec1 f32vec1
     
    typedef highp_f32vec2 f32vec2
     
    typedef highp_f32vec3 f32vec3
     
    typedef highp_f32vec4 f32vec4
     
    typedef highp_float64_t f64
     
    typedef f64mat2x2 f64mat2
     
    typedef highp_f64mat2x2 f64mat2x2
     
    typedef highp_f64mat2x3 f64mat2x3
     
    typedef highp_f64mat2x4 f64mat2x4
     
    typedef f64mat3x3 f64mat3
     
    typedef highp_f64mat3x2 f64mat3x2
     
    typedef highp_f64mat3x3 f64mat3x3
     
    typedef highp_f64mat3x4 f64mat3x4
     
    typedef f64mat4x4 f64mat4
     
    typedef highp_f64mat4x2 f64mat4x2
     
    typedef highp_f64mat4x3 f64mat4x3
     
    typedef highp_f64mat4x4 f64mat4x4
     
    typedef highp_f64quat f64quat
     
    typedef highp_f64vec1 f64vec1
     
    typedef highp_f64vec2 f64vec2
     
    typedef highp_f64vec3 f64vec3
     
    typedef highp_f64vec4 f64vec4
     
    typedef highp_float32_t float32_t
     
    typedef highp_float64_t float64_t
     
    typedef fmat2x2 fmat2
     
    typedef highp_f32mat2x2 fmat2x2
     
    typedef highp_f32mat2x3 fmat2x3
     
    typedef highp_f32mat2x4 fmat2x4
     
    typedef fmat3x3 fmat3
     
    typedef highp_f32mat3x2 fmat3x2
     
    typedef highp_f32mat3x3 fmat3x3
     
    typedef highp_f32mat3x4 fmat3x4
     
    typedef fmat4x4 fmat4
     
    typedef highp_f32mat4x2 fmat4x2
     
    typedef highp_f32mat4x3 fmat4x3
     
    typedef highp_f32mat4x4 fmat4x4
     
    typedef quat fquat
     
    typedef highp_f32vec1 fvec1
     
    typedef highp_f32vec2 fvec2
     
    typedef highp_f32vec3 fvec3
     
    typedef highp_f32vec4 fvec4
     
    typedef tquat< double, highp > highp_dquat
     
    typedef float32 highp_f32
     
    typedef highp_f32mat2x2 highp_f32mat2
     
    typedef tmat2x2< f32, highp > highp_f32mat2x2
     
    typedef tmat2x3< f32, highp > highp_f32mat2x3
     
    typedef tmat2x4< f32, highp > highp_f32mat2x4
     
    typedef highp_f32mat3x3 highp_f32mat3
     
    typedef tmat3x2< f32, highp > highp_f32mat3x2
     
    typedef tmat3x3< f32, highp > highp_f32mat3x3
     
    typedef tmat3x4< f32, highp > highp_f32mat3x4
     
    typedef highp_f32mat4x4 highp_f32mat4
     
    typedef tmat4x2< f32, highp > highp_f32mat4x2
     
    typedef tmat4x3< f32, highp > highp_f32mat4x3
     
    typedef tmat4x4< f32, highp > highp_f32mat4x4
     
    typedef tquat< f32, highp > highp_f32quat
     
    typedef tvec1< f32, highp > highp_f32vec1
     
    typedef tvec2< f32, highp > highp_f32vec2
     
    typedef tvec3< f32, highp > highp_f32vec3
     
    typedef tvec4< f32, highp > highp_f32vec4
     
    typedef float64 highp_f64
     
    typedef highp_f64mat2x2 highp_f64mat2
     
    typedef tmat2x2< f64, highp > highp_f64mat2x2
     
    typedef tmat2x3< f64, highp > highp_f64mat2x3
     
    typedef tmat2x4< f64, highp > highp_f64mat2x4
     
    typedef highp_f64mat3x3 highp_f64mat3
     
    typedef tmat3x2< f64, highp > highp_f64mat3x2
     
    typedef tmat3x3< f64, highp > highp_f64mat3x3
     
    typedef tmat3x4< f64, highp > highp_f64mat3x4
     
    typedef highp_f64mat4x4 highp_f64mat4
     
    typedef tmat4x2< f64, highp > highp_f64mat4x2
     
    typedef tmat4x3< f64, highp > highp_f64mat4x3
     
    typedef tmat4x4< f64, highp > highp_f64mat4x4
     
    typedef tquat< f64, highp > highp_f64quat
     
    typedef tvec1< f64, highp > highp_f64vec1
     
    typedef tvec2< f64, highp > highp_f64vec2
     
    typedef tvec3< f64, highp > highp_f64vec3
     
    typedef tvec4< f64, highp > highp_f64vec4
     
    typedef detail::float32 highp_float32
     
    typedef detail::float32 highp_float32_t
     
    typedef detail::float64 highp_float64
     
    typedef detail::float64 highp_float64_t
     
    typedef highp_fmat2x2 highp_fmat2
     
    typedef tmat2x2< f32, highp > highp_fmat2x2
     
    typedef tmat2x3< f32, highp > highp_fmat2x3
     
    typedef tmat2x4< f32, highp > highp_fmat2x4
     
    typedef highp_fmat3x3 highp_fmat3
     
    typedef tmat3x2< f32, highp > highp_fmat3x2
     
    typedef tmat3x3< f32, highp > highp_fmat3x3
     
    typedef tmat3x4< f32, highp > highp_fmat3x4
     
    typedef highp_fmat4x4 highp_fmat4
     
    typedef tmat4x2< f32, highp > highp_fmat4x2
     
    typedef tmat4x3< f32, highp > highp_fmat4x3
     
    typedef tmat4x4< f32, highp > highp_fmat4x4
     
    typedef highp_quat highp_fquat
     
    typedef tvec1< float, highp > highp_fvec1
     
    typedef tvec2< float, highp > highp_fvec2
     
    typedef tvec3< float, highp > highp_fvec3
     
    typedef tvec4< float, highp > highp_fvec4
     
    typedef detail::int16 highp_i16
     
    typedef tvec1< i16, highp > highp_i16vec1
     
    typedef tvec2< i16, highp > highp_i16vec2
     
    typedef tvec3< i16, highp > highp_i16vec3
     
    typedef tvec4< i16, highp > highp_i16vec4
     
    typedef detail::int32 highp_i32
     
    typedef tvec1< i32, highp > highp_i32vec1
     
    typedef tvec2< i32, highp > highp_i32vec2
     
    typedef tvec3< i32, highp > highp_i32vec3
     
    typedef tvec4< i32, highp > highp_i32vec4
     
    typedef detail::int64 highp_i64
     
    typedef tvec1< i64, highp > highp_i64vec1
     
    typedef tvec2< i64, highp > highp_i64vec2
     
    typedef tvec3< i64, highp > highp_i64vec3
     
    typedef tvec4< i64, highp > highp_i64vec4
     
    typedef detail::int8 highp_i8
     
    typedef tvec1< i8, highp > highp_i8vec1
     
    typedef tvec2< i8, highp > highp_i8vec2
     
    typedef tvec3< i8, highp > highp_i8vec3
     
    typedef tvec4< i8, highp > highp_i8vec4
     
    typedef detail::int16 highp_int16
     
    typedef detail::int16 highp_int16_t
     
    typedef detail::int32 highp_int32
     
    typedef detail::int32 highp_int32_t
     
    typedef detail::int64 highp_int64
     
    typedef detail::int64 highp_int64_t
     
    typedef detail::int8 highp_int8
     
    typedef detail::int8 highp_int8_t
     
    typedef tquat< float, highp > highp_quat
     
    typedef detail::uint16 highp_u16
     
    typedef tvec1< u16, highp > highp_u16vec1
     
    typedef tvec2< u16, highp > highp_u16vec2
     
    typedef tvec3< u16, highp > highp_u16vec3
     
    typedef tvec4< u16, highp > highp_u16vec4
     
    typedef detail::uint32 highp_u32
     
    typedef tvec1< u32, highp > highp_u32vec1
     
    typedef tvec2< u32, highp > highp_u32vec2
     
    typedef tvec3< u32, highp > highp_u32vec3
     
    typedef tvec4< u32, highp > highp_u32vec4
     
    typedef detail::uint64 highp_u64
     
    typedef tvec1< u64, highp > highp_u64vec1
     
    typedef tvec2< u64, highp > highp_u64vec2
     
    typedef tvec3< u64, highp > highp_u64vec3
     
    typedef tvec4< u64, highp > highp_u64vec4
     
    typedef detail::uint8 highp_u8
     
    typedef tvec1< u8, highp > highp_u8vec1
     
    typedef tvec2< u8, highp > highp_u8vec2
     
    typedef tvec3< u8, highp > highp_u8vec3
     
    typedef tvec4< u8, highp > highp_u8vec4
     
    typedef detail::uint16 highp_uint16
     
    typedef detail::uint16 highp_uint16_t
     
    typedef detail::uint32 highp_uint32
     
    typedef detail::uint32 highp_uint32_t
     
    typedef detail::uint64 highp_uint64
     
    typedef detail::uint64 highp_uint64_t
     
    typedef detail::uint8 highp_uint8
     
    typedef detail::uint8 highp_uint8_t
     
    typedef tvec1< float, highp > highp_vec1
     
    typedef detail::int16 i16
     
    typedef highp_i16vec1 i16vec1
     
    typedef highp_i16vec2 i16vec2
     
    typedef highp_i16vec3 i16vec3
     
    typedef highp_i16vec4 i16vec4
     
    typedef detail::int32 i32
     
    typedef highp_i32vec1 i32vec1
     
    typedef highp_i32vec2 i32vec2
     
    typedef highp_i32vec3 i32vec3
     
    typedef highp_i32vec4 i32vec4
     
    typedef detail::int64 i64
     
    typedef highp_i64vec1 i64vec1
     
    typedef highp_i64vec2 i64vec2
     
    typedef highp_i64vec3 i64vec3
     
    typedef highp_i64vec4 i64vec4
     
    typedef detail::int8 i8
     
    typedef highp_i8vec1 i8vec1
     
    typedef highp_i8vec2 i8vec2
     
    typedef highp_i8vec3 i8vec3
     
    typedef highp_i8vec4 i8vec4
     
    typedef detail::int16 int16_t
     
    typedef detail::int32 int32_t
     
    typedef detail::int64 int64_t
     
    typedef detail::int8 int8_t
     
    typedef tquat< double, lowp > lowp_dquat
     
    typedef float32 lowp_f32
     
    typedef lowp_f32mat2x2 lowp_f32mat2
     
    typedef tmat2x2< f32, lowp > lowp_f32mat2x2
     
    typedef tmat2x3< f32, lowp > lowp_f32mat2x3
     
    typedef tmat2x4< f32, lowp > lowp_f32mat2x4
     
    typedef lowp_f32mat3x3 lowp_f32mat3
     
    typedef tmat3x2< f32, lowp > lowp_f32mat3x2
     
    typedef tmat3x3< f32, lowp > lowp_f32mat3x3
     
    typedef tmat3x4< f32, lowp > lowp_f32mat3x4
     
    typedef lowp_f32mat4x4 lowp_f32mat4
     
    typedef tmat4x2< f32, lowp > lowp_f32mat4x2
     
    typedef tmat4x3< f32, lowp > lowp_f32mat4x3
     
    typedef tmat4x4< f32, lowp > lowp_f32mat4x4
     
    typedef tquat< f32, lowp > lowp_f32quat
     
    typedef tvec1< f32, lowp > lowp_f32vec1
     
    typedef tvec2< f32, lowp > lowp_f32vec2
     
    typedef tvec3< f32, lowp > lowp_f32vec3
     
    typedef tvec4< f32, lowp > lowp_f32vec4
     
    typedef float64 lowp_f64
     
    typedef lowp_f64mat2x2 lowp_f64mat2
     
    typedef tmat2x2< f64, lowp > lowp_f64mat2x2
     
    typedef tmat2x3< f64, lowp > lowp_f64mat2x3
     
    typedef tmat2x4< f64, lowp > lowp_f64mat2x4
     
    typedef lowp_f64mat3x3 lowp_f64mat3
     
    typedef tmat3x2< f64, lowp > lowp_f64mat3x2
     
    typedef tmat3x3< f64, lowp > lowp_f64mat3x3
     
    typedef tmat3x4< f64, lowp > lowp_f64mat3x4
     
    typedef lowp_f64mat4x4 lowp_f64mat4
     
    typedef tmat4x2< f64, lowp > lowp_f64mat4x2
     
    typedef tmat4x3< f64, lowp > lowp_f64mat4x3
     
    typedef tmat4x4< f64, lowp > lowp_f64mat4x4
     
    typedef tquat< f64, lowp > lowp_f64quat
     
    typedef tvec1< f64, lowp > lowp_f64vec1
     
    typedef tvec2< f64, lowp > lowp_f64vec2
     
    typedef tvec3< f64, lowp > lowp_f64vec3
     
    typedef tvec4< f64, lowp > lowp_f64vec4
     
    typedef detail::float32 lowp_float32
     
    typedef detail::float32 lowp_float32_t
     
    typedef detail::float64 lowp_float64
     
    typedef detail::float64 lowp_float64_t
     
    typedef lowp_fmat2x2 lowp_fmat2
     
    typedef tmat2x2< f32, lowp > lowp_fmat2x2
     
    typedef tmat2x3< f32, lowp > lowp_fmat2x3
     
    typedef tmat2x4< f32, lowp > lowp_fmat2x4
     
    typedef lowp_fmat3x3 lowp_fmat3
     
    typedef tmat3x2< f32, lowp > lowp_fmat3x2
     
    typedef tmat3x3< f32, lowp > lowp_fmat3x3
     
    typedef tmat3x4< f32, lowp > lowp_fmat3x4
     
    typedef lowp_fmat4x4 lowp_fmat4
     
    typedef tmat4x2< f32, lowp > lowp_fmat4x2
     
    typedef tmat4x3< f32, lowp > lowp_fmat4x3
     
    typedef tmat4x4< f32, lowp > lowp_fmat4x4
     
    typedef lowp_quat lowp_fquat
     
    typedef tvec1< float, lowp > lowp_fvec1
     
    typedef tvec2< float, lowp > lowp_fvec2
     
    typedef tvec3< float, lowp > lowp_fvec3
     
    typedef tvec4< float, lowp > lowp_fvec4
     
    typedef detail::int16 lowp_i16
     
    typedef tvec1< i16, lowp > lowp_i16vec1
     
    typedef tvec2< i16, lowp > lowp_i16vec2
     
    typedef tvec3< i16, lowp > lowp_i16vec3
     
    typedef tvec4< i16, lowp > lowp_i16vec4
     
    typedef detail::int32 lowp_i32
     
    typedef tvec1< i32, lowp > lowp_i32vec1
     
    typedef tvec2< i32, lowp > lowp_i32vec2
     
    typedef tvec3< i32, lowp > lowp_i32vec3
     
    typedef tvec4< i32, lowp > lowp_i32vec4
     
    typedef detail::int64 lowp_i64
     
    typedef tvec1< i64, lowp > lowp_i64vec1
     
    typedef tvec2< i64, lowp > lowp_i64vec2
     
    typedef tvec3< i64, lowp > lowp_i64vec3
     
    typedef tvec4< i64, lowp > lowp_i64vec4
     
    typedef detail::int8 lowp_i8
     
    typedef tvec1< i8, lowp > lowp_i8vec1
     
    typedef tvec2< i8, lowp > lowp_i8vec2
     
    typedef tvec3< i8, lowp > lowp_i8vec3
     
    typedef tvec4< i8, lowp > lowp_i8vec4
     
    typedef detail::int16 lowp_int16
     
    typedef detail::int16 lowp_int16_t
     
    typedef detail::int32 lowp_int32
     
    typedef detail::int32 lowp_int32_t
     
    typedef detail::int64 lowp_int64
     
    typedef detail::int64 lowp_int64_t
     
    typedef detail::int8 lowp_int8
     
    typedef detail::int8 lowp_int8_t
     
    typedef tquat< float, lowp > lowp_quat
     
    typedef detail::uint16 lowp_u16
     
    typedef tvec1< u16, lowp > lowp_u16vec1
     
    typedef tvec2< u16, lowp > lowp_u16vec2
     
    typedef tvec3< u16, lowp > lowp_u16vec3
     
    typedef tvec4< u16, lowp > lowp_u16vec4
     
    typedef detail::uint32 lowp_u32
     
    typedef tvec1< u32, lowp > lowp_u32vec1
     
    typedef tvec2< u32, lowp > lowp_u32vec2
     
    typedef tvec3< u32, lowp > lowp_u32vec3
     
    typedef tvec4< u32, lowp > lowp_u32vec4
     
    typedef detail::uint64 lowp_u64
     
    typedef tvec1< u64, lowp > lowp_u64vec1
     
    typedef tvec2< u64, lowp > lowp_u64vec2
     
    typedef tvec3< u64, lowp > lowp_u64vec3
     
    typedef tvec4< u64, lowp > lowp_u64vec4
     
    typedef detail::uint8 lowp_u8
     
    typedef tvec1< u8, lowp > lowp_u8vec1
     
    typedef tvec2< u8, lowp > lowp_u8vec2
     
    typedef tvec3< u8, lowp > lowp_u8vec3
     
    typedef tvec4< u8, lowp > lowp_u8vec4
     
    typedef detail::uint16 lowp_uint16
     
    typedef detail::uint16 lowp_uint16_t
     
    typedef detail::uint32 lowp_uint32
     
    typedef detail::uint32 lowp_uint32_t
     
    typedef detail::uint64 lowp_uint64
     
    typedef detail::uint64 lowp_uint64_t
     
    typedef detail::uint8 lowp_uint8
     
    typedef detail::uint8 lowp_uint8_t
     
    typedef tvec1< float, lowp > lowp_vec1
     
    typedef tquat< double, mediump > mediump_dquat
     
    typedef float32 mediump_f32
     
    typedef mediump_f32mat2x2 mediump_f32mat2
     
    typedef tmat2x2< f32, mediump > mediump_f32mat2x2
     
    typedef tmat2x3< f32, mediump > mediump_f32mat2x3
     
    typedef tmat2x4< f32, mediump > mediump_f32mat2x4
     
    typedef mediump_f32mat3x3 mediump_f32mat3
     
    typedef tmat3x2< f32, mediump > mediump_f32mat3x2
     
    typedef tmat3x3< f32, mediump > mediump_f32mat3x3
     
    typedef tmat3x4< f32, mediump > mediump_f32mat3x4
     
    typedef mediump_f32mat4x4 mediump_f32mat4
     
    typedef tmat4x2< f32, mediump > mediump_f32mat4x2
     
    typedef tmat4x3< f32, mediump > mediump_f32mat4x3
     
    typedef tmat4x4< f32, mediump > mediump_f32mat4x4
     
    typedef tquat< f32, mediump > mediump_f32quat
     
    typedef tvec1< f32, mediump > mediump_f32vec1
     
    typedef tvec2< f32, mediump > mediump_f32vec2
     
    typedef tvec3< f32, mediump > mediump_f32vec3
     
    typedef tvec4< f32, mediump > mediump_f32vec4
     
    typedef float64 mediump_f64
     
    typedef mediump_f64mat2x2 mediump_f64mat2
     
    typedef tmat2x2< f64, mediump > mediump_f64mat2x2
     
    typedef tmat2x3< f64, mediump > mediump_f64mat2x3
     
    typedef tmat2x4< f64, mediump > mediump_f64mat2x4
     
    typedef mediump_f64mat3x3 mediump_f64mat3
     
    typedef tmat3x2< f64, mediump > mediump_f64mat3x2
     
    typedef tmat3x3< f64, mediump > mediump_f64mat3x3
     
    typedef tmat3x4< f64, mediump > mediump_f64mat3x4
     
    typedef mediump_f64mat4x4 mediump_f64mat4
     
    typedef tmat4x2< f64, mediump > mediump_f64mat4x2
     
    typedef tmat4x3< f64, mediump > mediump_f64mat4x3
     
    typedef tmat4x4< f64, mediump > mediump_f64mat4x4
     
    typedef tquat< f64, mediump > mediump_f64quat
     
    typedef tvec1< f64, mediump > mediump_f64vec1
     
    typedef tvec2< f64, mediump > mediump_f64vec2
     
    typedef tvec3< f64, mediump > mediump_f64vec3
     
    typedef tvec4< f64, mediump > mediump_f64vec4
     
    typedef detail::float32 mediump_float32
     
    typedef detail::float32 mediump_float32_t
     
    typedef detail::float64 mediump_float64
     
    typedef detail::float64 mediump_float64_t
     
    typedef mediump_fmat2x2 mediump_fmat2
     
    typedef tmat2x2< f32, mediump > mediump_fmat2x2
     
    typedef tmat2x3< f32, mediump > mediump_fmat2x3
     
    typedef tmat2x4< f32, mediump > mediump_fmat2x4
     
    typedef mediump_fmat3x3 mediump_fmat3
     
    typedef tmat3x2< f32, mediump > mediump_fmat3x2
     
    typedef tmat3x3< f32, mediump > mediump_fmat3x3
     
    typedef tmat3x4< f32, mediump > mediump_fmat3x4
     
    typedef mediump_fmat4x4 mediump_fmat4
     
    typedef tmat4x2< f32, mediump > mediump_fmat4x2
     
    typedef tmat4x3< f32, mediump > mediump_fmat4x3
     
    typedef tmat4x4< f32, mediump > mediump_fmat4x4
     
    typedef mediump_quat mediump_fquat
     
    typedef tvec1< float, mediump > mediump_fvec1
     
    typedef tvec2< float, mediump > mediump_fvec2
     
    typedef tvec3< float, mediump > mediump_fvec3
     
    typedef tvec4< float, mediump > mediump_fvec4
     
    typedef detail::int16 mediump_i16
     
    typedef tvec1< i16, mediump > mediump_i16vec1
     
    typedef tvec2< i16, mediump > mediump_i16vec2
     
    typedef tvec3< i16, mediump > mediump_i16vec3
     
    typedef tvec4< i16, mediump > mediump_i16vec4
     
    typedef detail::int32 mediump_i32
     
    typedef tvec1< i32, mediump > mediump_i32vec1
     
    typedef tvec2< i32, mediump > mediump_i32vec2
     
    typedef tvec3< i32, mediump > mediump_i32vec3
     
    typedef tvec4< i32, mediump > mediump_i32vec4
     
    typedef detail::int64 mediump_i64
     
    typedef tvec1< i64, mediump > mediump_i64vec1
     
    typedef tvec2< i64, mediump > mediump_i64vec2
     
    typedef tvec3< i64, mediump > mediump_i64vec3
     
    typedef tvec4< i64, mediump > mediump_i64vec4
     
    typedef detail::int8 mediump_i8
     
    typedef tvec1< i8, mediump > mediump_i8vec1
     
    typedef tvec2< i8, mediump > mediump_i8vec2
     
    typedef tvec3< i8, mediump > mediump_i8vec3
     
    typedef tvec4< i8, mediump > mediump_i8vec4
     
    typedef detail::int16 mediump_int16
     
    typedef detail::int16 mediump_int16_t
     
    typedef detail::int32 mediump_int32
     
    typedef detail::int32 mediump_int32_t
     
    typedef detail::int64 mediump_int64
     
    typedef detail::int64 mediump_int64_t
     
    typedef detail::int8 mediump_int8
     
    typedef detail::int8 mediump_int8_t
     
    typedef tquat< float, mediump > mediump_quat
     
    typedef detail::uint16 mediump_u16
     
    typedef tvec1< u16, mediump > mediump_u16vec1
     
    typedef tvec2< u16, mediump > mediump_u16vec2
     
    typedef tvec3< u16, mediump > mediump_u16vec3
     
    typedef tvec4< u16, mediump > mediump_u16vec4
     
    typedef detail::uint32 mediump_u32
     
    typedef tvec1< u32, mediump > mediump_u32vec1
     
    typedef tvec2< u32, mediump > mediump_u32vec2
     
    typedef tvec3< u32, mediump > mediump_u32vec3
     
    typedef tvec4< u32, mediump > mediump_u32vec4
     
    typedef detail::uint64 mediump_u64
     
    typedef tvec1< u64, mediump > mediump_u64vec1
     
    typedef tvec2< u64, mediump > mediump_u64vec2
     
    typedef tvec3< u64, mediump > mediump_u64vec3
     
    typedef tvec4< u64, mediump > mediump_u64vec4
     
    typedef detail::uint8 mediump_u8
     
    typedef tvec1< u8, mediump > mediump_u8vec1
     
    typedef tvec2< u8, mediump > mediump_u8vec2
     
    typedef tvec3< u8, mediump > mediump_u8vec3
     
    typedef tvec4< u8, mediump > mediump_u8vec4
     
    typedef detail::uint16 mediump_uint16
     
    typedef detail::uint16 mediump_uint16_t
     
    typedef detail::uint32 mediump_uint32
     
    typedef detail::uint32 mediump_uint32_t
     
    typedef detail::uint64 mediump_uint64
     
    typedef detail::uint64 mediump_uint64_t
     
    typedef detail::uint8 mediump_uint8
     
    typedef detail::uint8 mediump_uint8_t
     
    typedef tvec1< float, mediump > mediump_vec1
     
    +typedef highp_quat quat
     
    typedef detail::uint16 u16
     
    typedef highp_u16vec1 u16vec1
     
    typedef highp_u16vec2 u16vec2
     
    typedef highp_u16vec3 u16vec3
     
    typedef highp_u16vec4 u16vec4
     
    typedef detail::uint32 u32
     
    typedef highp_u32vec1 u32vec1
     
    typedef highp_u32vec2 u32vec2
     
    typedef highp_u32vec3 u32vec3
     
    typedef highp_u32vec4 u32vec4
     
    typedef detail::uint64 u64
     
    typedef highp_u64vec1 u64vec1
     
    typedef highp_u64vec2 u64vec2
     
    typedef highp_u64vec3 u64vec3
     
    typedef highp_u64vec4 u64vec4
     
    typedef detail::uint8 u8
     
    typedef highp_u8vec1 u8vec1
     
    typedef highp_u8vec2 u8vec2
     
    typedef highp_u8vec3 u8vec3
     
    typedef highp_u8vec4 u8vec4
     
    typedef detail::uint16 uint16_t
     
    typedef detail::uint32 uint32_t
     
    typedef detail::uint64 uint64_t
     
    typedef detail::uint8 uint8_t
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2013-03-30 / 2013-03-31
    +
    Author
    Christophe Riccio
    + +

    Definition in file fwd.hpp.

    +
    + + + + diff --git a/doc/api/a00037_source.html b/doc/api/a00037_source.html index 8240faee..cbd8a86b 100644 --- a/doc/api/a00037_source.html +++ b/doc/api/a00037_source.html @@ -3,8 +3,8 @@ - -GLM: func_noise.hpp Source File + +0.9.6: fwd.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,53 +41,1944 @@
    -
    func_noise.hpp
    +
    fwd.hpp
    -
    1 
    -
    38 #ifndef glm_core_func_noise
    -
    39 #define glm_core_func_noise
    -
    40 
    -
    41 #include "type_vec1.hpp"
    -
    42 #include "type_vec2.hpp"
    -
    43 #include "type_vec3.hpp"
    -
    44 #include "setup.hpp"
    -
    45 
    -
    46 namespace glm
    -
    47 {
    -
    50 
    -
    57  template <typename genType>
    -
    58  GLM_FUNC_DECL typename genType::value_type noise1(genType const & x);
    -
    59 
    -
    66  template <typename genType>
    -
    67  GLM_FUNC_DECL detail::tvec2<typename genType::value_type, defaultp> noise2(genType const & x);
    -
    68 
    -
    75  template <typename genType>
    -
    76  GLM_FUNC_DECL detail::tvec3<typename genType::value_type, defaultp> noise3(genType const & x);
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_int.hpp"
    +
    32 #include "detail/type_float.hpp"
    +
    33 #include "detail/type_vec.hpp"
    +
    34 #include "detail/type_mat.hpp"
    +
    35 
    +
    37 // GLM_GTC_quaternion
    +
    38 namespace glm
    +
    39 {
    +
    40  template <typename T, precision P> struct tquat;
    +
    41 
    +
    45  typedef tquat<float, lowp> lowp_quat;
    +
    46 
    +
    50  typedef tquat<float, mediump> mediump_quat;
    +
    51 
    +
    55  typedef tquat<float, highp> highp_quat;
    +
    56 
    +
    57 #if(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    58  typedef highp_quat quat;
    +
    59 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    60  typedef mediump_quat quat;
    +
    61 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
    +
    62  typedef lowp_quat quat;
    +
    63 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    64  typedef highp_quat quat;
    +
    66 #endif
    +
    67 
    +
    71  typedef lowp_quat lowp_fquat;
    +
    72 
    +
    76  typedef mediump_quat mediump_fquat;
    77 
    -
    84  template <typename genType>
    -
    85  GLM_FUNC_DECL detail::tvec4<typename genType::value_type, defaultp> noise4(genType const & x);
    -
    86 
    -
    88 }//namespace glm
    -
    89 
    -
    90 #include "func_noise.inl"
    -
    91 
    -
    92 #endif//glm_core_func_noise
    -
    GLM_FUNC_DECL genType::value_type noise1(genType const &x)
    Returns a 1D noise value based on the input value x.
    -
    GLM_FUNC_DECL detail::tvec2< typename genType::value_type, defaultp > noise2(genType const &x)
    Returns a 2D noise value based on the input value x.
    -
    GLM_FUNC_DECL detail::tvec4< typename genType::value_type, defaultp > noise4(genType const &x)
    Returns a 4D noise value based on the input value x.
    -
    GLM_FUNC_DECL detail::tvec3< typename genType::value_type, defaultp > noise3(genType const &x)
    Returns a 3D noise value based on the input value x.
    +
    81  typedef highp_quat highp_fquat;
    +
    82 
    +
    86  typedef quat fquat;
    +
    87 
    +
    88 
    +
    92  typedef tquat<double, lowp> lowp_dquat;
    +
    93 
    +
    97  typedef tquat<double, mediump> mediump_dquat;
    +
    98 
    +
    102  typedef tquat<double, highp> highp_dquat;
    +
    103 
    +
    104 #if(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    105  typedef highp_dquat dquat;
    +
    106 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    107  typedef mediump_dquat dquat;
    +
    108 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    109  typedef lowp_dquat dquat;
    +
    110 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    111  typedef highp_dquat dquat;
    +
    115 #endif
    +
    116 
    +
    117 }//namespace glm
    +
    118 
    +
    120 // GLM_GTC_precision
    +
    121 namespace glm
    +
    122 {
    +
    125 
    +
    128  typedef detail::int8 lowp_int8;
    +
    129 
    +
    132  typedef detail::int16 lowp_int16;
    +
    133 
    +
    136  typedef detail::int32 lowp_int32;
    +
    137 
    +
    140  typedef detail::int64 lowp_int64;
    +
    141 
    +
    144  typedef detail::int8 lowp_int8_t;
    +
    145 
    +
    148  typedef detail::int16 lowp_int16_t;
    +
    149 
    +
    152  typedef detail::int32 lowp_int32_t;
    +
    153 
    +
    156  typedef detail::int64 lowp_int64_t;
    +
    157 
    +
    160  typedef detail::int8 lowp_i8;
    +
    161 
    +
    164  typedef detail::int16 lowp_i16;
    +
    165 
    +
    168  typedef detail::int32 lowp_i32;
    +
    169 
    +
    172  typedef detail::int64 lowp_i64;
    +
    173 
    +
    176  typedef detail::int8 mediump_int8;
    +
    177 
    +
    180  typedef detail::int16 mediump_int16;
    +
    181 
    +
    184  typedef detail::int32 mediump_int32;
    +
    185 
    +
    188  typedef detail::int64 mediump_int64;
    +
    189 
    +
    192  typedef detail::int8 mediump_int8_t;
    +
    193 
    +
    196  typedef detail::int16 mediump_int16_t;
    +
    197 
    +
    200  typedef detail::int32 mediump_int32_t;
    +
    201 
    +
    204  typedef detail::int64 mediump_int64_t;
    +
    205 
    +
    208  typedef detail::int8 mediump_i8;
    +
    209 
    +
    212  typedef detail::int16 mediump_i16;
    +
    213 
    +
    216  typedef detail::int32 mediump_i32;
    +
    217 
    +
    220  typedef detail::int64 mediump_i64;
    +
    221 
    +
    224  typedef detail::int8 highp_int8;
    +
    225 
    +
    228  typedef detail::int16 highp_int16;
    +
    229 
    +
    232  typedef detail::int32 highp_int32;
    +
    233 
    +
    236  typedef detail::int64 highp_int64;
    +
    237 
    +
    240  typedef detail::int8 highp_int8_t;
    +
    241 
    +
    244  typedef detail::int16 highp_int16_t;
    +
    245 
    +
    248  typedef detail::int32 highp_int32_t;
    +
    249 
    +
    252  typedef detail::int64 highp_int64_t;
    +
    253 
    +
    256  typedef detail::int8 highp_i8;
    +
    257 
    +
    260  typedef detail::int16 highp_i16;
    +
    261 
    +
    264  typedef detail::int32 highp_i32;
    +
    265 
    +
    268  typedef detail::int64 highp_i64;
    +
    269 
    +
    270 
    +
    273  typedef detail::int8 int8;
    +
    274 
    +
    277  typedef detail::int16 int16;
    +
    278 
    +
    281  typedef detail::int32 int32;
    +
    282 
    +
    285  typedef detail::int64 int64;
    +
    286 
    +
    287 
    +
    288 #if GLM_HAS_EXTENDED_INTEGER_TYPE
    +
    289  using std::int8_t;
    +
    290  using std::int16_t;
    +
    291  using std::int32_t;
    +
    292  using std::int64_t;
    +
    293 #else
    +
    294  typedef detail::int8 int8_t;
    +
    297 
    +
    300  typedef detail::int16 int16_t;
    +
    301 
    +
    304  typedef detail::int32 int32_t;
    +
    305 
    +
    308  typedef detail::int64 int64_t;
    +
    309 #endif
    +
    310 
    +
    313  typedef detail::int8 i8;
    +
    314 
    +
    317  typedef detail::int16 i16;
    +
    318 
    +
    321  typedef detail::int32 i32;
    +
    322 
    +
    325  typedef detail::int64 i64;
    +
    326 
    +
    327 
    +
    328 
    +
    331  typedef tvec1<i8, lowp> lowp_i8vec1;
    +
    332 
    +
    335  typedef tvec2<i8, lowp> lowp_i8vec2;
    +
    336 
    +
    339  typedef tvec3<i8, lowp> lowp_i8vec3;
    +
    340 
    +
    343  typedef tvec4<i8, lowp> lowp_i8vec4;
    +
    344 
    +
    345 
    +
    348  typedef tvec1<i8, mediump> mediump_i8vec1;
    +
    349 
    +
    352  typedef tvec2<i8, mediump> mediump_i8vec2;
    +
    353 
    +
    356  typedef tvec3<i8, mediump> mediump_i8vec3;
    +
    357 
    +
    360  typedef tvec4<i8, mediump> mediump_i8vec4;
    +
    361 
    +
    362 
    +
    365  typedef tvec1<i8, highp> highp_i8vec1;
    +
    366 
    +
    369  typedef tvec2<i8, highp> highp_i8vec2;
    +
    370 
    +
    373  typedef tvec3<i8, highp> highp_i8vec3;
    +
    374 
    +
    377  typedef tvec4<i8, highp> highp_i8vec4;
    +
    378 
    +
    379 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    380  typedef lowp_i8vec1 i8vec1;
    +
    381  typedef lowp_i8vec2 i8vec2;
    +
    382  typedef lowp_i8vec3 i8vec3;
    +
    383  typedef lowp_i8vec4 i8vec4;
    +
    384 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    385  typedef mediump_i8vec1 i8vec1;
    +
    386  typedef mediump_i8vec2 i8vec2;
    +
    387  typedef mediump_i8vec3 i8vec3;
    +
    388  typedef mediump_i8vec4 i8vec4;
    +
    389 #else
    +
    390  typedef highp_i8vec1 i8vec1;
    +
    393 
    +
    396  typedef highp_i8vec2 i8vec2;
    +
    397 
    +
    400  typedef highp_i8vec3 i8vec3;
    +
    401 
    +
    404  typedef highp_i8vec4 i8vec4;
    +
    405 #endif
    +
    406 
    +
    407 
    +
    410  typedef tvec1<i16, lowp> lowp_i16vec1;
    +
    411 
    +
    414  typedef tvec2<i16, lowp> lowp_i16vec2;
    +
    415 
    +
    418  typedef tvec3<i16, lowp> lowp_i16vec3;
    +
    419 
    +
    422  typedef tvec4<i16, lowp> lowp_i16vec4;
    +
    423 
    +
    424 
    +
    427  typedef tvec1<i16, mediump> mediump_i16vec1;
    +
    428 
    +
    431  typedef tvec2<i16, mediump> mediump_i16vec2;
    +
    432 
    +
    435  typedef tvec3<i16, mediump> mediump_i16vec3;
    +
    436 
    +
    439  typedef tvec4<i16, mediump> mediump_i16vec4;
    +
    440 
    +
    441 
    +
    444  typedef tvec1<i16, highp> highp_i16vec1;
    +
    445 
    +
    448  typedef tvec2<i16, highp> highp_i16vec2;
    +
    449 
    +
    452  typedef tvec3<i16, highp> highp_i16vec3;
    +
    453 
    +
    456  typedef tvec4<i16, highp> highp_i16vec4;
    +
    457 
    +
    458 
    +
    459 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    460  typedef lowp_i16vec1 i16vec1;
    +
    461  typedef lowp_i16vec2 i16vec2;
    +
    462  typedef lowp_i16vec3 i16vec3;
    +
    463  typedef lowp_i16vec4 i16vec4;
    +
    464 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    465  typedef mediump_i16vec1 i16vec1;
    +
    466  typedef mediump_i16vec2 i16vec2;
    +
    467  typedef mediump_i16vec3 i16vec3;
    +
    468  typedef mediump_i16vec4 i16vec4;
    +
    469 #else
    +
    470  typedef highp_i16vec1 i16vec1;
    +
    473 
    +
    476  typedef highp_i16vec2 i16vec2;
    +
    477 
    +
    480  typedef highp_i16vec3 i16vec3;
    +
    481 
    +
    484  typedef highp_i16vec4 i16vec4;
    +
    485 #endif
    +
    486 
    +
    487 
    +
    490  typedef tvec1<i32, lowp> lowp_i32vec1;
    +
    491 
    +
    494  typedef tvec2<i32, lowp> lowp_i32vec2;
    +
    495 
    +
    498  typedef tvec3<i32, lowp> lowp_i32vec3;
    +
    499 
    +
    502  typedef tvec4<i32, lowp> lowp_i32vec4;
    +
    503 
    +
    504 
    +
    507  typedef tvec1<i32, mediump> mediump_i32vec1;
    +
    508 
    +
    511  typedef tvec2<i32, mediump> mediump_i32vec2;
    +
    512 
    +
    515  typedef tvec3<i32, mediump> mediump_i32vec3;
    +
    516 
    +
    519  typedef tvec4<i32, mediump> mediump_i32vec4;
    +
    520 
    +
    521 
    +
    524  typedef tvec1<i32, highp> highp_i32vec1;
    +
    525 
    +
    528  typedef tvec2<i32, highp> highp_i32vec2;
    +
    529 
    +
    532  typedef tvec3<i32, highp> highp_i32vec3;
    +
    533 
    +
    536  typedef tvec4<i32, highp> highp_i32vec4;
    +
    537 
    +
    538 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    539  typedef lowp_i32vec1 i32vec1;
    +
    540  typedef lowp_i32vec2 i32vec2;
    +
    541  typedef lowp_i32vec3 i32vec3;
    +
    542  typedef lowp_i32vec4 i32vec4;
    +
    543 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    544  typedef mediump_i32vec1 i32vec1;
    +
    545  typedef mediump_i32vec2 i32vec2;
    +
    546  typedef mediump_i32vec3 i32vec3;
    +
    547  typedef mediump_i32vec4 i32vec4;
    +
    548 #else
    +
    549  typedef highp_i32vec1 i32vec1;
    +
    552 
    +
    555  typedef highp_i32vec2 i32vec2;
    +
    556 
    +
    559  typedef highp_i32vec3 i32vec3;
    +
    560 
    +
    563  typedef highp_i32vec4 i32vec4;
    +
    564 #endif
    +
    565 
    +
    566 
    +
    569  typedef tvec1<i32, lowp> lowp_i32vec1;
    +
    570 
    +
    573  typedef tvec2<i32, lowp> lowp_i32vec2;
    +
    574 
    +
    577  typedef tvec3<i32, lowp> lowp_i32vec3;
    +
    578 
    +
    581  typedef tvec4<i32, lowp> lowp_i32vec4;
    +
    582 
    +
    583 
    +
    586  typedef tvec1<i32, mediump> mediump_i32vec1;
    +
    587 
    +
    590  typedef tvec2<i32, mediump> mediump_i32vec2;
    +
    591 
    +
    594  typedef tvec3<i32, mediump> mediump_i32vec3;
    +
    595 
    +
    598  typedef tvec4<i32, mediump> mediump_i32vec4;
    +
    599 
    +
    600 
    +
    603  typedef tvec1<i32, highp> highp_i32vec1;
    +
    604 
    +
    607  typedef tvec2<i32, highp> highp_i32vec2;
    +
    608 
    +
    611  typedef tvec3<i32, highp> highp_i32vec3;
    +
    612 
    +
    615  typedef tvec4<i32, highp> highp_i32vec4;
    +
    616 
    +
    617 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    618  typedef lowp_i32vec1 i32vec1;
    +
    619  typedef lowp_i32vec2 i32vec2;
    +
    620  typedef lowp_i32vec3 i32vec3;
    +
    621  typedef lowp_i32vec4 i32vec4;
    +
    622 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    623  typedef mediump_i32vec1 i32vec1;
    +
    624  typedef mediump_i32vec2 i32vec2;
    +
    625  typedef mediump_i32vec3 i32vec3;
    +
    626  typedef mediump_i32vec4 i32vec4;
    +
    627 #else
    +
    628  typedef highp_i32vec1 i32vec1;
    +
    631 
    +
    634  typedef highp_i32vec2 i32vec2;
    +
    635 
    +
    638  typedef highp_i32vec3 i32vec3;
    +
    639 
    +
    642  typedef highp_i32vec4 i32vec4;
    +
    643 #endif
    +
    644 
    +
    645 
    +
    646 
    +
    649  typedef tvec1<i64, lowp> lowp_i64vec1;
    +
    650 
    +
    653  typedef tvec2<i64, lowp> lowp_i64vec2;
    +
    654 
    +
    657  typedef tvec3<i64, lowp> lowp_i64vec3;
    +
    658 
    +
    661  typedef tvec4<i64, lowp> lowp_i64vec4;
    +
    662 
    +
    663 
    +
    666  typedef tvec1<i64, mediump> mediump_i64vec1;
    +
    667 
    +
    670  typedef tvec2<i64, mediump> mediump_i64vec2;
    +
    671 
    +
    674  typedef tvec3<i64, mediump> mediump_i64vec3;
    +
    675 
    +
    678  typedef tvec4<i64, mediump> mediump_i64vec4;
    +
    679 
    +
    680 
    +
    683  typedef tvec1<i64, highp> highp_i64vec1;
    +
    684 
    +
    687  typedef tvec2<i64, highp> highp_i64vec2;
    +
    688 
    +
    691  typedef tvec3<i64, highp> highp_i64vec3;
    +
    692 
    +
    695  typedef tvec4<i64, highp> highp_i64vec4;
    +
    696 
    +
    697 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    698  typedef lowp_i64vec1 i64vec1;
    +
    699  typedef lowp_i64vec2 i64vec2;
    +
    700  typedef lowp_i64vec3 i64vec3;
    +
    701  typedef lowp_i64vec4 i64vec4;
    +
    702 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    703  typedef mediump_i64vec1 i64vec1;
    +
    704  typedef mediump_i64vec2 i64vec2;
    +
    705  typedef mediump_i64vec3 i64vec3;
    +
    706  typedef mediump_i64vec4 i64vec4;
    +
    707 #else
    +
    708  typedef highp_i64vec1 i64vec1;
    +
    711 
    +
    714  typedef highp_i64vec2 i64vec2;
    +
    715 
    +
    718  typedef highp_i64vec3 i64vec3;
    +
    719 
    +
    722  typedef highp_i64vec4 i64vec4;
    +
    723 #endif
    +
    724 
    +
    725 
    +
    727  // Unsigned int vector types
    +
    728 
    +
    731  typedef detail::uint8 lowp_uint8;
    +
    732 
    +
    735  typedef detail::uint16 lowp_uint16;
    +
    736 
    +
    739  typedef detail::uint32 lowp_uint32;
    +
    740 
    +
    743  typedef detail::uint64 lowp_uint64;
    +
    744 
    +
    745 
    +
    748  typedef detail::uint8 lowp_uint8_t;
    +
    749 
    +
    752  typedef detail::uint16 lowp_uint16_t;
    +
    753 
    +
    756  typedef detail::uint32 lowp_uint32_t;
    +
    757 
    +
    760  typedef detail::uint64 lowp_uint64_t;
    +
    761 
    +
    762 
    +
    765  typedef detail::uint8 lowp_u8;
    +
    766 
    +
    769  typedef detail::uint16 lowp_u16;
    +
    770 
    +
    773  typedef detail::uint32 lowp_u32;
    +
    774 
    +
    777  typedef detail::uint64 lowp_u64;
    +
    778 
    +
    779 
    +
    780 
    +
    783  typedef detail::uint8 mediump_uint8;
    +
    784 
    +
    787  typedef detail::uint16 mediump_uint16;
    +
    788 
    +
    791  typedef detail::uint32 mediump_uint32;
    +
    792 
    +
    795  typedef detail::uint64 mediump_uint64;
    +
    796 
    +
    799  typedef detail::uint8 mediump_uint8_t;
    +
    800 
    +
    803  typedef detail::uint16 mediump_uint16_t;
    +
    804 
    +
    807  typedef detail::uint32 mediump_uint32_t;
    +
    808 
    +
    811  typedef detail::uint64 mediump_uint64_t;
    +
    812 
    +
    815  typedef detail::uint8 mediump_u8;
    +
    816 
    +
    819  typedef detail::uint16 mediump_u16;
    +
    820 
    +
    823  typedef detail::uint32 mediump_u32;
    +
    824 
    +
    827  typedef detail::uint64 mediump_u64;
    +
    828 
    +
    829 
    +
    830 
    +
    833  typedef detail::uint8 highp_uint8;
    +
    834 
    +
    837  typedef detail::uint16 highp_uint16;
    +
    838 
    +
    841  typedef detail::uint32 highp_uint32;
    +
    842 
    +
    845  typedef detail::uint64 highp_uint64;
    +
    846 
    +
    849  typedef detail::uint8 highp_uint8_t;
    +
    850 
    +
    853  typedef detail::uint16 highp_uint16_t;
    +
    854 
    +
    857  typedef detail::uint32 highp_uint32_t;
    +
    858 
    +
    861  typedef detail::uint64 highp_uint64_t;
    +
    862 
    +
    865  typedef detail::uint8 highp_u8;
    +
    866 
    +
    869  typedef detail::uint16 highp_u16;
    +
    870 
    +
    873  typedef detail::uint32 highp_u32;
    +
    874 
    +
    877  typedef detail::uint64 highp_u64;
    +
    878 
    +
    879 
    +
    880 
    +
    883  typedef detail::uint8 uint8;
    +
    884 
    +
    887  typedef detail::uint16 uint16;
    +
    888 
    +
    891  typedef detail::uint32 uint32;
    +
    892 
    +
    895  typedef detail::uint64 uint64;
    +
    896 
    +
    897 #if GLM_HAS_EXTENDED_INTEGER_TYPE
    +
    898  using std::uint8_t;
    +
    899  using std::uint16_t;
    +
    900  using std::uint32_t;
    +
    901  using std::uint64_t;
    +
    902 #else
    +
    903  typedef detail::uint8 uint8_t;
    +
    906 
    +
    909  typedef detail::uint16 uint16_t;
    +
    910 
    +
    913  typedef detail::uint32 uint32_t;
    +
    914 
    +
    917  typedef detail::uint64 uint64_t;
    +
    918 #endif
    +
    919 
    +
    922  typedef detail::uint8 u8;
    +
    923 
    +
    926  typedef detail::uint16 u16;
    +
    927 
    +
    930  typedef detail::uint32 u32;
    +
    931 
    +
    934  typedef detail::uint64 u64;
    +
    935 
    +
    936 
    +
    937 
    +
    940  typedef tvec1<u8, lowp> lowp_u8vec1;
    +
    941 
    +
    944  typedef tvec2<u8, lowp> lowp_u8vec2;
    +
    945 
    +
    948  typedef tvec3<u8, lowp> lowp_u8vec3;
    +
    949 
    +
    952  typedef tvec4<u8, lowp> lowp_u8vec4;
    +
    953 
    +
    954 
    +
    957  typedef tvec1<u8, mediump> mediump_u8vec1;
    +
    958 
    +
    961  typedef tvec2<u8, mediump> mediump_u8vec2;
    +
    962 
    +
    965  typedef tvec3<u8, mediump> mediump_u8vec3;
    +
    966 
    +
    969  typedef tvec4<u8, mediump> mediump_u8vec4;
    +
    970 
    +
    971 
    +
    974  typedef tvec1<u8, highp> highp_u8vec1;
    +
    975 
    +
    978  typedef tvec2<u8, highp> highp_u8vec2;
    +
    979 
    +
    982  typedef tvec3<u8, highp> highp_u8vec3;
    +
    983 
    +
    986  typedef tvec4<u8, highp> highp_u8vec4;
    +
    987 
    +
    988 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    989  typedef lowp_u8vec1 u8vec1;
    +
    990  typedef lowp_u8vec2 u8vec2;
    +
    991  typedef lowp_u8vec3 u8vec3;
    +
    992  typedef lowp_u8vec4 u8vec4;
    +
    993 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    994  typedef mediump_u8vec1 u8vec1;
    +
    995  typedef mediump_u8vec2 u8vec2;
    +
    996  typedef mediump_u8vec3 u8vec3;
    +
    997  typedef mediump_u8vec4 u8vec4;
    +
    998 #else
    +
    999  typedef highp_u8vec1 u8vec1;
    +
    1002 
    +
    1005  typedef highp_u8vec2 u8vec2;
    +
    1006 
    +
    1009  typedef highp_u8vec3 u8vec3;
    +
    1010 
    +
    1013  typedef highp_u8vec4 u8vec4;
    +
    1014 #endif
    +
    1015 
    +
    1016 
    +
    1019  typedef tvec1<u16, lowp> lowp_u16vec1;
    +
    1020 
    +
    1023  typedef tvec2<u16, lowp> lowp_u16vec2;
    +
    1024 
    +
    1027  typedef tvec3<u16, lowp> lowp_u16vec3;
    +
    1028 
    +
    1031  typedef tvec4<u16, lowp> lowp_u16vec4;
    +
    1032 
    +
    1033 
    +
    1036  typedef tvec1<u16, mediump> mediump_u16vec1;
    +
    1037 
    +
    1040  typedef tvec2<u16, mediump> mediump_u16vec2;
    +
    1041 
    +
    1044  typedef tvec3<u16, mediump> mediump_u16vec3;
    +
    1045 
    +
    1048  typedef tvec4<u16, mediump> mediump_u16vec4;
    +
    1049 
    +
    1050 
    +
    1053  typedef tvec1<u16, highp> highp_u16vec1;
    +
    1054 
    +
    1057  typedef tvec2<u16, highp> highp_u16vec2;
    +
    1058 
    +
    1061  typedef tvec3<u16, highp> highp_u16vec3;
    +
    1062 
    +
    1065  typedef tvec4<u16, highp> highp_u16vec4;
    +
    1066 
    +
    1067 
    +
    1068 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    1069  typedef lowp_u16vec1 u16vec1;
    +
    1070  typedef lowp_u16vec2 u16vec2;
    +
    1071  typedef lowp_u16vec3 u16vec3;
    +
    1072  typedef lowp_u16vec4 u16vec4;
    +
    1073 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    1074  typedef mediump_u16vec1 u16vec1;
    +
    1075  typedef mediump_u16vec2 u16vec2;
    +
    1076  typedef mediump_u16vec3 u16vec3;
    +
    1077  typedef mediump_u16vec4 u16vec4;
    +
    1078 #else
    +
    1079  typedef highp_u16vec1 u16vec1;
    +
    1082 
    +
    1085  typedef highp_u16vec2 u16vec2;
    +
    1086 
    +
    1089  typedef highp_u16vec3 u16vec3;
    +
    1090 
    +
    1093  typedef highp_u16vec4 u16vec4;
    +
    1094 #endif
    +
    1095 
    +
    1096 
    +
    1099  typedef tvec1<u32, lowp> lowp_u32vec1;
    +
    1100 
    +
    1103  typedef tvec2<u32, lowp> lowp_u32vec2;
    +
    1104 
    +
    1107  typedef tvec3<u32, lowp> lowp_u32vec3;
    +
    1108 
    +
    1111  typedef tvec4<u32, lowp> lowp_u32vec4;
    +
    1112 
    +
    1113 
    +
    1116  typedef tvec1<u32, mediump> mediump_u32vec1;
    +
    1117 
    +
    1120  typedef tvec2<u32, mediump> mediump_u32vec2;
    +
    1121 
    +
    1124  typedef tvec3<u32, mediump> mediump_u32vec3;
    +
    1125 
    +
    1128  typedef tvec4<u32, mediump> mediump_u32vec4;
    +
    1129 
    +
    1130 
    +
    1133  typedef tvec1<u32, highp> highp_u32vec1;
    +
    1134 
    +
    1137  typedef tvec2<u32, highp> highp_u32vec2;
    +
    1138 
    +
    1141  typedef tvec3<u32, highp> highp_u32vec3;
    +
    1142 
    +
    1145  typedef tvec4<u32, highp> highp_u32vec4;
    +
    1146 
    +
    1147 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    1148  typedef lowp_u32vec1 u32vec1;
    +
    1149  typedef lowp_u32vec2 u32vec2;
    +
    1150  typedef lowp_u32vec3 u32vec3;
    +
    1151  typedef lowp_u32vec4 u32vec4;
    +
    1152 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    1153  typedef mediump_u32vec1 u32vec1;
    +
    1154  typedef mediump_u32vec2 u32vec2;
    +
    1155  typedef mediump_u32vec3 u32vec3;
    +
    1156  typedef mediump_u32vec4 u32vec4;
    +
    1157 #else
    +
    1158  typedef highp_u32vec1 u32vec1;
    +
    1161 
    +
    1164  typedef highp_u32vec2 u32vec2;
    +
    1165 
    +
    1168  typedef highp_u32vec3 u32vec3;
    +
    1169 
    +
    1172  typedef highp_u32vec4 u32vec4;
    +
    1173 #endif
    +
    1174 
    +
    1175 
    +
    1178  typedef tvec1<u32, lowp> lowp_u32vec1;
    +
    1179 
    +
    1182  typedef tvec2<u32, lowp> lowp_u32vec2;
    +
    1183 
    +
    1186  typedef tvec3<u32, lowp> lowp_u32vec3;
    +
    1187 
    +
    1190  typedef tvec4<u32, lowp> lowp_u32vec4;
    +
    1191 
    +
    1192 
    +
    1195  typedef tvec1<u32, mediump> mediump_u32vec1;
    +
    1196 
    +
    1199  typedef tvec2<u32, mediump> mediump_u32vec2;
    +
    1200 
    +
    1203  typedef tvec3<u32, mediump> mediump_u32vec3;
    +
    1204 
    +
    1207  typedef tvec4<u32, mediump> mediump_u32vec4;
    +
    1208 
    +
    1209 
    +
    1212  typedef tvec1<u32, highp> highp_u32vec1;
    +
    1213 
    +
    1216  typedef tvec2<u32, highp> highp_u32vec2;
    +
    1217 
    +
    1220  typedef tvec3<u32, highp> highp_u32vec3;
    +
    1221 
    +
    1224  typedef tvec4<u32, highp> highp_u32vec4;
    +
    1225 
    +
    1226 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    1227  typedef lowp_u32vec1 u32vec1;
    +
    1228  typedef lowp_u32vec2 u32vec2;
    +
    1229  typedef lowp_u32vec3 u32vec3;
    +
    1230  typedef lowp_u32vec4 u32vec4;
    +
    1231 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    1232  typedef mediump_u32vec1 u32vec1;
    +
    1233  typedef mediump_u32vec2 u32vec2;
    +
    1234  typedef mediump_u32vec3 u32vec3;
    +
    1235  typedef mediump_u32vec4 u32vec4;
    +
    1236 #else
    +
    1237  typedef highp_u32vec1 u32vec1;
    +
    1240 
    +
    1243  typedef highp_u32vec2 u32vec2;
    +
    1244 
    +
    1247  typedef highp_u32vec3 u32vec3;
    +
    1248 
    +
    1251  typedef highp_u32vec4 u32vec4;
    +
    1252 #endif
    +
    1253 
    +
    1254 
    +
    1255 
    +
    1258  typedef tvec1<u64, lowp> lowp_u64vec1;
    +
    1259 
    +
    1262  typedef tvec2<u64, lowp> lowp_u64vec2;
    +
    1263 
    +
    1266  typedef tvec3<u64, lowp> lowp_u64vec3;
    +
    1267 
    +
    1270  typedef tvec4<u64, lowp> lowp_u64vec4;
    +
    1271 
    +
    1272 
    +
    1275  typedef tvec1<u64, mediump> mediump_u64vec1;
    +
    1276 
    +
    1279  typedef tvec2<u64, mediump> mediump_u64vec2;
    +
    1280 
    +
    1283  typedef tvec3<u64, mediump> mediump_u64vec3;
    +
    1284 
    +
    1287  typedef tvec4<u64, mediump> mediump_u64vec4;
    +
    1288 
    +
    1289 
    +
    1292  typedef tvec1<u64, highp> highp_u64vec1;
    +
    1293 
    +
    1296  typedef tvec2<u64, highp> highp_u64vec2;
    +
    1297 
    +
    1300  typedef tvec3<u64, highp> highp_u64vec3;
    +
    1301 
    +
    1304  typedef tvec4<u64, highp> highp_u64vec4;
    +
    1305 
    +
    1306 #if(defined(GLM_PRECISION_LOWP_UINT))
    +
    1307  typedef lowp_u64vec1 u64vec1;
    +
    1308  typedef lowp_u64vec2 u64vec2;
    +
    1309  typedef lowp_u64vec3 u64vec3;
    +
    1310  typedef lowp_u64vec4 u64vec4;
    +
    1311 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    +
    1312  typedef mediump_u64vec1 u64vec1;
    +
    1313  typedef mediump_u64vec2 u64vec2;
    +
    1314  typedef mediump_u64vec3 u64vec3;
    +
    1315  typedef mediump_u64vec4 u64vec4;
    +
    1316 #else
    +
    1317  typedef highp_u64vec1 u64vec1;
    +
    1320 
    +
    1323  typedef highp_u64vec2 u64vec2;
    +
    1324 
    +
    1327  typedef highp_u64vec3 u64vec3;
    +
    1328 
    +
    1331  typedef highp_u64vec4 u64vec4;
    +
    1332 #endif
    +
    1333 
    +
    1334 
    +
    1336  // Float vector types
    +
    1337 
    +
    1340  typedef detail::float32 lowp_float32;
    +
    1341 
    +
    1344  typedef detail::float64 lowp_float64;
    +
    1345 
    +
    1348  typedef detail::float32 lowp_float32_t;
    +
    1349 
    +
    1352  typedef detail::float64 lowp_float64_t;
    +
    1353 
    + +
    1357 
    + +
    1361 
    +
    1364  typedef detail::float32 lowp_float32;
    +
    1365 
    +
    1368  typedef detail::float64 lowp_float64;
    +
    1369 
    +
    1372  typedef detail::float32 lowp_float32_t;
    +
    1373 
    +
    1376  typedef detail::float64 lowp_float64_t;
    +
    1377 
    +
    1380  typedef float32 lowp_f32;
    +
    1381 
    +
    1384  typedef float64 lowp_f64;
    +
    1385 
    +
    1386 
    +
    1389  typedef detail::float32 lowp_float32;
    +
    1390 
    +
    1393  typedef detail::float64 lowp_float64;
    +
    1394 
    +
    1397  typedef detail::float32 lowp_float32_t;
    +
    1398 
    +
    1401  typedef detail::float64 lowp_float64_t;
    +
    1402 
    +
    1405  typedef float32 lowp_f32;
    +
    1406 
    +
    1409  typedef float64 lowp_f64;
    +
    1410 
    +
    1411 
    +
    1414  typedef detail::float32 mediump_float32;
    +
    1415 
    +
    1418  typedef detail::float64 mediump_float64;
    +
    1419 
    +
    1422  typedef detail::float32 mediump_float32_t;
    +
    1423 
    +
    1426  typedef detail::float64 mediump_float64_t;
    +
    1427 
    + +
    1431 
    + +
    1435 
    +
    1436 
    +
    1439  typedef detail::float32 highp_float32;
    +
    1440 
    +
    1443  typedef detail::float64 highp_float64;
    +
    1444 
    +
    1447  typedef detail::float32 highp_float32_t;
    +
    1448 
    +
    1451  typedef detail::float64 highp_float64_t;
    +
    1452 
    + +
    1456 
    + +
    1460 
    +
    1461 
    +
    1462 #if(defined(GLM_PRECISION_LOWP_FLOAT))
    +
    1463  typedef lowp_float32 float32;
    +
    1466 
    +
    1469  typedef lowp_float64 float64;
    +
    1470 
    +
    1473  typedef lowp_float32_t float32_t;
    +
    1474 
    +
    1477  typedef lowp_float64_t float64_t;
    +
    1478 
    +
    1481  typedef lowp_f32 f32;
    +
    1482 
    +
    1485  typedef lowp_f64 f64;
    +
    1486 
    +
    1487 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    +
    1488 
    +
    1491  typedef mediump_float32 float32;
    +
    1492 
    +
    1495  typedef mediump_float64 float64;
    +
    1496 
    +
    1499  typedef mediump_float32 float32_t;
    +
    1500 
    +
    1503  typedef mediump_float64 float64_t;
    +
    1504 
    +
    1507  typedef mediump_float32 f32;
    +
    1508 
    +
    1511  typedef mediump_float64 f64;
    +
    1512 
    +
    1513 #else//(defined(GLM_PRECISION_HIGHP_FLOAT))
    +
    1514 
    +
    1517  typedef highp_float32 float32;
    +
    1518 
    +
    1521  typedef highp_float64 float64;
    +
    1522 
    +
    1525  typedef highp_float32_t float32_t;
    +
    1526 
    +
    1529  typedef highp_float64_t float64_t;
    +
    1530 
    +
    1533  typedef highp_float32_t f32;
    +
    1534 
    +
    1537  typedef highp_float64_t f64;
    +
    1538 #endif
    +
    1539 
    +
    1540 
    +
    1543  typedef tvec1<float, lowp> lowp_vec1;
    +
    1544 
    +
    1547  typedef tvec2<float, lowp> lowp_vec2;
    +
    1548 
    +
    1551  typedef tvec3<float, lowp> lowp_vec3;
    +
    1552 
    +
    1555  typedef tvec4<float, lowp> lowp_vec4;
    +
    1556 
    +
    1559  typedef tvec1<float, lowp> lowp_fvec1;
    +
    1560 
    +
    1563  typedef tvec2<float, lowp> lowp_fvec2;
    +
    1564 
    +
    1567  typedef tvec3<float, lowp> lowp_fvec3;
    +
    1568 
    +
    1571  typedef tvec4<float, lowp> lowp_fvec4;
    +
    1572 
    +
    1573 
    +
    1576  typedef tvec1<float, mediump> mediump_vec1;
    +
    1577 
    +
    1580  typedef tvec2<float, mediump> mediump_vec2;
    +
    1581 
    +
    1584  typedef tvec3<float, mediump> mediump_vec3;
    +
    1585 
    +
    1588  typedef tvec4<float, mediump> mediump_vec4;
    +
    1589 
    +
    1592  typedef tvec1<float, mediump> mediump_fvec1;
    +
    1593 
    +
    1596  typedef tvec2<float, mediump> mediump_fvec2;
    +
    1597 
    +
    1600  typedef tvec3<float, mediump> mediump_fvec3;
    +
    1601 
    +
    1604  typedef tvec4<float, mediump> mediump_fvec4;
    +
    1605 
    +
    1606 
    +
    1609  typedef tvec1<float, highp> highp_vec1;
    +
    1610 
    +
    1613  typedef tvec2<float, highp> highp_vec2;
    +
    1614 
    +
    1617  typedef tvec3<float, highp> highp_vec3;
    +
    1618 
    +
    1621  typedef tvec4<float, highp> highp_vec4;
    +
    1622 
    +
    1625  typedef tvec1<float, highp> highp_fvec1;
    +
    1626 
    +
    1629  typedef tvec2<float, highp> highp_fvec2;
    +
    1630 
    +
    1633  typedef tvec3<float, highp> highp_fvec3;
    +
    1634 
    +
    1637  typedef tvec4<float, highp> highp_fvec4;
    +
    1638 
    +
    1639 
    +
    1642  typedef tvec1<f32, lowp> lowp_f32vec1;
    +
    1643 
    +
    1646  typedef tvec2<f32, lowp> lowp_f32vec2;
    +
    1647 
    +
    1650  typedef tvec3<f32, lowp> lowp_f32vec3;
    +
    1651 
    +
    1654  typedef tvec4<f32, lowp> lowp_f32vec4;
    +
    1655 
    +
    1658  typedef tvec1<f32, mediump> mediump_f32vec1;
    +
    1659 
    +
    1662  typedef tvec2<f32, mediump> mediump_f32vec2;
    +
    1663 
    +
    1666  typedef tvec3<f32, mediump> mediump_f32vec3;
    +
    1667 
    +
    1670  typedef tvec4<f32, mediump> mediump_f32vec4;
    +
    1671 
    +
    1674  typedef tvec1<f32, highp> highp_f32vec1;
    +
    1675 
    +
    1678  typedef tvec2<f32, highp> highp_f32vec2;
    +
    1679 
    +
    1682  typedef tvec3<f32, highp> highp_f32vec3;
    +
    1683 
    +
    1686  typedef tvec4<f32, highp> highp_f32vec4;
    +
    1687 
    +
    1688 
    +
    1691  typedef tvec1<f64, lowp> lowp_f64vec1;
    +
    1692 
    +
    1695  typedef tvec2<f64, lowp> lowp_f64vec2;
    +
    1696 
    +
    1699  typedef tvec3<f64, lowp> lowp_f64vec3;
    +
    1700 
    +
    1703  typedef tvec4<f64, lowp> lowp_f64vec4;
    +
    1704 
    +
    1707  typedef tvec1<f64, mediump> mediump_f64vec1;
    +
    1708 
    +
    1711  typedef tvec2<f64, mediump> mediump_f64vec2;
    +
    1712 
    +
    1715  typedef tvec3<f64, mediump> mediump_f64vec3;
    +
    1716 
    +
    1719  typedef tvec4<f64, mediump> mediump_f64vec4;
    +
    1720 
    +
    1723  typedef tvec1<f64, highp> highp_f64vec1;
    +
    1724 
    +
    1727  typedef tvec2<f64, highp> highp_f64vec2;
    +
    1728 
    +
    1731  typedef tvec3<f64, highp> highp_f64vec3;
    +
    1732 
    +
    1735  typedef tvec4<f64, highp> highp_f64vec4;
    +
    1736 
    +
    1737 
    +
    1739  // Float matrix types
    +
    1740 
    +
    1743  //typedef lowp_f32 lowp_fmat1x1;
    +
    1744 
    +
    1747  typedef tmat2x2<f32, lowp> lowp_fmat2x2;
    +
    1748 
    +
    1751  typedef tmat2x3<f32, lowp> lowp_fmat2x3;
    +
    1752 
    +
    1755  typedef tmat2x4<f32, lowp> lowp_fmat2x4;
    +
    1756 
    +
    1759  typedef tmat3x2<f32, lowp> lowp_fmat3x2;
    +
    1760 
    +
    1763  typedef tmat3x3<f32, lowp> lowp_fmat3x3;
    +
    1764 
    +
    1767  typedef tmat3x4<f32, lowp> lowp_fmat3x4;
    +
    1768 
    +
    1771  typedef tmat4x2<f32, lowp> lowp_fmat4x2;
    +
    1772 
    +
    1775  typedef tmat4x3<f32, lowp> lowp_fmat4x3;
    +
    1776 
    +
    1779  typedef tmat4x4<f32, lowp> lowp_fmat4x4;
    +
    1780 
    +
    1783  //typedef lowp_fmat1x1 lowp_fmat1;
    +
    1784 
    +
    1787  typedef lowp_fmat2x2 lowp_fmat2;
    +
    1788 
    +
    1791  typedef lowp_fmat3x3 lowp_fmat3;
    +
    1792 
    +
    1795  typedef lowp_fmat4x4 lowp_fmat4;
    +
    1796 
    +
    1797 
    +
    1800  //typedef mediump_f32 mediump_fmat1x1;
    +
    1801 
    +
    1804  typedef tmat2x2<f32, mediump> mediump_fmat2x2;
    +
    1805 
    +
    1808  typedef tmat2x3<f32, mediump> mediump_fmat2x3;
    +
    1809 
    +
    1812  typedef tmat2x4<f32, mediump> mediump_fmat2x4;
    +
    1813 
    +
    1816  typedef tmat3x2<f32, mediump> mediump_fmat3x2;
    +
    1817 
    +
    1820  typedef tmat3x3<f32, mediump> mediump_fmat3x3;
    +
    1821 
    +
    1824  typedef tmat3x4<f32, mediump> mediump_fmat3x4;
    +
    1825 
    +
    1828  typedef tmat4x2<f32, mediump> mediump_fmat4x2;
    +
    1829 
    +
    1832  typedef tmat4x3<f32, mediump> mediump_fmat4x3;
    +
    1833 
    +
    1836  typedef tmat4x4<f32, mediump> mediump_fmat4x4;
    +
    1837 
    +
    1840  //typedef mediump_fmat1x1 mediump_fmat1;
    +
    1841 
    +
    1844  typedef mediump_fmat2x2 mediump_fmat2;
    +
    1845 
    +
    1848  typedef mediump_fmat3x3 mediump_fmat3;
    +
    1849 
    +
    1852  typedef mediump_fmat4x4 mediump_fmat4;
    +
    1853 
    +
    1854 
    +
    1857  //typedef highp_f32 highp_fmat1x1;
    +
    1858 
    +
    1861  typedef tmat2x2<f32, highp> highp_fmat2x2;
    +
    1862 
    +
    1865  typedef tmat2x3<f32, highp> highp_fmat2x3;
    +
    1866 
    +
    1869  typedef tmat2x4<f32, highp> highp_fmat2x4;
    +
    1870 
    +
    1873  typedef tmat3x2<f32, highp> highp_fmat3x2;
    +
    1874 
    +
    1877  typedef tmat3x3<f32, highp> highp_fmat3x3;
    +
    1878 
    +
    1881  typedef tmat3x4<f32, highp> highp_fmat3x4;
    +
    1882 
    +
    1885  typedef tmat4x2<f32, highp> highp_fmat4x2;
    +
    1886 
    +
    1889  typedef tmat4x3<f32, highp> highp_fmat4x3;
    +
    1890 
    +
    1893  typedef tmat4x4<f32, highp> highp_fmat4x4;
    +
    1894 
    +
    1897  //typedef highp_fmat1x1 highp_fmat1;
    +
    1898 
    +
    1901  typedef highp_fmat2x2 highp_fmat2;
    +
    1902 
    +
    1905  typedef highp_fmat3x3 highp_fmat3;
    +
    1906 
    +
    1909  typedef highp_fmat4x4 highp_fmat4;
    +
    1910 
    +
    1911 
    +
    1914  //typedef f32 lowp_f32mat1x1;
    +
    1915 
    +
    1918  typedef tmat2x2<f32, lowp> lowp_f32mat2x2;
    +
    1919 
    +
    1922  typedef tmat2x3<f32, lowp> lowp_f32mat2x3;
    +
    1923 
    +
    1926  typedef tmat2x4<f32, lowp> lowp_f32mat2x4;
    +
    1927 
    +
    1930  typedef tmat3x2<f32, lowp> lowp_f32mat3x2;
    +
    1931 
    +
    1934  typedef tmat3x3<f32, lowp> lowp_f32mat3x3;
    +
    1935 
    +
    1938  typedef tmat3x4<f32, lowp> lowp_f32mat3x4;
    +
    1939 
    +
    1942  typedef tmat4x2<f32, lowp> lowp_f32mat4x2;
    +
    1943 
    +
    1946  typedef tmat4x3<f32, lowp> lowp_f32mat4x3;
    +
    1947 
    +
    1950  typedef tmat4x4<f32, lowp> lowp_f32mat4x4;
    +
    1951 
    +
    1954  //typedef detail::tmat1x1<f32, lowp> lowp_f32mat1;
    +
    1955 
    +
    1958  typedef lowp_f32mat2x2 lowp_f32mat2;
    +
    1959 
    +
    1962  typedef lowp_f32mat3x3 lowp_f32mat3;
    +
    1963 
    +
    1966  typedef lowp_f32mat4x4 lowp_f32mat4;
    +
    1967 
    +
    1968 
    +
    1971  //typedef f32 mediump_f32mat1x1;
    +
    1972 
    +
    1975  typedef tmat2x2<f32, mediump> mediump_f32mat2x2;
    +
    1976 
    +
    1979  typedef tmat2x3<f32, mediump> mediump_f32mat2x3;
    +
    1980 
    +
    1983  typedef tmat2x4<f32, mediump> mediump_f32mat2x4;
    +
    1984 
    +
    1987  typedef tmat3x2<f32, mediump> mediump_f32mat3x2;
    +
    1988 
    +
    1991  typedef tmat3x3<f32, mediump> mediump_f32mat3x3;
    +
    1992 
    +
    1995  typedef tmat3x4<f32, mediump> mediump_f32mat3x4;
    +
    1996 
    +
    1999  typedef tmat4x2<f32, mediump> mediump_f32mat4x2;
    +
    2000 
    +
    2003  typedef tmat4x3<f32, mediump> mediump_f32mat4x3;
    +
    2004 
    +
    2007  typedef tmat4x4<f32, mediump> mediump_f32mat4x4;
    +
    2008 
    +
    2011  //typedef detail::tmat1x1<f32, mediump> f32mat1;
    +
    2012 
    +
    2015  typedef mediump_f32mat2x2 mediump_f32mat2;
    +
    2016 
    +
    2019  typedef mediump_f32mat3x3 mediump_f32mat3;
    +
    2020 
    +
    2023  typedef mediump_f32mat4x4 mediump_f32mat4;
    +
    2024 
    +
    2025 
    +
    2028  //typedef f32 highp_f32mat1x1;
    +
    2029 
    +
    2032  typedef tmat2x2<f32, highp> highp_f32mat2x2;
    +
    2033 
    +
    2036  typedef tmat2x3<f32, highp> highp_f32mat2x3;
    +
    2037 
    +
    2040  typedef tmat2x4<f32, highp> highp_f32mat2x4;
    +
    2041 
    +
    2044  typedef tmat3x2<f32, highp> highp_f32mat3x2;
    +
    2045 
    +
    2048  typedef tmat3x3<f32, highp> highp_f32mat3x3;
    +
    2049 
    +
    2052  typedef tmat3x4<f32, highp> highp_f32mat3x4;
    +
    2053 
    +
    2056  typedef tmat4x2<f32, highp> highp_f32mat4x2;
    +
    2057 
    +
    2060  typedef tmat4x3<f32, highp> highp_f32mat4x3;
    +
    2061 
    +
    2064  typedef tmat4x4<f32, highp> highp_f32mat4x4;
    +
    2065 
    +
    2068  //typedef detail::tmat1x1<f32, highp> f32mat1;
    +
    2069 
    +
    2072  typedef highp_f32mat2x2 highp_f32mat2;
    +
    2073 
    +
    2076  typedef highp_f32mat3x3 highp_f32mat3;
    +
    2077 
    +
    2080  typedef highp_f32mat4x4 highp_f32mat4;
    +
    2081 
    +
    2082 
    +
    2085  //typedef f64 lowp_f64mat1x1;
    +
    2086 
    +
    2089  typedef tmat2x2<f64, lowp> lowp_f64mat2x2;
    +
    2090 
    +
    2093  typedef tmat2x3<f64, lowp> lowp_f64mat2x3;
    +
    2094 
    +
    2097  typedef tmat2x4<f64, lowp> lowp_f64mat2x4;
    +
    2098 
    +
    2101  typedef tmat3x2<f64, lowp> lowp_f64mat3x2;
    +
    2102 
    +
    2105  typedef tmat3x3<f64, lowp> lowp_f64mat3x3;
    +
    2106 
    +
    2109  typedef tmat3x4<f64, lowp> lowp_f64mat3x4;
    +
    2110 
    +
    2113  typedef tmat4x2<f64, lowp> lowp_f64mat4x2;
    +
    2114 
    +
    2117  typedef tmat4x3<f64, lowp> lowp_f64mat4x3;
    +
    2118 
    +
    2121  typedef tmat4x4<f64, lowp> lowp_f64mat4x4;
    +
    2122 
    +
    2125  //typedef lowp_f64mat1x1 lowp_f64mat1;
    +
    2126 
    +
    2129  typedef lowp_f64mat2x2 lowp_f64mat2;
    +
    2130 
    +
    2133  typedef lowp_f64mat3x3 lowp_f64mat3;
    +
    2134 
    +
    2137  typedef lowp_f64mat4x4 lowp_f64mat4;
    +
    2138 
    +
    2139 
    +
    2142  //typedef f64 Highp_f64mat1x1;
    +
    2143 
    +
    2146  typedef tmat2x2<f64, mediump> mediump_f64mat2x2;
    +
    2147 
    +
    2150  typedef tmat2x3<f64, mediump> mediump_f64mat2x3;
    +
    2151 
    +
    2154  typedef tmat2x4<f64, mediump> mediump_f64mat2x4;
    +
    2155 
    +
    2158  typedef tmat3x2<f64, mediump> mediump_f64mat3x2;
    +
    2159 
    +
    2162  typedef tmat3x3<f64, mediump> mediump_f64mat3x3;
    +
    2163 
    +
    2166  typedef tmat3x4<f64, mediump> mediump_f64mat3x4;
    +
    2167 
    +
    2170  typedef tmat4x2<f64, mediump> mediump_f64mat4x2;
    +
    2171 
    +
    2174  typedef tmat4x3<f64, mediump> mediump_f64mat4x3;
    +
    2175 
    +
    2178  typedef tmat4x4<f64, mediump> mediump_f64mat4x4;
    +
    2179 
    +
    2182  //typedef mediump_f64mat1x1 mediump_f64mat1;
    +
    2183 
    +
    2186  typedef mediump_f64mat2x2 mediump_f64mat2;
    +
    2187 
    +
    2190  typedef mediump_f64mat3x3 mediump_f64mat3;
    +
    2191 
    +
    2194  typedef mediump_f64mat4x4 mediump_f64mat4;
    +
    2195 
    +
    2198  //typedef f64 highp_f64mat1x1;
    +
    2199 
    +
    2202  typedef tmat2x2<f64, highp> highp_f64mat2x2;
    +
    2203 
    +
    2206  typedef tmat2x3<f64, highp> highp_f64mat2x3;
    +
    2207 
    +
    2210  typedef tmat2x4<f64, highp> highp_f64mat2x4;
    +
    2211 
    +
    2214  typedef tmat3x2<f64, highp> highp_f64mat3x2;
    +
    2215 
    +
    2218  typedef tmat3x3<f64, highp> highp_f64mat3x3;
    +
    2219 
    +
    2222  typedef tmat3x4<f64, highp> highp_f64mat3x4;
    +
    2223 
    +
    2226  typedef tmat4x2<f64, highp> highp_f64mat4x2;
    +
    2227 
    +
    2230  typedef tmat4x3<f64, highp> highp_f64mat4x3;
    +
    2231 
    +
    2234  typedef tmat4x4<f64, highp> highp_f64mat4x4;
    +
    2235 
    +
    2238  //typedef highp_f64mat1x1 highp_f64mat1;
    +
    2239 
    +
    2242  typedef highp_f64mat2x2 highp_f64mat2;
    +
    2243 
    +
    2246  typedef highp_f64mat3x3 highp_f64mat3;
    +
    2247 
    +
    2250  typedef highp_f64mat4x4 highp_f64mat4;
    +
    2251 
    +
    2253  // Quaternion types
    +
    2254 
    +
    2257  typedef tquat<f32, lowp> lowp_f32quat;
    +
    2258 
    +
    2261  typedef tquat<f64, lowp> lowp_f64quat;
    +
    2262 
    +
    2265  typedef tquat<f32, mediump> mediump_f32quat;
    +
    2266 
    +
    2269  typedef tquat<f64, mediump> mediump_f64quat;
    +
    2270 
    +
    2273  typedef tquat<f32, highp> highp_f32quat;
    +
    2274 
    +
    2277  typedef tquat<f64, highp> highp_f64quat;
    +
    2278 
    +
    2279 
    +
    2280 #if(defined(GLM_PRECISION_LOWP_FLOAT))
    +
    2281  typedef lowp_f32vec1 fvec1;
    +
    2282  typedef lowp_f32vec2 fvec2;
    +
    2283  typedef lowp_f32vec3 fvec3;
    +
    2284  typedef lowp_f32vec4 fvec4;
    +
    2285  typedef lowp_f32mat2 fmat2;
    +
    2286  typedef lowp_f32mat3 fmat3;
    +
    2287  typedef lowp_f32mat4 fmat4;
    +
    2288  typedef lowp_f32mat2x2 fmat2x2;
    +
    2289  typedef lowp_f32mat3x2 fmat3x2;
    +
    2290  typedef lowp_f32mat4x2 fmat4x2;
    +
    2291  typedef lowp_f32mat2x3 fmat2x3;
    +
    2292  typedef lowp_f32mat3x3 fmat3x3;
    +
    2293  typedef lowp_f32mat4x3 fmat4x3;
    +
    2294  typedef lowp_f32mat2x4 fmat2x4;
    +
    2295  typedef lowp_f32mat3x4 fmat3x4;
    +
    2296  typedef lowp_f32mat4x4 fmat4x4;
    +
    2297  typedef lowp_f32quat fquat;
    +
    2298 
    +
    2299  typedef lowp_f32vec1 f32vec1;
    +
    2300  typedef lowp_f32vec2 f32vec2;
    +
    2301  typedef lowp_f32vec3 f32vec3;
    +
    2302  typedef lowp_f32vec4 f32vec4;
    +
    2303  typedef lowp_f32mat2 f32mat2;
    +
    2304  typedef lowp_f32mat3 f32mat3;
    +
    2305  typedef lowp_f32mat4 f32mat4;
    +
    2306  typedef lowp_f32mat2x2 f32mat2x2;
    +
    2307  typedef lowp_f32mat3x2 f32mat3x2;
    +
    2308  typedef lowp_f32mat4x2 f32mat4x2;
    +
    2309  typedef lowp_f32mat2x3 f32mat2x3;
    +
    2310  typedef lowp_f32mat3x3 f32mat3x3;
    +
    2311  typedef lowp_f32mat4x3 f32mat4x3;
    +
    2312  typedef lowp_f32mat2x4 f32mat2x4;
    +
    2313  typedef lowp_f32mat3x4 f32mat3x4;
    +
    2314  typedef lowp_f32mat4x4 f32mat4x4;
    +
    2315  typedef lowp_f32quat f32quat;
    +
    2316 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    +
    2317  typedef mediump_f32vec1 fvec1;
    +
    2318  typedef mediump_f32vec2 fvec2;
    +
    2319  typedef mediump_f32vec3 fvec3;
    +
    2320  typedef mediump_f32vec4 fvec4;
    +
    2321  typedef mediump_f32mat2 fmat2;
    +
    2322  typedef mediump_f32mat3 fmat3;
    +
    2323  typedef mediump_f32mat4 fmat4;
    +
    2324  typedef mediump_f32mat2x2 fmat2x2;
    +
    2325  typedef mediump_f32mat3x2 fmat3x2;
    +
    2326  typedef mediump_f32mat4x2 fmat4x2;
    +
    2327  typedef mediump_f32mat2x3 fmat2x3;
    +
    2328  typedef mediump_f32mat3x3 fmat3x3;
    +
    2329  typedef mediump_f32mat4x3 fmat4x3;
    +
    2330  typedef mediump_f32mat2x4 fmat2x4;
    +
    2331  typedef mediump_f32mat3x4 fmat3x4;
    +
    2332  typedef mediump_f32mat4x4 fmat4x4;
    +
    2333  typedef mediump_f32quat fquat;
    +
    2334 
    +
    2335  typedef mediump_f32vec1 f32vec1;
    +
    2336  typedef mediump_f32vec2 f32vec2;
    +
    2337  typedef mediump_f32vec3 f32vec3;
    +
    2338  typedef mediump_f32vec4 f32vec4;
    +
    2339  typedef mediump_f32mat2 f32mat2;
    +
    2340  typedef mediump_f32mat3 f32mat3;
    +
    2341  typedef mediump_f32mat4 f32mat4;
    +
    2342  typedef mediump_f32mat2x2 f32mat2x2;
    +
    2343  typedef mediump_f32mat3x2 f32mat3x2;
    +
    2344  typedef mediump_f32mat4x2 f32mat4x2;
    +
    2345  typedef mediump_f32mat2x3 f32mat2x3;
    +
    2346  typedef mediump_f32mat3x3 f32mat3x3;
    +
    2347  typedef mediump_f32mat4x3 f32mat4x3;
    +
    2348  typedef mediump_f32mat2x4 f32mat2x4;
    +
    2349  typedef mediump_f32mat3x4 f32mat3x4;
    +
    2350  typedef mediump_f32mat4x4 f32mat4x4;
    +
    2351  typedef mediump_f32quat f32quat;
    +
    2352 #else//if(defined(GLM_PRECISION_HIGHP_FLOAT))
    +
    2353  typedef highp_f32vec1 fvec1;
    +
    2356 
    +
    2359  typedef highp_f32vec2 fvec2;
    +
    2360 
    +
    2363  typedef highp_f32vec3 fvec3;
    +
    2364 
    +
    2367  typedef highp_f32vec4 fvec4;
    +
    2368 
    +
    2371  typedef highp_f32mat2x2 fmat2x2;
    +
    2372 
    +
    2375  typedef highp_f32mat2x3 fmat2x3;
    +
    2376 
    +
    2379  typedef highp_f32mat2x4 fmat2x4;
    +
    2380 
    +
    2383  typedef highp_f32mat3x2 fmat3x2;
    +
    2384 
    +
    2387  typedef highp_f32mat3x3 fmat3x3;
    +
    2388 
    +
    2391  typedef highp_f32mat3x4 fmat3x4;
    +
    2392 
    +
    2395  typedef highp_f32mat4x2 fmat4x2;
    +
    2396 
    +
    2399  typedef highp_f32mat4x3 fmat4x3;
    +
    2400 
    +
    2403  typedef highp_f32mat4x4 fmat4x4;
    +
    2404 
    +
    2407  typedef fmat2x2 fmat2;
    +
    2408 
    +
    2411  typedef fmat3x3 fmat3;
    +
    2412 
    +
    2415  typedef fmat4x4 fmat4;
    +
    2416 
    +
    2419  typedef highp_fquat fquat;
    +
    2420 
    +
    2421 
    +
    2422 
    +
    2425  typedef highp_f32vec1 f32vec1;
    +
    2426 
    +
    2429  typedef highp_f32vec2 f32vec2;
    +
    2430 
    +
    2433  typedef highp_f32vec3 f32vec3;
    +
    2434 
    +
    2437  typedef highp_f32vec4 f32vec4;
    +
    2438 
    +
    2441  typedef highp_f32mat2x2 f32mat2x2;
    +
    2442 
    +
    2445  typedef highp_f32mat2x3 f32mat2x3;
    +
    2446 
    +
    2449  typedef highp_f32mat2x4 f32mat2x4;
    +
    2450 
    +
    2453  typedef highp_f32mat3x2 f32mat3x2;
    +
    2454 
    +
    2457  typedef highp_f32mat3x3 f32mat3x3;
    +
    2458 
    +
    2461  typedef highp_f32mat3x4 f32mat3x4;
    +
    2462 
    +
    2465  typedef highp_f32mat4x2 f32mat4x2;
    +
    2466 
    +
    2469  typedef highp_f32mat4x3 f32mat4x3;
    +
    2470 
    +
    2473  typedef highp_f32mat4x4 f32mat4x4;
    +
    2474 
    +
    2477  typedef f32mat2x2 f32mat2;
    +
    2478 
    +
    2481  typedef f32mat3x3 f32mat3;
    +
    2482 
    +
    2485  typedef f32mat4x4 f32mat4;
    +
    2486 
    +
    2489  typedef highp_f32quat f32quat;
    +
    2490 #endif
    +
    2491 
    +
    2492 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    2493  typedef lowp_f64vec1 f64vec1;
    +
    2494  typedef lowp_f64vec2 f64vec2;
    +
    2495  typedef lowp_f64vec3 f64vec3;
    +
    2496  typedef lowp_f64vec4 f64vec4;
    +
    2497  typedef lowp_f64mat2 f64mat2;
    +
    2498  typedef lowp_f64mat3 f64mat3;
    +
    2499  typedef lowp_f64mat4 f64mat4;
    +
    2500  typedef lowp_f64mat2x2 f64mat2x2;
    +
    2501  typedef lowp_f64mat3x2 f64mat3x2;
    +
    2502  typedef lowp_f64mat4x2 f64mat4x2;
    +
    2503  typedef lowp_f64mat2x3 f64mat2x3;
    +
    2504  typedef lowp_f64mat3x3 f64mat3x3;
    +
    2505  typedef lowp_f64mat4x3 f64mat4x3;
    +
    2506  typedef lowp_f64mat2x4 f64mat2x4;
    +
    2507  typedef lowp_f64mat3x4 f64mat3x4;
    +
    2508  typedef lowp_f64mat4x4 f64mat4x4;
    +
    2509  typedef lowp_f64quat f64quat;
    +
    2510 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
    +
    2511  typedef mediump_f64vec1 f64vec1;
    +
    2512  typedef mediump_f64vec2 f64vec2;
    +
    2513  typedef mediump_f64vec3 f64vec3;
    +
    2514  typedef mediump_f64vec4 f64vec4;
    +
    2515  typedef mediump_f64mat2 f64mat2;
    +
    2516  typedef mediump_f64mat3 f64mat3;
    +
    2517  typedef mediump_f64mat4 f64mat4;
    +
    2518  typedef mediump_f64mat2x2 f64mat2x2;
    +
    2519  typedef mediump_f64mat3x2 f64mat3x2;
    +
    2520  typedef mediump_f64mat4x2 f64mat4x2;
    +
    2521  typedef mediump_f64mat2x3 f64mat2x3;
    +
    2522  typedef mediump_f64mat3x3 f64mat3x3;
    +
    2523  typedef mediump_f64mat4x3 f64mat4x3;
    +
    2524  typedef mediump_f64mat2x4 f64mat2x4;
    +
    2525  typedef mediump_f64mat3x4 f64mat3x4;
    +
    2526  typedef mediump_f64mat4x4 f64mat4x4;
    +
    2527  typedef mediump_f64quat f64quat;
    +
    2528 #else
    +
    2529  typedef highp_f64vec1 f64vec1;
    +
    2532 
    +
    2535  typedef highp_f64vec2 f64vec2;
    +
    2536 
    +
    2539  typedef highp_f64vec3 f64vec3;
    +
    2540 
    +
    2543  typedef highp_f64vec4 f64vec4;
    +
    2544 
    +
    2547  typedef highp_f64mat2x2 f64mat2x2;
    +
    2548 
    +
    2551  typedef highp_f64mat2x3 f64mat2x3;
    +
    2552 
    +
    2555  typedef highp_f64mat2x4 f64mat2x4;
    +
    2556 
    +
    2559  typedef highp_f64mat3x2 f64mat3x2;
    +
    2560 
    +
    2563  typedef highp_f64mat3x3 f64mat3x3;
    +
    2564 
    +
    2567  typedef highp_f64mat3x4 f64mat3x4;
    +
    2568 
    +
    2571  typedef highp_f64mat4x2 f64mat4x2;
    +
    2572 
    +
    2575  typedef highp_f64mat4x3 f64mat4x3;
    +
    2576 
    +
    2579  typedef highp_f64mat4x4 f64mat4x4;
    +
    2580 
    +
    2583  typedef f64mat2x2 f64mat2;
    +
    2584 
    +
    2587  typedef f64mat3x3 f64mat3;
    +
    2588 
    +
    2591  typedef f64mat4x4 f64mat4;
    +
    2592 
    +
    2595  typedef highp_f64quat f64quat;
    +
    2596 #endif
    +
    2597 }//namespace glm
    +
    highp_u32vec3 u32vec3
    Default precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1168
    +
    detail::uint64 u64
    64 bit unsigned integer type.
    Definition: fwd.hpp:934
    +
    tvec1< i32, highp > highp_i32vec1
    High precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:524
    +
    float32 lowp_f32
    Low 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1356
    +
    tvec3< u32, highp > highp_u32vec3
    High precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1141
    +
    highp_f32mat3x3 f32mat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2457
    +
    tvec1< u32, highp > highp_u32vec1
    High precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1133
    +
    tvec1< f64, highp > highp_f64vec1
    High double-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1723
    +
    tvec4< float, lowp > lowp_fvec4
    Low single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1571
    +
    detail::int64 mediump_i64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:220
    +
    detail::float64 mediump_float64_t
    Medium 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1426
    +
    tmat2x4< f64, lowp > lowp_f64mat2x4
    Low double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2097
    +
    tmat3x3< f64, lowp > lowp_f64mat3x3
    Low double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2105
    +
    detail::uint64 highp_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:877
    +
    tmat3x2< f64, highp > highp_f64mat3x2
    High double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2214
    +
    detail::int16 int16_t
    16 bit signed integer type.
    Definition: fwd.hpp:300
    +
    detail::int64 int64_t
    64 bit signed integer type.
    Definition: fwd.hpp:308
    +
    detail::int32 i32
    32 bit signed integer type.
    Definition: fwd.hpp:321
    +
    detail::uint32 lowp_uint32_t
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:756
    +
    float64 lowp_f64
    Low 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1360
    +
    tvec2< u32, mediump > mediump_u32vec2
    Medium precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1120
    +
    tvec3< i16, highp > highp_i16vec3
    High precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:452
    +
    tvec4< u32, highp > highp_u32vec4
    High precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1145
    +
    detail::int16 highp_int16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:228
    +
    tmat4x4< f32, mediump > mediump_f32mat4x4
    Medium single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2007
    +
    detail::int8 lowp_int8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:128
    +
    tmat2x4< f32, highp > highp_fmat2x4
    High single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1869
    +
    tquat< f64, mediump > mediump_f64quat
    Medium double-precision floating-point quaternion.
    Definition: fwd.hpp:2269
    +
    detail::int16 lowp_int16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:132
    +
    highp_f32quat f32quat
    Default single-precision floating-point quaternion.
    Definition: fwd.hpp:2489
    +
    highp_f64vec2 f64vec2
    Default double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2535
    +
    detail::int16 i16
    16 bit signed integer type.
    Definition: fwd.hpp:317
    +
    tmat2x2< f64, lowp > lowp_f64mat2x2
    Low double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2089
    +
    highp_f64mat3x2 f64mat3x2
    Default double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2559
    +
    detail::int64 i64
    64 bit signed integer type.
    Definition: fwd.hpp:325
    +
    fmat3x3 fmat3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2411
    +
    detail::int8 int8
    8 bit signed integer type.
    Definition: type_int.hpp:220
    +
    highp_f32mat2x2 highp_f32mat2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2072
    +
    mediump_f64mat2x2 mediump_f64mat2
    Medium double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2186
    +
    highp_f64mat2x4 f64mat2x4
    Default double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2555
    +
    detail::float64 lowp_float64_t
    Low 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1352
    +
    tmat4x4< f32, lowp > lowp_f32mat4x4
    Low single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1950
    +
    tmat2x4< f32, lowp > lowp_fmat2x4
    Low single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1755
    +
    tvec2< u16, mediump > mediump_u16vec2
    Medium precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1040
    +
    detail::int16 highp_int16_t
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:244
    +
    tmat2x2< f64, mediump > mediump_f64mat2x2
    Medium double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2146
    +
    tmat4x2< f64, lowp > lowp_f64mat4x2
    Low double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2113
    +
    tmat2x3< f32, lowp > lowp_f32mat2x3
    Low single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1922
    +
    detail::uint8 highp_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:833
    +
    highp_f32mat4x4 highp_f32mat4
    High single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2080
    +
    detail::int8 highp_int8_t
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:240
    +
    f32mat3x3 f32mat3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2481
    +
    detail::uint8 mediump_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:783
    +
    detail::uint8 mediump_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:815
    +
    tmat3x4< f64, lowp > lowp_f64mat3x4
    Low double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2109
    +
    tvec3< float, mediump > mediump_vec3
    3 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:183
    +
    tvec3< u64, lowp > lowp_u64vec3
    Low precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1266
    +
    highp_i16vec1 i16vec1
    Default precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:472
    +
    tvec1< i64, mediump > mediump_i64vec1
    Medium precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:666
    +
    highp_f32vec1 f32vec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2425
    +
    highp_f32mat2x4 f32mat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2449
    +
    highp_f64vec4 f64vec4
    Default double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2543
    +
    tmat4x4< f32, highp > highp_f32mat4x4
    High single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2064
    +
    tvec3< i64, mediump > mediump_i64vec3
    Medium precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:674
    +
    tvec3< float, highp > highp_fvec3
    High Single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1633
    +
    tmat3x2< f64, mediump > mediump_f64mat3x2
    Medium double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2158
    +
    tvec1< float, highp > highp_fvec1
    High single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1625
    +
    tmat4x4< f32, lowp > lowp_fmat4x4
    Low single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1779
    +
    detail::uint32 u32
    32 bit unsigned integer type.
    Definition: fwd.hpp:930
    +
    highp_f64mat4x4 f64mat4x4
    Default double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2579
    +
    tvec1< i64, lowp > lowp_i64vec1
    Low precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:649
    +
    lowp_f32mat4x4 lowp_f32mat4
    Low single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1966
    +
    lowp_f32mat2x2 lowp_f32mat2
    Low single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1958
    +
    tmat3x2< f64, lowp > lowp_f64mat3x2
    Low double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2101
    +
    tmat4x3< f64, lowp > lowp_f64mat4x3
    Low double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2117
    +
    tvec2< i64, mediump > mediump_i64vec2
    Medium precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:670
    +
    tvec4< float, mediump > mediump_fvec4
    Medium Single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1604
    +
    tvec3< f64, highp > highp_f64vec3
    High double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1731
    +
    tmat4x3< f32, lowp > lowp_f32mat4x3
    Low single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:1946
    +
    detail::int8 mediump_int8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:176
    +
    detail::int8 mediump_i8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:208
    +
    tmat4x2< f64, mediump > mediump_f64mat4x2
    Medium double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2170
    +
    tmat2x2< f32, mediump > mediump_f32mat2x2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1975
    +
    lowp_f64mat2x2 lowp_f64mat2
    Low double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2129
    +
    tmat3x4< f32, highp > highp_fmat3x4
    High single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1881
    +
    detail::uint64 highp_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:861
    +
    f32mat2x2 f32mat2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2477
    +
    detail::uint32 lowp_uint32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:739
    +
    tmat3x3< f32, lowp > lowp_f32mat3x3
    Low single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1934
    +
    tmat3x4< f32, lowp > lowp_f32mat3x4
    Low single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1938
    +
    tvec4< f64, mediump > mediump_f64vec4
    Medium double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1719
    +
    detail::int16 mediump_int16_t
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:196
    +
    tvec4< f32, mediump > mediump_f32vec4
    Medium single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1670
    +
    tvec2< u16, lowp > lowp_u16vec2
    Low precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1023
    +
    highp_i64vec2 i64vec2
    Default precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:714
    +
    tvec2< float, highp > highp_vec2
    2 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:65
    +
    tvec2< i16, highp > highp_i16vec2
    High precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:448
    +
    highp_f64mat2x2 highp_f64mat2
    High double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2242
    +
    tvec1< i32, lowp > lowp_i32vec1
    Low precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:490
    +
    tvec3< i32, lowp > lowp_i32vec3
    Low precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:498
    +
    tmat2x3< f32, mediump > mediump_fmat2x3
    Medium single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1808
    +
    tmat3x4< f32, mediump > mediump_fmat3x4
    Medium single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1824
    +
    highp_f64mat3x3 highp_f64mat3
    High double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2246
    +
    detail::uint16 lowp_uint16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:735
    +
    tmat2x4< f64, mediump > mediump_f64mat2x4
    Medium double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2154
    +
    tvec3< i32, highp > highp_i32vec3
    High precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:532
    +
    tmat3x3< f32, mediump > mediump_f32mat3x3
    Medium single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1991
    +
    highp_u8vec3 u8vec3
    Default precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1009
    +
    tvec1< i64, highp > highp_i64vec1
    High precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:683
    +
    tvec2< i16, lowp > lowp_i16vec2
    Low precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:414
    +
    tmat4x3< f32, lowp > lowp_fmat4x3
    Low single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:1775
    +
    tvec3< u32, lowp > lowp_u32vec3
    Low precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1107
    +
    highp_u16vec4 u16vec4
    Default precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1093
    +
    detail::uint16 u16
    16 bit unsigned integer type.
    Definition: fwd.hpp:926
    +
    tvec1< i16, highp > highp_i16vec1
    High precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:444
    +
    tvec2< u32, lowp > lowp_u32vec2
    Low precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1103
    +
    highp_float64_t f64
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1537
    +
    tmat2x3< f64, mediump > mediump_f64mat2x3
    Medium double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2150
    +
    tmat2x2< f32, highp > highp_fmat2x2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1861
    +
    highp_f64vec1 f64vec1
    Default double-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2531
    +
    mediump_fmat4x4 mediump_fmat4
    Medium single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1852
    +
    highp_f32vec4 fvec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2367
    +
    highp_u64vec4 u64vec4
    Default precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1331
    +
    highp_u32vec2 u32vec2
    Default precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1164
    +
    detail::int32 mediump_int32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:184
    +
    tvec1< float, lowp > lowp_vec1
    Low single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1543
    +
    highp_i16vec4 i16vec4
    Default precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:484
    +
    tmat2x3< f32, lowp > lowp_fmat2x3
    Low single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1751
    +
    tvec3< i8, lowp > lowp_i8vec3
    Low precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:339
    +
    tvec3< i64, lowp > lowp_i64vec3
    Low precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:657
    +
    detail::int32 lowp_i32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:168
    +
    detail::int16 highp_i16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:260
    +
    detail::uint8 uint8_t
    8 bit unsigned integer type.
    Definition: fwd.hpp:905
    +
    detail::int32 lowp_int32_t
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:152
    +
    tvec4< u64, highp > highp_u64vec4
    High precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1304
    +
    tvec3< float, lowp > lowp_vec3
    3 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:190
    +
    tvec1< i8, lowp > lowp_i8vec1
    Low precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:331
    +
    tvec1< i16, lowp > lowp_i16vec1
    Low precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:410
    +
    tvec2< float, mediump > mediump_vec2
    2 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:72
    +
    detail::int32 highp_i32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:264
    +
    tmat2x3< f32, highp > highp_f32mat2x3
    High single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2036
    +
    tmat2x2< f32, mediump > mediump_fmat2x2
    Medium single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1804
    +
    tmat4x2< f32, lowp > lowp_f32mat4x2
    Low single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1942
    +
    highp_f32mat2x3 fmat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2375
    +
    tvec4< u8, highp > highp_u8vec4
    High precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:986
    +
    highp_float32_t float32_t
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1525
    +
    tmat3x2< f32, mediump > mediump_f32mat3x2
    Medium single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1987
    +
    tvec4< i32, mediump > mediump_i32vec4
    Medium precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:519
    +
    tvec4< u16, lowp > lowp_u16vec4
    Low precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1031
    +
    highp_f32mat4x2 f32mat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2465
    +
    highp_f32mat3x3 highp_f32mat3
    High single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2076
    +
    tvec4< u16, highp > highp_u16vec4
    High precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1065
    +
    detail::uint16 highp_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:869
    +
    detail::uint32 highp_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:873
    +
    tmat3x2< f32, mediump > mediump_fmat3x2
    Medium single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1816
    +
    detail::int16 int16
    16 bit signed integer type.
    Definition: type_int.hpp:221
    +
    detail::int64 int64
    64 bit signed integer type.
    Definition: type_int.hpp:223
    +
    detail::uint64 lowp_uint64_t
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:760
    +
    highp_i32vec1 i32vec1
    Default precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:551
    +
    tvec2< f64, lowp > lowp_f64vec2
    Low double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1695
    +
    double float64
    Default 64 bit double-precision floating-point scalar.
    Definition: type_float.hpp:81
    +
    tvec4< i8, highp > highp_i8vec4
    High precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:377
    +
    tmat4x3< f32, highp > highp_fmat4x3
    High single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:1889
    +
    tvec1< i16, mediump > mediump_i16vec1
    Medium precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:427
    +
    detail::float64 mediump_float64
    Medium 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1418
    +
    mediump_f64mat3x3 mediump_f64mat3
    Medium double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2190
    +
    tmat3x4< f32, highp > highp_f32mat3x4
    High single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2052
    +
    detail::uint32 lowp_u32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:773
    +
    detail::int8 highp_int8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:224
    +
    tvec3< f64, lowp > lowp_f64vec3
    Low double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1699
    +
    quat fquat
    Quaternion of default single-precision floating-point numbers.
    Definition: fwd.hpp:86
    +
    highp_f64mat2x3 f64mat2x3
    Default double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2551
    +
    highp_u16vec3 u16vec3
    Default precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1089
    +
    highp_f32vec2 f32vec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2429
    +
    detail::uint8 lowp_uint8_t
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:748
    +
    highp_f64mat4x4 highp_f64mat4
    High double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2250
    +
    tvec3< i16, mediump > mediump_i16vec3
    Medium precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:435
    +
    highp_i16vec2 i16vec2
    Default precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:476
    +
    tmat4x2< f32, highp > highp_fmat4x2
    High single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1885
    +
    highp_i64vec4 i64vec4
    Default precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:722
    +
    mediump_f32mat2x2 mediump_f32mat2
    Medium single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2015
    +
    detail::float32 highp_float32_t
    High 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1447
    +
    highp_fmat3x3 highp_fmat3
    High single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1905
    +
    highp_f32vec2 fvec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2359
    +
    mediump_f32mat4x4 mediump_f32mat4
    Medium single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2023
    +
    tmat3x2< f32, highp > highp_f32mat3x2
    High single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2044
    +
    tvec3< float, lowp > lowp_fvec3
    Low single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1567
    +
    tvec3< float, mediump > mediump_fvec3
    Medium Single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1600
    +
    detail::int8 int8_t
    8 bit signed integer type.
    Definition: fwd.hpp:296
    +
    mediump_fmat2x2 mediump_fmat2
    Medium single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1844
    +
    highp_f32vec4 f32vec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2437
    +
    tmat2x2< f32, lowp > lowp_f32mat2x2
    Low single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1918
    +
    detail::float32 lowp_float32_t
    Low 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1348
    +
    detail::uint64 lowp_u64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:777
    +
    tvec3< u64, mediump > mediump_u64vec3
    Medium precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1283
    +
    tvec4< i8, lowp > lowp_i8vec4
    Low precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:343
    +
    highp_f32mat2x2 fmat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2371
    +
    highp_i64vec3 i64vec3
    Default precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:718
    +
    tquat< f32, lowp > lowp_f32quat
    Low single-precision floating-point quaternion.
    Definition: fwd.hpp:2257
    +
    tmat4x3< f64, highp > highp_f64mat4x3
    High double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2230
    +
    detail::uint64 mediump_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:795
    +
    detail::uint16 uint16
    16 bit unsigned integer type.
    Definition: type_int.hpp:226
    +
    tvec1< u64, lowp > lowp_u64vec1
    Low precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1258
    +
    highp_f32mat4x3 fmat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2399
    +
    tvec4< f64, lowp > lowp_f64vec4
    Low double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1703
    +
    tvec3< float, highp > highp_vec3
    3 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:176
    +
    tmat2x2< f32, lowp > lowp_fmat2x2
    Low single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1747
    +
    tmat4x2< f32, highp > highp_f32mat4x2
    High single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2056
    +
    tvec2< f64, mediump > mediump_f64vec2
    Medium double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1711
    +
    highp_fmat2x2 highp_fmat2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1901
    +
    tmat2x3< f64, highp > highp_f64mat2x3
    High double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2206
    +
    tvec4< u32, lowp > lowp_u32vec4
    Low precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1111
    +
    tvec4< float, highp > highp_fvec4
    High Single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1637
    +
    float64 highp_f64
    High 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1459
    +
    tmat2x3< f32, mediump > mediump_f32mat2x3
    Medium single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1979
    +
    tvec2< u64, lowp > lowp_u64vec2
    Low precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1262
    +
    lowp_fmat2x2 lowp_fmat2
    Low single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1787
    +
    tvec1< f32, mediump > mediump_f32vec1
    Medium single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1658
    +
    tmat2x2< f32, highp > highp_f32mat2x2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2032
    +
    highp_f32mat2x2 f32mat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2441
    +
    f64mat4x4 f64mat4
    Default double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2591
    +
    tmat4x2< f32, mediump > mediump_fmat4x2
    Medium single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1828
    +
    tvec2< i16, mediump > mediump_i16vec2
    Medium precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:431
    +
    tvec3< i32, mediump > mediump_i32vec3
    Medium precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:515
    +
    tmat2x3< f32, highp > highp_fmat2x3
    High single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1865
    +
    tmat4x3< f32, mediump > mediump_fmat4x3
    Medium single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:1832
    +
    tvec1< f64, mediump > mediump_f64vec1
    Medium double-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1707
    +
    tvec2< i32, highp > highp_i32vec2
    High precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:528
    +
    highp_f32mat3x2 f32mat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2453
    +
    detail::uint8 u8
    8 bit unsigned integer type.
    Definition: fwd.hpp:922
    +
    detail::uint8 highp_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:849
    +
    highp_f64mat4x2 f64mat4x2
    Default double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2571
    +
    f64mat2x2 f64mat2
    Default double-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2583
    +
    tvec2< u8, mediump > mediump_u8vec2
    Medium precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:961
    +
    highp_f64mat3x4 f64mat3x4
    Default double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2567
    +
    detail::int64 lowp_int64_t
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:156
    +
    detail::uint16 lowp_u16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:769
    +
    highp_u16vec2 u16vec2
    Default precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1085
    +
    tvec2< i64, highp > highp_i64vec2
    High precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:687
    +
    tmat4x3< f32, mediump > mediump_f32mat4x3
    Medium single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2003
    +
    tquat< f32, mediump > mediump_f32quat
    Medium single-precision floating-point quaternion.
    Definition: fwd.hpp:2265
    +
    tvec4< float, lowp > lowp_vec4
    4 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:294
    +
    mediump_f32mat3x3 mediump_f32mat3
    Medium single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2019
    +
    tvec3< i64, highp > highp_i64vec3
    High precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:691
    +
    highp_f32mat4x4 fmat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2403
    +
    tmat4x4< f64, mediump > mediump_f64mat4x4
    Medium double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2178
    +
    tmat4x4< f32, highp > highp_fmat4x4
    High single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1893
    +
    tmat3x3< f32, highp > highp_fmat3x3
    High single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1877
    +
    detail::uint64 highp_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:845
    +
    tvec1< float, mediump > mediump_vec1
    Medium single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1576
    +
    tvec4< f32, highp > highp_f32vec4
    High single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1686
    +
    tvec2< float, lowp > lowp_vec2
    2 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:79
    +
    tmat3x2< f32, lowp > lowp_f32mat3x2
    Low single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1930
    +
    tvec3< u8, lowp > lowp_u8vec3
    Low precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:948
    +
    highp_u64vec1 u64vec1
    Default precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1319
    +
    tvec2< u32, highp > highp_u32vec2
    High precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1137
    +
    tmat3x3< f64, mediump > mediump_f64mat3x3
    Medium double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2162
    +
    detail::int64 lowp_i64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:172
    +
    highp_f64vec3 f64vec3
    Default double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2539
    +
    tvec4< i64, mediump > mediump_i64vec4
    Medium precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:678
    +
    tquat< f32, highp > highp_f32quat
    High single-precision floating-point quaternion.
    Definition: fwd.hpp:2273
    +
    detail::int32 lowp_int32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:136
    +
    tvec3< i16, lowp > lowp_i16vec3
    Low precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:418
    +
    detail::uint16 lowp_uint16_t
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:752
    +
    detail::int64 highp_i64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:268
    +
    tvec2< u64, highp > highp_u64vec2
    High precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1296
    +
    Definition: _noise.hpp:31
    +
    detail::float32 highp_float32
    High 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1439
    +
    detail::int32 highp_int32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:232
    +
    highp_u32vec4 u32vec4
    Default precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1172
    +
    highp_u8vec2 u8vec2
    Default precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1005
    +
    tvec3< u16, mediump > mediump_u16vec3
    Medium precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1044
    +
    tvec2< f32, mediump > mediump_f32vec2
    Medium single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1662
    +
    highp_i16vec3 i16vec3
    Default precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:480
    +
    detail::int32 mediump_int32_t
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:200
    +
    mediump_f64mat4x4 mediump_f64mat4
    Medium double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2194
    +
    tvec2< u16, highp > highp_u16vec2
    High precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1057
    +
    fmat4x4 fmat4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2415
    +
    tvec1< u16, mediump > mediump_u16vec1
    Medium precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1036
    +
    tquat< f64, lowp > lowp_f64quat
    Low double-precision floating-point quaternion.
    Definition: fwd.hpp:2261
    +
    tvec2< f32, highp > highp_f32vec2
    High single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1678
    +
    detail::uint16 mediump_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:819
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tmat3x4< f32, lowp > lowp_fmat3x4
    Low single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1767
    +
    tmat2x4< f32, mediump > mediump_fmat2x4
    Medium single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1812
    +
    detail::uint16 highp_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:853
    +
    tmat4x2< f32, lowp > lowp_fmat4x2
    Low single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1771
    +
    detail::float64 lowp_float64
    Low 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1344
    +
    detail::uint32 mediump_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:791
    +
    tvec1< float, lowp > lowp_fvec1
    Low single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1559
    +
    detail::int8 i8
    8 bit signed integer type.
    Definition: fwd.hpp:313
    +
    tvec4< i8, mediump > mediump_i8vec4
    Medium precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:360
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tvec2< i8, lowp > lowp_i8vec2
    Low precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:335
    +
    tvec3< i8, mediump > mediump_i8vec3
    Medium precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:356
    +
    tvec3< u16, lowp > lowp_u16vec3
    Low precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1027
    +
    detail::float32 lowp_float32
    Low 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1340
    +
    highp_f64mat4x3 f64mat4x3
    Default double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2575
    +
    tvec4< i16, mediump > mediump_i16vec4
    Medium precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:439
    +
    detail::uint64 uint64
    64 bit unsigned integer type.
    Definition: type_int.hpp:228
    +
    tvec2< float, lowp > lowp_fvec2
    Low single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1563
    +
    tvec4< f32, lowp > lowp_f32vec4
    Low single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1654
    +
    highp_f32mat2x4 fmat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2379
    +
    highp_f32mat3x4 fmat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2391
    +
    tmat3x4< f64, highp > highp_f64mat3x4
    High double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2222
    +
    tvec2< f32, lowp > lowp_f32vec2
    Low single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1646
    +
    detail::int16 lowp_i16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:164
    +
    float64 mediump_f64
    Medium 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1434
    +
    highp_i32vec2 i32vec2
    Default precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:555
    +
    tmat4x3< f32, highp > highp_f32mat4x3
    High single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2060
    +
    tmat3x3< f32, lowp > lowp_fmat3x3
    Low single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1763
    +
    tvec4< u16, mediump > mediump_u16vec4
    Medium precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1048
    +
    detail::uint64 lowp_uint64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:743
    +
    detail::int64 highp_int64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:236
    +
    tvec1< i8, highp > highp_i8vec1
    High precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:365
    +
    tquat< f64, highp > highp_f64quat
    High double-precision floating-point quaternion.
    Definition: fwd.hpp:2277
    +
    detail::float64 highp_float64
    High 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1443
    +
    lowp_f64mat4x4 lowp_f64mat4
    Low double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2137
    +
    tvec1< u64, highp > highp_u64vec1
    High precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1292
    +
    tvec2< float, highp > highp_fvec2
    High Single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1629
    +
    tmat3x2< f32, lowp > lowp_fmat3x2
    Low single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1759
    +
    detail::uint32 mediump_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:823
    +
    highp_i8vec3 i8vec3
    Default precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:400
    +
    tmat2x4< f32, highp > highp_f32mat2x4
    High single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2040
    +
    lowp_f64mat3x3 lowp_f64mat3
    Low double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2133
    +
    highp_f64mat2x2 f64mat2x2
    Default double-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2547
    +
    tmat3x2< f32, highp > highp_fmat3x2
    High single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1873
    +
    tmat2x4< f32, mediump > mediump_f32mat2x4
    Medium single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1983
    +
    detail::int64 mediump_int64_t
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:204
    +
    tvec2< i8, mediump > mediump_i8vec2
    Medium precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:352
    +
    tvec2< i32, lowp > lowp_i32vec2
    Low precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:494
    +
    tvec4< f64, highp > highp_f64vec4
    High double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1735
    +
    detail::uint32 mediump_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:807
    +
    tvec1< u32, lowp > lowp_u32vec1
    Low precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1099
    +
    tvec1< u8, highp > highp_u8vec1
    High precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:974
    +
    highp_u16vec1 u16vec1
    Default precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1081
    +
    highp_f32vec3 f32vec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2433
    +
    highp_f32vec1 fvec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2355
    +
    tmat3x3< f64, highp > highp_f64mat3x3
    High double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2218
    +
    tvec3< u64, highp > highp_u64vec3
    High precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1300
    +
    tvec4< i64, highp > highp_i64vec4
    High precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:695
    +
    tvec1< u32, mediump > mediump_u32vec1
    Medium precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1116
    +
    highp_u64vec3 u64vec3
    Default precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1327
    +
    tvec2< i32, mediump > mediump_i32vec2
    Medium precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:511
    +
    highp_f64quat f64quat
    Default double-precision floating-point quaternion.
    Definition: fwd.hpp:2595
    +
    tvec2< f64, highp > highp_f64vec2
    High double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1727
    +
    tvec4< u8, lowp > lowp_u8vec4
    Low precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:952
    +
    detail::int16 mediump_i16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:212
    +
    highp_u64vec2 u64vec2
    Default precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1323
    +
    highp_f32mat2x3 f32mat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2445
    +
    detail::uint8 uint8
    8 bit unsigned integer type.
    Definition: type_int.hpp:225
    +
    tvec2< i64, lowp > lowp_i64vec2
    Low precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:653
    +
    tvec1< u8, mediump > mediump_u8vec1
    Medium precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:957
    +
    tvec4< i16, lowp > lowp_i16vec4
    Low precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:422
    +
    highp_f32mat4x2 fmat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2395
    +
    detail::uint32 uint32
    32 bit unsigned integer type.
    Definition: type_int.hpp:227
    +
    detail::float32 mediump_float32
    Medium 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1414
    +
    detail::uint32 uint32_t
    32 bit unsigned integer type.
    Definition: fwd.hpp:913
    +
    tmat2x2< f64, highp > highp_f64mat2x2
    High double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2202
    +
    detail::int32 int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:304
    +
    fmat2x2 fmat2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2407
    +
    highp_fmat4x4 highp_fmat4
    High single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1909
    +
    highp_f32mat3x4 f32mat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2461
    +
    detail::float32 mediump_float32_t
    Medium 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1422
    +
    tvec2< u8, highp > highp_u8vec2
    High precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:978
    +
    tvec1< i32, mediump > mediump_i32vec1
    Medium precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:507
    +
    tvec1< u8, lowp > lowp_u8vec1
    Low precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:940
    +
    tmat4x3< f64, mediump > mediump_f64mat4x3
    Medium double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2174
    +
    tmat4x2< f32, mediump > mediump_f32mat4x2
    Medium single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1999
    +
    tmat3x4< f32, mediump > mediump_f32mat3x4
    Medium single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1995
    +
    tvec1< u16, highp > highp_u16vec1
    High precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1053
    +
    tvec2< u64, mediump > mediump_u64vec2
    Medium precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1279
    +
    tvec4< u64, mediump > mediump_u64vec4
    Medium precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1287
    +
    tvec1< f32, lowp > lowp_f32vec1
    Low single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1642
    +
    detail::uint16 mediump_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:787
    +
    tmat2x4< f32, lowp > lowp_f32mat2x4
    Low single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1926
    +
    detail::uint64 uint64_t
    64 bit unsigned integer type.
    Definition: fwd.hpp:917
    +
    highp_i8vec2 i8vec2
    Default precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:396
    +
    highp_f32mat4x3 f32mat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2469
    +
    tvec2< i8, highp > highp_i8vec2
    High precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:369
    +
    tvec4< i16, highp > highp_i16vec4
    High precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:456
    +
    tvec4< u8, mediump > mediump_u8vec4
    Medium precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:969
    +
    detail::int64 lowp_int64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:140
    +
    detail::int16 lowp_int16_t
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:148
    +
    lowp_f32mat3x3 lowp_f32mat3
    Low single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1962
    +
    tmat2x3< f64, lowp > lowp_f64mat2x3
    Low double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2093
    +
    mediump_fmat3x3 mediump_fmat3
    Medium single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1848
    +
    detail::uint8 mediump_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:799
    +
    detail::int16 mediump_int16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:180
    +
    highp_float64_t float64_t
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1529
    +
    tvec3< f32, lowp > lowp_f32vec3
    Low single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1650
    +
    detail::float64 highp_float64_t
    High 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1451
    +
    tmat3x3< f32, highp > highp_f32mat3x3
    High single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2048
    +
    tvec4< float, highp > highp_vec4
    4 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:282
    +
    tvec4< i32, lowp > lowp_i32vec4
    Low precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:502
    +
    lowp_fmat3x3 lowp_fmat3
    Low single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1791
    +
    tvec1< f64, lowp > lowp_f64vec1
    Low double-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1691
    +
    detail::uint16 uint16_t
    16 bit unsigned integer type.
    Definition: fwd.hpp:909
    +
    tmat4x4< f64, lowp > lowp_f64mat4x4
    Low double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2121
    +
    f64mat3x3 f64mat3
    Default double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2587
    +
    tvec1< f32, highp > highp_f32vec1
    High single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1674
    +
    tvec3< u32, mediump > mediump_u32vec3
    Medium precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1124
    +
    tmat4x4< f32, mediump > mediump_fmat4x4
    Medium single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1836
    +
    tvec3< u8, highp > highp_u8vec3
    High precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:982
    +
    highp_f32mat4x4 f32mat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2473
    +
    tvec4< i64, lowp > lowp_i64vec4
    Low precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:661
    +
    highp_i8vec1 i8vec1
    Default precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:392
    +
    float32 mediump_f32
    Medium 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1430
    +
    tvec3< f32, mediump > mediump_f32vec3
    Medium single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1666
    +
    tvec4< u32, mediump > mediump_u32vec4
    Medium precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1128
    +
    highp_f64mat3x3 f64mat3x3
    Default double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2563
    +
    highp_i32vec4 i32vec4
    Default precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:563
    +
    highp_f32mat3x2 fmat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2383
    +
    tvec3< i8, highp > highp_i8vec3
    High precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:373
    +
    highp_u8vec1 u8vec1
    Default precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:1001
    +
    highp_float32_t f32
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1533
    +
    tmat4x4< f64, highp > highp_f64mat4x4
    High double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2234
    +
    detail::int8 lowp_i8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:160
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    detail::int8 lowp_int8_t
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:144
    +
    tmat3x4< f64, mediump > mediump_f64mat3x4
    Medium double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2166
    +
    tvec1< u16, lowp > lowp_u16vec1
    Low precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1019
    +
    tvec3< f32, highp > highp_f32vec3
    High single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1682
    +
    detail::int32 highp_int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:248
    +
    f32mat4x4 f32mat4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2485
    +
    tvec4< i32, highp > highp_i32vec4
    High precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:536
    +
    detail::int64 mediump_int64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:188
    +
    float float32
    Default 32 bit single-precision floating-point scalar.
    Definition: type_float.hpp:80
    +
    detail::uint64 mediump_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:827
    +
    detail::uint8 lowp_uint8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:731
    +
    highp_f32mat3x3 fmat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2387
    +
    tvec1< u64, mediump > mediump_u64vec1
    Medium precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1275
    +
    highp_i8vec4 i8vec4
    Default precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:404
    +
    highp_f32vec3 fvec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2363
    +
    highp_u32vec1 u32vec1
    Default precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1160
    +
    tvec4< float, mediump > mediump_vec4
    4 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:288
    +
    detail::uint8 lowp_u8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:765
    +
    tvec4< u64, lowp > lowp_u64vec4
    Low precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1270
    +
    tvec1< float, mediump > mediump_fvec1
    Medium single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1592
    +
    tvec1< i8, mediump > mediump_i8vec1
    Medium precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:348
    +
    detail::uint32 highp_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:841
    +
    tmat2x4< f64, highp > highp_f64mat2x4
    High double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2210
    +
    detail::uint16 mediump_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:803
    +
    detail::uint64 mediump_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:811
    +
    float32 highp_f32
    High 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1455
    +
    tvec2< u8, lowp > lowp_u8vec2
    Low precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:944
    +
    highp_i32vec3 i32vec3
    Default precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:559
    +
    detail::int32 int32
    32 bit signed integer type.
    Definition: type_int.hpp:222
    +
    detail::uint8 highp_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:865
    +
    highp_u8vec4 u8vec4
    Default precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1013
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tvec3< u16, highp > highp_u16vec3
    High precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1061
    +
    detail::int64 highp_int64_t
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:252
    +
    detail::int8 mediump_int8_t
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:192
    +
    detail::uint16 highp_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:837
    +
    tvec1< float, highp > highp_vec1
    High single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1609
    +
    highp_i64vec1 i64vec1
    Default precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:710
    +
    tmat4x2< f64, highp > highp_f64mat4x2
    High double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2226
    +
    detail::uint32 highp_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:857
    +
    tvec3< f64, mediump > mediump_f64vec3
    Medium double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1715
    +
    tvec3< u8, mediump > mediump_u8vec3
    Medium precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:965
    +
    detail::int32 mediump_i32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:216
    +
    lowp_fmat4x4 lowp_fmat4
    Low single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1795
    +
    tmat3x3< f32, mediump > mediump_fmat3x3
    Medium single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1820
    +
    tvec2< float, mediump > mediump_fvec2
    Medium Single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1596
    +
    detail::int8 highp_i8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:256
    diff --git a/doc/api/a00038.html b/doc/api/a00038.html new file mode 100644 index 00000000..3de85b37 --- /dev/null +++ b/doc/api/a00038.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: geometric.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    geometric.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    + +

    Definition in file geometric.hpp.

    +
    + + + + diff --git a/doc/api/a00038_source.html b/doc/api/a00038_source.html index 72fa0e89..066e51e5 100644 --- a/doc/api/a00038_source.html +++ b/doc/api/a00038_source.html @@ -3,8 +3,8 @@ - -GLM: func_packing.hpp Source File + +0.9.6: geometric.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,75 +41,25 @@
    -
    func_packing.hpp
    +
    geometric.hpp
    -
    1 
    -
    36 #ifndef GLM_CORE_func_packing
    -
    37 #define GLM_CORE_func_packing
    -
    38 
    -
    39 #include "type_vec2.hpp"
    -
    40 #include "type_vec4.hpp"
    -
    41 
    -
    42 namespace glm
    -
    43 {
    -
    46 
    -
    58  GLM_FUNC_DECL uint packUnorm2x16(vec2 const & v);
    -
    59 
    -
    71  GLM_FUNC_DECL uint packSnorm2x16(vec2 const & v);
    -
    72 
    -
    84  GLM_FUNC_DECL uint packUnorm4x8(vec4 const & v);
    -
    85 
    -
    97  GLM_FUNC_DECL uint packSnorm4x8(vec4 const & v);
    -
    98 
    -
    110  GLM_FUNC_DECL vec2 unpackUnorm2x16(uint const & p);
    -
    111 
    -
    123  GLM_FUNC_DECL vec2 unpackSnorm2x16(uint const & p);
    -
    124 
    -
    136  GLM_FUNC_DECL vec4 unpackUnorm4x8(uint const & p);
    -
    137 
    -
    149  GLM_FUNC_DECL vec4 unpackSnorm4x8(uint const & p);
    -
    150 
    -
    159  GLM_FUNC_DECL double packDouble2x32(uvec2 const & v);
    -
    160 
    -
    168  GLM_FUNC_DECL uvec2 unpackDouble2x32(double const & v);
    -
    169 
    -
    178  GLM_FUNC_DECL uint packHalf2x16(vec2 const & v);
    -
    179 
    -
    188  GLM_FUNC_DECL vec2 unpackHalf2x16(uint const & v);
    -
    189 
    -
    191 }//namespace glm
    -
    192 
    -
    193 #include "func_packing.inl"
    -
    194 
    -
    195 #endif//GLM_CORE_func_packing
    -
    GLM_FUNC_DECL vec4 unpackSnorm4x8(uint const &p)
    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
    -
    GLM_FUNC_DECL double packDouble2x32(uvec2 const &v)
    Returns a double-precision value obtained by packing the components of v into a 64-bit value...
    -
    GLM_FUNC_DECL vec2 unpackHalf2x16(uint const &v)
    Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned...
    -
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    -
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:171
    -
    GLM_FUNC_DECL uint packUnorm4x8(vec4 const &v)
    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
    -
    GLM_FUNC_DECL vec4 unpackUnorm4x8(uint const &p)
    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
    -
    GLM_FUNC_DECL uint packUnorm2x16(vec2 const &v)
    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
    -
    GLM_FUNC_DECL vec2 unpackUnorm2x16(uint const &p)
    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
    -
    GLM_FUNC_DECL uint packSnorm4x8(vec4 const &v)
    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
    -
    GLM_FUNC_DECL vec2 unpackSnorm2x16(uint const &p)
    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
    -
    highp_uvec2 uvec2
    2 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:472
    -
    GLM_FUNC_DECL uint packSnorm2x16(vec2 const &v)
    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
    -
    GLM_FUNC_DECL uint packHalf2x16(vec2 const &v)
    Returns an unsigned integer obtained by converting the components of a two-component floating-point v...
    -
    GLM_FUNC_DECL uvec2 unpackDouble2x32(double const &v)
    Returns a two-component unsigned integer vector representation of v.
    -
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    + +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00039.html b/doc/api/a00039.html new file mode 100644 index 00000000..733bc21f --- /dev/null +++ b/doc/api/a00039.html @@ -0,0 +1,78 @@ + + + + + + +0.9.6: glm.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    glm.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +
    Date
    2009-05-01 / 2011-05-16
    +
    Author
    Christophe Riccio
    +

    GLM Core (Dependence)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2005-01-14 / 2011-10-24
    +
    Author
    Christophe Riccio
    + +

    Definition in file glm.hpp.

    +
    + + + + diff --git a/doc/api/a00039_source.html b/doc/api/a00039_source.html index 3d4b36b4..709cdebd 100644 --- a/doc/api/a00039_source.html +++ b/doc/api/a00039_source.html @@ -3,8 +3,8 @@ - -GLM: func_trigonometric.hpp Source File + +0.9.6: glm.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,94 +41,79 @@
    -
    func_trigonometric.hpp
    +
    glm.hpp
    -
    1 
    -
    40 #ifndef GLM_CORE_func_trigonometric
    -
    41 #define GLM_CORE_func_trigonometric
    -
    42 
    -
    43 namespace glm
    -
    44 {
    -
    47 
    -
    54  template <typename genType>
    -
    55  GLM_FUNC_DECL genType radians(genType const & degrees);
    -
    56 
    -
    63  template <typename genType>
    -
    64  GLM_FUNC_DECL genType degrees(genType const & radians);
    -
    65 
    -
    73  template <typename genType>
    -
    74  GLM_FUNC_DECL genType sin(genType const & angle);
    -
    75 
    -
    83  template <typename genType>
    -
    84  GLM_FUNC_DECL genType cos(genType const & angle);
    -
    85 
    -
    92  template <typename genType>
    -
    93  GLM_FUNC_DECL genType tan(genType const & angle);
    -
    94 
    -
    103  template <typename genType>
    -
    104  GLM_FUNC_DECL genType asin(genType const & x);
    +Go to the documentation of this file.
    1 
    +
    77 #include "detail/_fixes.hpp"
    +
    78 
    +
    79 #pragma once
    +
    80 
    +
    81 #include <cmath>
    +
    82 #include <climits>
    +
    83 #include <cfloat>
    +
    84 #include <limits>
    +
    85 #include <cassert>
    +
    86 #include "fwd.hpp"
    +
    87 
    +
    88 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_CORE_INCLUDED_DISPLAYED))
    +
    89 # define GLM_MESSAGE_CORE_INCLUDED_DISPLAYED
    +
    90 # pragma message("GLM: Core library included")
    +
    91 #endif//GLM_MESSAGE
    +
    92 
    +
    93 #include "vec2.hpp"
    +
    94 #include "vec3.hpp"
    +
    95 #include "vec4.hpp"
    +
    96 #include "mat2x2.hpp"
    +
    97 #include "mat2x3.hpp"
    +
    98 #include "mat2x4.hpp"
    +
    99 #include "mat3x2.hpp"
    +
    100 #include "mat3x3.hpp"
    +
    101 #include "mat3x4.hpp"
    +
    102 #include "mat4x2.hpp"
    +
    103 #include "mat4x3.hpp"
    +
    104 #include "mat4x4.hpp"
    105 
    -
    114  template <typename genType>
    -
    115  GLM_FUNC_DECL genType acos(genType const & x);
    -
    116 
    -
    127  template <typename genType>
    -
    128  GLM_FUNC_DECL genType atan(genType const & y, genType const & x);
    -
    129 
    -
    137  template <typename genType>
    -
    138  GLM_FUNC_DECL genType atan(genType const & y_over_x);
    -
    139 
    -
    146  template <typename genType>
    -
    147  GLM_FUNC_DECL genType sinh(genType const & angle);
    -
    148 
    -
    155  template <typename genType>
    -
    156  GLM_FUNC_DECL genType cosh(genType const & angle);
    -
    157 
    -
    164  template <typename genType>
    -
    165  GLM_FUNC_DECL genType tanh(genType const & angle);
    -
    166 
    -
    173  template <typename genType>
    -
    174  GLM_FUNC_DECL genType asinh(genType const & x);
    -
    175 
    -
    183  template <typename genType>
    -
    184  GLM_FUNC_DECL genType acosh(genType const & x);
    -
    185 
    -
    193  template <typename genType>
    -
    194  GLM_FUNC_DECL genType atanh(genType const & x);
    -
    195 
    -
    197 }//namespace glm
    -
    198 
    -
    199 #include "func_trigonometric.inl"
    -
    200 
    -
    201 #endif//GLM_CORE_func_trigonometric
    -
    202 
    -
    203 
    -
    GLM_FUNC_DECL genType sinh(genType const &angle)
    Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.
    -
    GLM_FUNC_DECL genType cos(genType const &angle)
    The standard trigonometric cosine function.
    -
    GLM_FUNC_DECL genType atan(genType const &y, genType const &x)
    Arc tangent.
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    GLM_FUNC_DECL genType radians(genType const &degrees)
    Converts degrees to radians and returns the result.
    -
    GLM_FUNC_DECL genType tanh(genType const &angle)
    Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
    -
    GLM_FUNC_DECL genType acos(genType const &x)
    Arc cosine.
    -
    GLM_FUNC_DECL genType sin(genType const &angle)
    The standard trigonometric sine function.
    -
    GLM_FUNC_DECL genType cosh(genType const &angle)
    Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.
    -
    GLM_FUNC_DECL genType tan(genType const &angle)
    The standard trigonometric tangent function.
    -
    GLM_FUNC_DECL genType acosh(genType const &x)
    Arc hyperbolic cosine; returns the non-negative inverse of cosh.
    -
    GLM_FUNC_DECL genType asinh(genType const &x)
    Arc hyperbolic sine; returns the inverse of sinh.
    -
    GLM_FUNC_DECL genType asin(genType const &x)
    Arc sine.
    -
    GLM_FUNC_DECL genType degrees(genType const &radians)
    Converts radians to degrees and returns the result.
    -
    GLM_FUNC_DECL genType atanh(genType const &x)
    Arc hyperbolic tangent; returns the inverse of tanh.
    +
    106 #include "trigonometric.hpp"
    +
    107 #include "exponential.hpp"
    +
    108 #include "common.hpp"
    +
    109 #include "packing.hpp"
    +
    110 #include "geometric.hpp"
    +
    111 #include "matrix.hpp"
    +
    112 #include "vector_relational.hpp"
    +
    113 #include "integer.hpp"
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00040.html b/doc/api/a00040.html new file mode 100644 index 00000000..439fcf9a --- /dev/null +++ b/doc/api/a00040.html @@ -0,0 +1,87 @@ + + + + + + +0.9.6: gradient_paint.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    gradient_paint.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL T linearGradient (tvec2< T, P > const &Point0, tvec2< T, P > const &Point1, tvec2< T, P > const &Position)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T radialGradient (tvec2< T, P > const &Center, T const &Radius, tvec2< T, P > const &Focal, tvec2< T, P > const &Position)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_gradient_paint

    +
    Date
    2009-03-06 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_optimum_pow (dependence)
    + +

    Definition in file gradient_paint.hpp.

    +
    + + + + diff --git a/doc/api/a00040_source.html b/doc/api/a00040_source.html index b22cc884..252e6eeb 100644 --- a/doc/api/a00040_source.html +++ b/doc/api/a00040_source.html @@ -3,8 +3,8 @@ - -GLM: func_vector_relational.hpp Source File + +0.9.6: gradient_paint.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,75 +41,53 @@
    -
    func_vector_relational.hpp
    +
    gradient_paint.hpp
    -
    1 
    -
    41 #ifndef GLM_CORE_func_vector_relational
    -
    42 #define GLM_CORE_func_vector_relational
    -
    43 
    -
    44 #include "precision.hpp"
    -
    45 #include "setup.hpp"
    -
    46 
    -
    47 #if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER <= GLM_COMPILER_VC10)) // Workaround a Visual C++ bug
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    60  // TODO: Mismatched
    -
    61  //template <typename T, precision P, template <typename, precision> class vecType>
    -
    62  //GLM_FUNC_DECL typename vecType<T, P>::bool_type lessThan(vecType<T, P> const & x, vecType<T, P> const & y);
    -
    63 
    -
    70  template <typename T, precision P, template <typename, precision> class vecType>
    -
    71  GLM_FUNC_DECL typename vecType<T, P>::bool_type lessThanEqual(vecType<T, P> const & x, vecType<T, P> const & y);
    +Go to the documentation of this file.
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 #include "../gtx/optimum_pow.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_gradient_paint extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T, precision P>
    +
    56  GLM_FUNC_DECL T radialGradient(
    +
    57  tvec2<T, P> const & Center,
    +
    58  T const & Radius,
    +
    59  tvec2<T, P> const & Focal,
    +
    60  tvec2<T, P> const & Position);
    +
    61 
    +
    64  template <typename T, precision P>
    +
    65  GLM_FUNC_DECL T linearGradient(
    +
    66  tvec2<T, P> const & Point0,
    +
    67  tvec2<T, P> const & Point1,
    +
    68  tvec2<T, P> const & Position);
    +
    69 
    +
    71 }// namespace glm
    72 
    -
    79  template <typename T, precision P, template <typename, precision> class vecType>
    -
    80  GLM_FUNC_DECL typename vecType<T, P>::bool_type greaterThan(vecType<T, P> const & x, vecType<T, P> const & y);
    -
    81 
    -
    88  template <typename T, precision P, template <typename, precision> class vecType>
    -
    89  GLM_FUNC_DECL typename vecType<T, P>::bool_type greaterThanEqual(vecType<T, P> const & x, vecType<T, P> const & y);
    -
    90 
    -
    97  //TODO: conflicts with definision
    -
    98  //template <typename T, precision P, template <typename, precision> class vecType>
    -
    99  //GLM_FUNC_DECL typename vecType<T, P>::bool_type equal(vecType<T, P> const & x, vecType<T, P> const & y);
    -
    100 
    -
    107  template <typename T, precision P, template <typename, precision> class vecType>
    -
    108  GLM_FUNC_DECL typename vecType<T, P>::bool_type notEqual(vecType<T, P> const & x, vecType<T, P> const & y);
    -
    109 
    -
    116  template <precision P, template <typename, precision> class vecType>
    -
    117  GLM_FUNC_DECL bool any(vecType<bool, P> const & v);
    -
    118 
    -
    125  template <precision P, template <typename, precision> class vecType>
    -
    126  GLM_FUNC_DECL bool all(vecType<bool, P> const & v);
    -
    127 
    -
    135  template <precision P, template <typename, precision> class vecType>
    -
    136  GLM_FUNC_DECL vecType<bool, P> not_(vecType<bool, P> const & v);
    -
    137 
    -
    139 }//namespace glm
    -
    140 
    -
    141 #endif
    -
    142 
    -
    143 #include "func_vector_relational.inl"
    -
    144 
    -
    145 #endif//GLM_CORE_func_vector_relational
    -
    GLM_FUNC_DECL vecType< T, P >::bool_type notEqual(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x == y.
    -
    GLM_FUNC_DECL bool any(vecType< bool, P > const &v)
    Returns true if any component of x is true.
    -
    GLM_FUNC_DECL vecType< T, P >::bool_type greaterThanEqual(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x &gt;= y.
    -
    GLM_FUNC_DECL vecType< bool, P > not_(vecType< bool, P > const &v)
    Returns the component-wise logical complement of x.
    -
    GLM_FUNC_DECL vecType< T, P >::bool_type greaterThan(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x &gt; y.
    -
    GLM_FUNC_DECL vecType< T, P >::bool_type lessThanEqual(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison result of x &lt; y.
    -
    GLM_FUNC_DECL bool all(vecType< bool, P > const &v)
    Returns true if all components of x are true.
    +
    73 #include "gradient_paint.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL T radialGradient(tvec2< T, P > const &Center, T const &Radius, tvec2< T, P > const &Focal, tvec2< T, P > const &Position)
    Return a color from a radial gradient.
    +
    GLM_FUNC_DECL T linearGradient(tvec2< T, P > const &Point0, tvec2< T, P > const &Point1, tvec2< T, P > const &Position)
    Return a color from a linear gradient.
    diff --git a/doc/api/a00041.html b/doc/api/a00041.html index 9e87fa08..34432cc1 100644 --- a/doc/api/a00041.html +++ b/doc/api/a00041.html @@ -3,8 +3,8 @@ - -GLM: fwd.hpp File Reference + +0.9.6: handed_coordinate_space.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,1095 +41,45 @@
    -
    fwd.hpp File Reference
    +
    handed_coordinate_space.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + +

    -Typedefs

    typedef highp_dquat dquat
     
    typedef highp_float32_t f32
     
    typedef f32mat2x2 f32mat2
     
    typedef highp_f32mat2x2 f32mat2x2
     
    typedef highp_f32mat2x3 f32mat2x3
     
    typedef highp_f32mat2x4 f32mat2x4
     
    typedef f32mat3x3 f32mat3
     
    typedef highp_f32mat3x2 f32mat3x2
     
    typedef highp_f32mat3x3 f32mat3x3
     
    typedef highp_f32mat3x4 f32mat3x4
     
    typedef f32mat4x4 f32mat4
     
    typedef highp_f32mat4x2 f32mat4x2
     
    typedef highp_f32mat4x3 f32mat4x3
     
    typedef highp_f32mat4x4 f32mat4x4
     
    typedef highp_f32quat f32quat
     
    typedef highp_f32vec1 f32vec1
     
    typedef highp_f32vec2 f32vec2
     
    typedef highp_f32vec3 f32vec3
     
    typedef highp_f32vec4 f32vec4
     
    typedef highp_float64_t f64
     
    typedef f64mat2x2 f64mat2
     
    typedef highp_f64mat2x2 f64mat2x2
     
    typedef highp_f64mat2x3 f64mat2x3
     
    typedef highp_f64mat2x4 f64mat2x4
     
    typedef f64mat3x3 f64mat3
     
    typedef highp_f64mat3x2 f64mat3x2
     
    typedef highp_f64mat3x3 f64mat3x3
     
    typedef highp_f64mat3x4 f64mat3x4
     
    typedef f64mat4x4 f64mat4
     
    typedef highp_f64mat4x2 f64mat4x2
     
    typedef highp_f64mat4x3 f64mat4x3
     
    typedef highp_f64mat4x4 f64mat4x4
     
    typedef highp_f64quat f64quat
     
    typedef highp_f64vec1 f64vec1
     
    typedef highp_f64vec2 f64vec2
     
    typedef highp_f64vec3 f64vec3
     
    typedef highp_f64vec4 f64vec4
     
    typedef highp_float32_t float32_t
     
    typedef highp_float64_t float64_t
     
    typedef fmat2x2 fmat2
     
    typedef highp_f32mat2x2 fmat2x2
     
    typedef highp_f32mat2x3 fmat2x3
     
    typedef highp_f32mat2x4 fmat2x4
     
    typedef fmat3x3 fmat3
     
    typedef highp_f32mat3x2 fmat3x2
     
    typedef highp_f32mat3x3 fmat3x3
     
    typedef highp_f32mat3x4 fmat3x4
     
    typedef fmat4x4 fmat4
     
    typedef highp_f32mat4x2 fmat4x2
     
    typedef highp_f32mat4x3 fmat4x3
     
    typedef highp_f32mat4x4 fmat4x4
     
    typedef quat fquat
     
    typedef highp_f32vec1 fvec1
     
    typedef highp_f32vec2 fvec2
     
    typedef highp_f32vec3 fvec3
     
    typedef highp_f32vec4 fvec4
     
    typedef detail::tquat< double,
    -highp > 
    highp_dquat
     
    typedef float32 highp_f32
     
    typedef highp_f32mat2x2 highp_f32mat2
     
    typedef detail::tmat2x2< f32,
    -highp > 
    highp_f32mat2x2
     
    typedef detail::tmat2x3< f32,
    -highp > 
    highp_f32mat2x3
     
    typedef detail::tmat2x4< f32,
    -highp > 
    highp_f32mat2x4
     
    typedef highp_f32mat3x3 highp_f32mat3
     
    typedef detail::tmat3x2< f32,
    -highp > 
    highp_f32mat3x2
     
    typedef detail::tmat3x3< f32,
    -highp > 
    highp_f32mat3x3
     
    typedef detail::tmat3x4< f32,
    -highp > 
    highp_f32mat3x4
     
    typedef highp_f32mat4x4 highp_f32mat4
     
    typedef detail::tmat4x2< f32,
    -highp > 
    highp_f32mat4x2
     
    typedef detail::tmat4x3< f32,
    -highp > 
    highp_f32mat4x3
     
    typedef detail::tmat4x4< f32,
    -highp > 
    highp_f32mat4x4
     
    typedef detail::tquat< f32, highp > highp_f32quat
     
    typedef detail::tvec1< f32, highp > highp_f32vec1
     
    typedef detail::tvec2< f32, highp > highp_f32vec2
     
    typedef detail::tvec3< f32, highp > highp_f32vec3
     
    typedef detail::tvec4< f32, highp > highp_f32vec4
     
    typedef float64 highp_f64
     
    typedef highp_f64mat2x2 highp_f64mat2
     
    typedef detail::tmat2x2< f64,
    -highp > 
    highp_f64mat2x2
     
    typedef detail::tmat2x3< f64,
    -highp > 
    highp_f64mat2x3
     
    typedef detail::tmat2x4< f64,
    -highp > 
    highp_f64mat2x4
     
    typedef highp_f64mat3x3 highp_f64mat3
     
    typedef detail::tmat3x2< f64,
    -highp > 
    highp_f64mat3x2
     
    typedef detail::tmat3x3< f64,
    -highp > 
    highp_f64mat3x3
     
    typedef detail::tmat3x4< f64,
    -highp > 
    highp_f64mat3x4
     
    typedef highp_f64mat4x4 highp_f64mat4
     
    typedef detail::tmat4x2< f64,
    -highp > 
    highp_f64mat4x2
     
    typedef detail::tmat4x3< f64,
    -highp > 
    highp_f64mat4x3
     
    typedef detail::tmat4x4< f64,
    -highp > 
    highp_f64mat4x4
     
    typedef detail::tquat< f64, highp > highp_f64quat
     
    typedef detail::tvec1< f64, highp > highp_f64vec1
     
    typedef detail::tvec2< f64, highp > highp_f64vec2
     
    typedef detail::tvec3< f64, highp > highp_f64vec3
     
    typedef detail::tvec4< f64, highp > highp_f64vec4
     
    typedef detail::float32 highp_float32
     
    typedef detail::float32 highp_float32_t
     
    typedef detail::float64 highp_float64
     
    typedef detail::float64 highp_float64_t
     
    typedef highp_fmat2x2 highp_fmat2
     
    typedef detail::tmat2x2< f32,
    -highp > 
    highp_fmat2x2
     
    typedef detail::tmat2x3< f32,
    -highp > 
    highp_fmat2x3
     
    typedef detail::tmat2x4< f32,
    -highp > 
    highp_fmat2x4
     
    typedef highp_fmat3x3 highp_fmat3
     
    typedef detail::tmat3x2< f32,
    -highp > 
    highp_fmat3x2
     
    typedef detail::tmat3x3< f32,
    -highp > 
    highp_fmat3x3
     
    typedef detail::tmat3x4< f32,
    -highp > 
    highp_fmat3x4
     
    typedef highp_fmat4x4 highp_fmat4
     
    typedef detail::tmat4x2< f32,
    -highp > 
    highp_fmat4x2
     
    typedef detail::tmat4x3< f32,
    -highp > 
    highp_fmat4x3
     
    typedef detail::tmat4x4< f32,
    -highp > 
    highp_fmat4x4
     
    typedef highp_quat highp_fquat
     
    typedef detail::tvec1< float,
    -highp > 
    highp_fvec1
     
    typedef detail::tvec2< float,
    -highp > 
    highp_fvec2
     
    typedef detail::tvec3< float,
    -highp > 
    highp_fvec3
     
    typedef detail::tvec4< float,
    -highp > 
    highp_fvec4
     
    typedef detail::int16 highp_i16
     
    typedef detail::tvec1< i16, highp > highp_i16vec1
     
    typedef detail::tvec2< i16, highp > highp_i16vec2
     
    typedef detail::tvec3< i16, highp > highp_i16vec3
     
    typedef detail::tvec4< i16, highp > highp_i16vec4
     
    typedef detail::int32 highp_i32
     
    typedef detail::tvec1< i32, highp > highp_i32vec1
     
    typedef detail::tvec2< i32, highp > highp_i32vec2
     
    typedef detail::tvec3< i32, highp > highp_i32vec3
     
    typedef detail::tvec4< i32, highp > highp_i32vec4
     
    typedef detail::int64 highp_i64
     
    typedef detail::tvec1< i64, highp > highp_i64vec1
     
    typedef detail::tvec2< i64, highp > highp_i64vec2
     
    typedef detail::tvec3< i64, highp > highp_i64vec3
     
    typedef detail::tvec4< i64, highp > highp_i64vec4
     
    typedef detail::int8 highp_i8
     
    typedef detail::tvec1< i8, highp > highp_i8vec1
     
    typedef detail::tvec2< i8, highp > highp_i8vec2
     
    typedef detail::tvec3< i8, highp > highp_i8vec3
     
    typedef detail::tvec4< i8, highp > highp_i8vec4
     
    typedef detail::int16 highp_int16
     
    typedef detail::int16 highp_int16_t
     
    typedef detail::int32 highp_int32
     
    typedef detail::int32 highp_int32_t
     
    typedef detail::int64 highp_int64
     
    typedef detail::int64 highp_int64_t
     
    typedef detail::int8 highp_int8
     
    typedef detail::int8 highp_int8_t
     
    typedef detail::tquat< float,
    -highp > 
    highp_quat
     
    typedef detail::uint16 highp_u16
     
    typedef detail::tvec1< u16, highp > highp_u16vec1
     
    typedef detail::tvec2< u16, highp > highp_u16vec2
     
    typedef detail::tvec3< u16, highp > highp_u16vec3
     
    typedef detail::tvec4< u16, highp > highp_u16vec4
     
    typedef detail::uint32 highp_u32
     
    typedef detail::tvec1< u32, highp > highp_u32vec1
     
    typedef detail::tvec2< u32, highp > highp_u32vec2
     
    typedef detail::tvec3< u32, highp > highp_u32vec3
     
    typedef detail::tvec4< u32, highp > highp_u32vec4
     
    typedef detail::uint64 highp_u64
     
    typedef detail::tvec1< u64, highp > highp_u64vec1
     
    typedef detail::tvec2< u64, highp > highp_u64vec2
     
    typedef detail::tvec3< u64, highp > highp_u64vec3
     
    typedef detail::tvec4< u64, highp > highp_u64vec4
     
    typedef detail::uint8 highp_u8
     
    typedef detail::tvec1< u8, highp > highp_u8vec1
     
    typedef detail::tvec2< u8, highp > highp_u8vec2
     
    typedef detail::tvec3< u8, highp > highp_u8vec3
     
    typedef detail::tvec4< u8, highp > highp_u8vec4
     
    typedef detail::uint16 highp_uint16
     
    typedef detail::uint16 highp_uint16_t
     
    typedef detail::uint32 highp_uint32
     
    typedef detail::uint32 highp_uint32_t
     
    typedef detail::uint64 highp_uint64
     
    typedef detail::uint64 highp_uint64_t
     
    typedef detail::uint8 highp_uint8
     
    typedef detail::uint8 highp_uint8_t
     
    typedef detail::tvec1< float,
    -highp > 
    highp_vec1
     
    typedef detail::int16 i16
     
    typedef highp_i16vec1 i16vec1
     
    typedef highp_i16vec2 i16vec2
     
    typedef highp_i16vec3 i16vec3
     
    typedef highp_i16vec4 i16vec4
     
    typedef detail::int32 i32
     
    typedef highp_i32vec1 i32vec1
     
    typedef highp_i32vec2 i32vec2
     
    typedef highp_i32vec3 i32vec3
     
    typedef highp_i32vec4 i32vec4
     
    typedef detail::int64 i64
     
    typedef highp_i64vec1 i64vec1
     
    typedef highp_i64vec2 i64vec2
     
    typedef highp_i64vec3 i64vec3
     
    typedef highp_i64vec4 i64vec4
     
    typedef detail::int8 i8
     
    typedef highp_i8vec1 i8vec1
     
    typedef highp_i8vec2 i8vec2
     
    typedef highp_i8vec3 i8vec3
     
    typedef highp_i8vec4 i8vec4
     
    typedef detail::int16 int16_t
     
    typedef detail::int32 int32_t
     
    typedef detail::int64 int64_t
     
    typedef detail::int8 int8_t
     
    typedef detail::tquat< double,
    -lowp > 
    lowp_dquat
     
    typedef float32 lowp_f32
     
    typedef lowp_f32mat2x2 lowp_f32mat2
     
    typedef detail::tmat2x2< f32,
    -lowp > 
    lowp_f32mat2x2
     
    typedef detail::tmat2x3< f32,
    -lowp > 
    lowp_f32mat2x3
     
    typedef detail::tmat2x4< f32,
    -lowp > 
    lowp_f32mat2x4
     
    typedef lowp_f32mat3x3 lowp_f32mat3
     
    typedef detail::tmat3x2< f32,
    -lowp > 
    lowp_f32mat3x2
     
    typedef detail::tmat3x3< f32,
    -lowp > 
    lowp_f32mat3x3
     
    typedef detail::tmat3x4< f32,
    -lowp > 
    lowp_f32mat3x4
     
    typedef lowp_f32mat4x4 lowp_f32mat4
     
    typedef detail::tmat4x2< f32,
    -lowp > 
    lowp_f32mat4x2
     
    typedef detail::tmat4x3< f32,
    -lowp > 
    lowp_f32mat4x3
     
    typedef detail::tmat4x4< f32,
    -lowp > 
    lowp_f32mat4x4
     
    typedef detail::tquat< f32, lowp > lowp_f32quat
     
    typedef detail::tvec1< f32, lowp > lowp_f32vec1
     
    typedef detail::tvec2< f32, lowp > lowp_f32vec2
     
    typedef detail::tvec3< f32, lowp > lowp_f32vec3
     
    typedef detail::tvec4< f32, lowp > lowp_f32vec4
     
    typedef float64 lowp_f64
     
    typedef lowp_f64mat2x2 lowp_f64mat2
     
    typedef detail::tmat2x2< f64,
    -lowp > 
    lowp_f64mat2x2
     
    typedef detail::tmat2x3< f64,
    -lowp > 
    lowp_f64mat2x3
     
    typedef detail::tmat2x4< f64,
    -lowp > 
    lowp_f64mat2x4
     
    typedef lowp_f64mat3x3 lowp_f64mat3
     
    typedef detail::tmat3x2< f64,
    -lowp > 
    lowp_f64mat3x2
     
    typedef detail::tmat3x3< f64,
    -lowp > 
    lowp_f64mat3x3
     
    typedef detail::tmat3x4< f64,
    -lowp > 
    lowp_f64mat3x4
     
    typedef lowp_f64mat4x4 lowp_f64mat4
     
    typedef detail::tmat4x2< f64,
    -lowp > 
    lowp_f64mat4x2
     
    typedef detail::tmat4x3< f64,
    -lowp > 
    lowp_f64mat4x3
     
    typedef detail::tmat4x4< f64,
    -lowp > 
    lowp_f64mat4x4
     
    typedef detail::tquat< f64, lowp > lowp_f64quat
     
    typedef detail::tvec1< f64, lowp > lowp_f64vec1
     
    typedef detail::tvec2< f64, lowp > lowp_f64vec2
     
    typedef detail::tvec3< f64, lowp > lowp_f64vec3
     
    typedef detail::tvec4< f64, lowp > lowp_f64vec4
     
    typedef detail::float32 lowp_float32
     
    typedef detail::float32 lowp_float32_t
     
    typedef detail::float64 lowp_float64
     
    typedef detail::float64 lowp_float64_t
     
    typedef lowp_fmat2x2 lowp_fmat2
     
    typedef detail::tmat2x2< f32,
    -lowp > 
    lowp_fmat2x2
     
    typedef detail::tmat2x3< f32,
    -lowp > 
    lowp_fmat2x3
     
    typedef detail::tmat2x4< f32,
    -lowp > 
    lowp_fmat2x4
     
    typedef lowp_fmat3x3 lowp_fmat3
     
    typedef detail::tmat3x2< f32,
    -lowp > 
    lowp_fmat3x2
     
    typedef detail::tmat3x3< f32,
    -lowp > 
    lowp_fmat3x3
     
    typedef detail::tmat3x4< f32,
    -lowp > 
    lowp_fmat3x4
     
    typedef lowp_fmat4x4 lowp_fmat4
     
    typedef detail::tmat4x2< f32,
    -lowp > 
    lowp_fmat4x2
     
    typedef detail::tmat4x3< f32,
    -lowp > 
    lowp_fmat4x3
     
    typedef detail::tmat4x4< f32,
    -lowp > 
    lowp_fmat4x4
     
    typedef lowp_quat lowp_fquat
     
    typedef detail::tvec1< float,
    -lowp > 
    lowp_fvec1
     
    typedef detail::tvec2< float,
    -lowp > 
    lowp_fvec2
     
    typedef detail::tvec3< float,
    -lowp > 
    lowp_fvec3
     
    typedef detail::tvec4< float,
    -lowp > 
    lowp_fvec4
     
    typedef detail::int16 lowp_i16
     
    typedef detail::tvec1< i16, lowp > lowp_i16vec1
     
    typedef detail::tvec2< i16, lowp > lowp_i16vec2
     
    typedef detail::tvec3< i16, lowp > lowp_i16vec3
     
    typedef detail::tvec4< i16, lowp > lowp_i16vec4
     
    typedef detail::int32 lowp_i32
     
    typedef detail::tvec1< i32, lowp > lowp_i32vec1
     
    typedef detail::tvec2< i32, lowp > lowp_i32vec2
     
    typedef detail::tvec3< i32, lowp > lowp_i32vec3
     
    typedef detail::tvec4< i32, lowp > lowp_i32vec4
     
    typedef detail::int64 lowp_i64
     
    typedef detail::tvec1< i64, lowp > lowp_i64vec1
     
    typedef detail::tvec2< i64, lowp > lowp_i64vec2
     
    typedef detail::tvec3< i64, lowp > lowp_i64vec3
     
    typedef detail::tvec4< i64, lowp > lowp_i64vec4
     
    typedef detail::int8 lowp_i8
     
    typedef detail::tvec1< i8, lowp > lowp_i8vec1
     
    typedef detail::tvec2< i8, lowp > lowp_i8vec2
     
    typedef detail::tvec3< i8, lowp > lowp_i8vec3
     
    typedef detail::tvec4< i8, lowp > lowp_i8vec4
     
    typedef detail::int16 lowp_int16
     
    typedef detail::int16 lowp_int16_t
     
    typedef detail::int32 lowp_int32
     
    typedef detail::int32 lowp_int32_t
     
    typedef detail::int64 lowp_int64
     
    typedef detail::int64 lowp_int64_t
     
    typedef detail::int8 lowp_int8
     
    typedef detail::int8 lowp_int8_t
     
    typedef detail::tquat< float,
    -lowp > 
    lowp_quat
     
    typedef detail::uint16 lowp_u16
     
    typedef detail::tvec1< u16, lowp > lowp_u16vec1
     
    typedef detail::tvec2< u16, lowp > lowp_u16vec2
     
    typedef detail::tvec3< u16, lowp > lowp_u16vec3
     
    typedef detail::tvec4< u16, lowp > lowp_u16vec4
     
    typedef detail::uint32 lowp_u32
     
    typedef detail::tvec1< u32, lowp > lowp_u32vec1
     
    typedef detail::tvec2< u32, lowp > lowp_u32vec2
     
    typedef detail::tvec3< u32, lowp > lowp_u32vec3
     
    typedef detail::tvec4< u32, lowp > lowp_u32vec4
     
    typedef detail::uint64 lowp_u64
     
    typedef detail::tvec1< u64, lowp > lowp_u64vec1
     
    typedef detail::tvec2< u64, lowp > lowp_u64vec2
     
    typedef detail::tvec3< u64, lowp > lowp_u64vec3
     
    typedef detail::tvec4< u64, lowp > lowp_u64vec4
     
    typedef detail::uint8 lowp_u8
     
    typedef detail::tvec1< u8, lowp > lowp_u8vec1
     
    typedef detail::tvec2< u8, lowp > lowp_u8vec2
     
    typedef detail::tvec3< u8, lowp > lowp_u8vec3
     
    typedef detail::tvec4< u8, lowp > lowp_u8vec4
     
    typedef detail::uint16 lowp_uint16
     
    typedef detail::uint16 lowp_uint16_t
     
    typedef detail::uint32 lowp_uint32
     
    typedef detail::uint32 lowp_uint32_t
     
    typedef detail::uint64 lowp_uint64
     
    typedef detail::uint64 lowp_uint64_t
     
    typedef detail::uint8 lowp_uint8
     
    typedef detail::uint8 lowp_uint8_t
     
    typedef detail::tvec1< float,
    -lowp > 
    lowp_vec1
     
    typedef detail::tquat< double,
    -mediump > 
    mediump_dquat
     
    typedef float32 mediump_f32
     
    typedef mediump_f32mat2x2 mediump_f32mat2
     
    typedef detail::tmat2x2< f32,
    -mediump > 
    mediump_f32mat2x2
     
    typedef detail::tmat2x3< f32,
    -mediump > 
    mediump_f32mat2x3
     
    typedef detail::tmat2x4< f32,
    -mediump > 
    mediump_f32mat2x4
     
    typedef mediump_f32mat3x3 mediump_f32mat3
     
    typedef detail::tmat3x2< f32,
    -mediump > 
    mediump_f32mat3x2
     
    typedef detail::tmat3x3< f32,
    -mediump > 
    mediump_f32mat3x3
     
    typedef detail::tmat3x4< f32,
    -mediump > 
    mediump_f32mat3x4
     
    typedef mediump_f32mat4x4 mediump_f32mat4
     
    typedef detail::tmat4x2< f32,
    -mediump > 
    mediump_f32mat4x2
     
    typedef detail::tmat4x3< f32,
    -mediump > 
    mediump_f32mat4x3
     
    typedef detail::tmat4x4< f32,
    -mediump > 
    mediump_f32mat4x4
     
    typedef detail::tquat< f32,
    -mediump > 
    mediump_f32quat
     
    typedef detail::tvec1< f32,
    -mediump > 
    mediump_f32vec1
     
    typedef detail::tvec2< f32,
    -mediump > 
    mediump_f32vec2
     
    typedef detail::tvec3< f32,
    -mediump > 
    mediump_f32vec3
     
    typedef detail::tvec4< f32,
    -mediump > 
    mediump_f32vec4
     
    typedef float64 mediump_f64
     
    typedef mediump_f64mat2x2 mediump_f64mat2
     
    typedef detail::tmat2x2< f64,
    -mediump > 
    mediump_f64mat2x2
     
    typedef detail::tmat2x3< f64,
    -mediump > 
    mediump_f64mat2x3
     
    typedef detail::tmat2x4< f64,
    -mediump > 
    mediump_f64mat2x4
     
    typedef mediump_f64mat3x3 mediump_f64mat3
     
    typedef detail::tmat3x2< f64,
    -mediump > 
    mediump_f64mat3x2
     
    typedef detail::tmat3x3< f64,
    -mediump > 
    mediump_f64mat3x3
     
    typedef detail::tmat3x4< f64,
    -mediump > 
    mediump_f64mat3x4
     
    typedef mediump_f64mat4x4 mediump_f64mat4
     
    typedef detail::tmat4x2< f64,
    -mediump > 
    mediump_f64mat4x2
     
    typedef detail::tmat4x3< f64,
    -mediump > 
    mediump_f64mat4x3
     
    typedef detail::tmat4x4< f64,
    -mediump > 
    mediump_f64mat4x4
     
    typedef detail::tquat< f64,
    -mediump > 
    mediump_f64quat
     
    typedef detail::tvec1< f64,
    -mediump > 
    mediump_f64vec1
     
    typedef detail::tvec2< f64,
    -mediump > 
    mediump_f64vec2
     
    typedef detail::tvec3< f64,
    -mediump > 
    mediump_f64vec3
     
    typedef detail::tvec4< f64,
    -mediump > 
    mediump_f64vec4
     
    typedef detail::float32 mediump_float32
     
    typedef detail::float32 mediump_float32_t
     
    typedef detail::float64 mediump_float64
     
    typedef detail::float64 mediump_float64_t
     
    typedef mediump_fmat2x2 mediump_fmat2
     
    typedef detail::tmat2x2< f32,
    -mediump > 
    mediump_fmat2x2
     
    typedef detail::tmat2x3< f32,
    -mediump > 
    mediump_fmat2x3
     
    typedef detail::tmat2x4< f32,
    -mediump > 
    mediump_fmat2x4
     
    typedef mediump_fmat3x3 mediump_fmat3
     
    typedef detail::tmat3x2< f32,
    -mediump > 
    mediump_fmat3x2
     
    typedef detail::tmat3x3< f32,
    -mediump > 
    mediump_fmat3x3
     
    typedef detail::tmat3x4< f32,
    -mediump > 
    mediump_fmat3x4
     
    typedef mediump_fmat4x4 mediump_fmat4
     
    typedef detail::tmat4x2< f32,
    -mediump > 
    mediump_fmat4x2
     
    typedef detail::tmat4x3< f32,
    -mediump > 
    mediump_fmat4x3
     
    typedef detail::tmat4x4< f32,
    -mediump > 
    mediump_fmat4x4
     
    typedef mediump_quat mediump_fquat
     
    typedef detail::tvec1< float,
    -mediump > 
    mediump_fvec1
     
    typedef detail::tvec2< float,
    -mediump > 
    mediump_fvec2
     
    typedef detail::tvec3< float,
    -mediump > 
    mediump_fvec3
     
    typedef detail::tvec4< float,
    -mediump > 
    mediump_fvec4
     
    typedef detail::int16 mediump_i16
     
    typedef detail::tvec1< i16,
    -mediump > 
    mediump_i16vec1
     
    typedef detail::tvec2< i16,
    -mediump > 
    mediump_i16vec2
     
    typedef detail::tvec3< i16,
    -mediump > 
    mediump_i16vec3
     
    typedef detail::tvec4< i16,
    -mediump > 
    mediump_i16vec4
     
    typedef detail::int32 mediump_i32
     
    typedef detail::tvec1< i32,
    -mediump > 
    mediump_i32vec1
     
    typedef detail::tvec2< i32,
    -mediump > 
    mediump_i32vec2
     
    typedef detail::tvec3< i32,
    -mediump > 
    mediump_i32vec3
     
    typedef detail::tvec4< i32,
    -mediump > 
    mediump_i32vec4
     
    typedef detail::int64 mediump_i64
     
    typedef detail::tvec1< i64,
    -mediump > 
    mediump_i64vec1
     
    typedef detail::tvec2< i64,
    -mediump > 
    mediump_i64vec2
     
    typedef detail::tvec3< i64,
    -mediump > 
    mediump_i64vec3
     
    typedef detail::tvec4< i64,
    -mediump > 
    mediump_i64vec4
     
    typedef detail::int8 mediump_i8
     
    typedef detail::tvec1< i8,
    -mediump > 
    mediump_i8vec1
     
    typedef detail::tvec2< i8,
    -mediump > 
    mediump_i8vec2
     
    typedef detail::tvec3< i8,
    -mediump > 
    mediump_i8vec3
     
    typedef detail::tvec4< i8,
    -mediump > 
    mediump_i8vec4
     
    typedef detail::int16 mediump_int16
     
    typedef detail::int16 mediump_int16_t
     
    typedef detail::int32 mediump_int32
     
    typedef detail::int32 mediump_int32_t
     
    typedef detail::int64 mediump_int64
     
    typedef detail::int64 mediump_int64_t
     
    typedef detail::int8 mediump_int8
     
    typedef detail::int8 mediump_int8_t
     
    typedef detail::tquat< float,
    -mediump > 
    mediump_quat
     
    typedef detail::uint16 mediump_u16
     
    typedef detail::tvec1< u16,
    -mediump > 
    mediump_u16vec1
     
    typedef detail::tvec2< u16,
    -mediump > 
    mediump_u16vec2
     
    typedef detail::tvec3< u16,
    -mediump > 
    mediump_u16vec3
     
    typedef detail::tvec4< u16,
    -mediump > 
    mediump_u16vec4
     
    typedef detail::uint32 mediump_u32
     
    typedef detail::tvec1< u32,
    -mediump > 
    mediump_u32vec1
     
    typedef detail::tvec2< u32,
    -mediump > 
    mediump_u32vec2
     
    typedef detail::tvec3< u32,
    -mediump > 
    mediump_u32vec3
     
    typedef detail::tvec4< u32,
    -mediump > 
    mediump_u32vec4
     
    typedef detail::uint64 mediump_u64
     
    typedef detail::tvec1< u64,
    -mediump > 
    mediump_u64vec1
     
    typedef detail::tvec2< u64,
    -mediump > 
    mediump_u64vec2
     
    typedef detail::tvec3< u64,
    -mediump > 
    mediump_u64vec3
     
    typedef detail::tvec4< u64,
    -mediump > 
    mediump_u64vec4
     
    typedef detail::uint8 mediump_u8
     
    typedef detail::tvec1< u8,
    -mediump > 
    mediump_u8vec1
     
    typedef detail::tvec2< u8,
    -mediump > 
    mediump_u8vec2
     
    typedef detail::tvec3< u8,
    -mediump > 
    mediump_u8vec3
     
    typedef detail::tvec4< u8,
    -mediump > 
    mediump_u8vec4
     
    typedef detail::uint16 mediump_uint16
     
    typedef detail::uint16 mediump_uint16_t
     
    typedef detail::uint32 mediump_uint32
     
    typedef detail::uint32 mediump_uint32_t
     
    typedef detail::uint64 mediump_uint64
     
    typedef detail::uint64 mediump_uint64_t
     
    typedef detail::uint8 mediump_uint8
     
    typedef detail::uint8 mediump_uint8_t
     
    typedef detail::tvec1< float,
    -mediump > 
    mediump_vec1
     
    -typedef highp_quat quat
     
    typedef detail::uint16 u16
     
    typedef highp_u16vec1 u16vec1
     
    typedef highp_u16vec2 u16vec2
     
    typedef highp_u16vec3 u16vec3
     
    typedef highp_u16vec4 u16vec4
     
    typedef detail::uint32 u32
     
    typedef highp_u32vec1 u32vec1
     
    typedef highp_u32vec2 u32vec2
     
    typedef highp_u32vec3 u32vec3
     
    typedef highp_u32vec4 u32vec4
     
    typedef detail::uint64 u64
     
    typedef highp_u64vec1 u64vec1
     
    typedef highp_u64vec2 u64vec2
     
    typedef highp_u64vec3 u64vec3
     
    typedef highp_u64vec4 u64vec4
     
    typedef detail::uint8 u8
     
    typedef highp_u8vec1 u8vec1
     
    typedef highp_u8vec2 u8vec2
     
    typedef highp_u8vec3 u8vec3
     
    typedef highp_u8vec4 u8vec4
     
    typedef detail::uint16 uint16_t
     
    typedef detail::uint32 uint32_t
     
    typedef detail::uint64 uint64_t
     
    typedef detail::uint8 uint8_t
     

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL bool leftHanded (tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool rightHanded (tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-03-30 / 2013-03-31
    -
    Author
    Christophe Riccio
    +

    GLM_GTX_handed_coordinate_space

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    -

    Definition in file fwd.hpp.

    +

    Definition in file handed_coordinate_space.hpp.

    diff --git a/doc/api/a00041_source.html b/doc/api/a00041_source.html index cfc889b2..86c46c0d 100644 --- a/doc/api/a00041_source.html +++ b/doc/api/a00041_source.html @@ -3,8 +3,8 @@ - -GLM: fwd.hpp Source File + +0.9.6: handed_coordinate_space.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,1951 +41,51 @@
    -
    fwd.hpp
    +
    handed_coordinate_space.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_FWD_INCLUDED
    -
    30 #define GLM_FWD_INCLUDED
    -
    31 
    -
    32 #include "detail/type_int.hpp"
    -
    33 #include "detail/type_float.hpp"
    -
    34 #include "detail/type_vec.hpp"
    -
    35 #include "detail/type_mat.hpp"
    -
    36 
    -
    38 // GLM_GTC_quaternion
    -
    39 namespace glm{
    -
    40 namespace detail
    -
    41 {
    -
    42  template <typename T, precision P> struct tquat;
    -
    43 }//namespace detail
    -
    44 
    -
    45 
    -
    49  typedef detail::tquat<float, lowp> lowp_quat;
    -
    50 
    -
    54  typedef detail::tquat<float, mediump> mediump_quat;
    -
    55 
    -
    59  typedef detail::tquat<float, highp> highp_quat;
    -
    60 
    -
    61 #if(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -
    62  typedef highp_quat quat;
    -
    63 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -
    64  typedef mediump_quat quat;
    -
    65 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
    -
    66  typedef lowp_quat quat;
    -
    67 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -
    68  typedef highp_quat quat;
    -
    70 #endif
    -
    71 
    - -
    76 
    - -
    81 
    - -
    86 
    -
    90  typedef quat fquat;
    -
    91 
    -
    92 
    -
    96  typedef detail::tquat<double, lowp> lowp_dquat;
    -
    97 
    -
    101  typedef detail::tquat<double, mediump> mediump_dquat;
    -
    102 
    -
    106  typedef detail::tquat<double, highp> highp_dquat;
    -
    107 
    -
    108 #if(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    109  typedef highp_dquat dquat;
    -
    110 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    111  typedef mediump_dquat dquat;
    -
    112 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    113  typedef lowp_dquat dquat;
    -
    114 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    115  typedef highp_dquat dquat;
    -
    119 #endif
    -
    120 
    -
    121 }//namespace glm
    -
    122 
    -
    124 // GLM_GTC_precision
    -
    125 namespace glm
    -
    126 {
    -
    129 
    -
    132  typedef detail::int8 lowp_int8;
    -
    133 
    -
    136  typedef detail::int16 lowp_int16;
    -
    137 
    -
    140  typedef detail::int32 lowp_int32;
    -
    141 
    -
    144  typedef detail::int64 lowp_int64;
    -
    145 
    -
    148  typedef detail::int8 lowp_int8_t;
    -
    149 
    -
    152  typedef detail::int16 lowp_int16_t;
    -
    153 
    -
    156  typedef detail::int32 lowp_int32_t;
    -
    157 
    -
    160  typedef detail::int64 lowp_int64_t;
    -
    161 
    -
    164  typedef detail::int8 lowp_i8;
    -
    165 
    -
    168  typedef detail::int16 lowp_i16;
    -
    169 
    -
    172  typedef detail::int32 lowp_i32;
    -
    173 
    -
    176  typedef detail::int64 lowp_i64;
    -
    177 
    -
    180  typedef detail::int8 mediump_int8;
    -
    181 
    -
    184  typedef detail::int16 mediump_int16;
    -
    185 
    -
    188  typedef detail::int32 mediump_int32;
    -
    189 
    -
    192  typedef detail::int64 mediump_int64;
    -
    193 
    -
    196  typedef detail::int8 mediump_int8_t;
    -
    197 
    -
    200  typedef detail::int16 mediump_int16_t;
    -
    201 
    -
    204  typedef detail::int32 mediump_int32_t;
    -
    205 
    -
    208  typedef detail::int64 mediump_int64_t;
    -
    209 
    -
    212  typedef detail::int8 mediump_i8;
    -
    213 
    -
    216  typedef detail::int16 mediump_i16;
    -
    217 
    -
    220  typedef detail::int32 mediump_i32;
    -
    221 
    -
    224  typedef detail::int64 mediump_i64;
    -
    225 
    -
    228  typedef detail::int8 highp_int8;
    -
    229 
    -
    232  typedef detail::int16 highp_int16;
    -
    233 
    -
    236  typedef detail::int32 highp_int32;
    -
    237 
    -
    240  typedef detail::int64 highp_int64;
    -
    241 
    -
    244  typedef detail::int8 highp_int8_t;
    -
    245 
    -
    248  typedef detail::int16 highp_int16_t;
    -
    249 
    -
    252  typedef detail::int32 highp_int32_t;
    -
    253 
    -
    256  typedef detail::int64 highp_int64_t;
    -
    257 
    -
    260  typedef detail::int8 highp_i8;
    -
    261 
    -
    264  typedef detail::int16 highp_i16;
    -
    265 
    -
    268  typedef detail::int32 highp_i32;
    -
    269 
    -
    272  typedef detail::int64 highp_i64;
    -
    273 
    -
    274 
    -
    277  typedef detail::int8 int8;
    -
    278 
    -
    281  typedef detail::int16 int16;
    -
    282 
    -
    285  typedef detail::int32 int32;
    -
    286 
    -
    289  typedef detail::int64 int64;
    -
    290 
    -
    293  typedef detail::int8 int8_t;
    -
    294 
    -
    297  typedef detail::int16 int16_t;
    -
    298 
    -
    301  typedef detail::int32 int32_t;
    -
    302 
    -
    305  typedef detail::int64 int64_t;
    -
    306 
    -
    309  typedef detail::int8 i8;
    -
    310 
    -
    313  typedef detail::int16 i16;
    -
    314 
    -
    317  typedef detail::int32 i32;
    -
    318 
    -
    321  typedef detail::int64 i64;
    -
    322 
    -
    323 
    -
    324 
    -
    327  typedef detail::tvec1<i8, lowp> lowp_i8vec1;
    -
    328 
    -
    331  typedef detail::tvec2<i8, lowp> lowp_i8vec2;
    -
    332 
    -
    335  typedef detail::tvec3<i8, lowp> lowp_i8vec3;
    -
    336 
    -
    339  typedef detail::tvec4<i8, lowp> lowp_i8vec4;
    -
    340 
    -
    341 
    -
    344  typedef detail::tvec1<i8, mediump> mediump_i8vec1;
    -
    345 
    -
    348  typedef detail::tvec2<i8, mediump> mediump_i8vec2;
    -
    349 
    -
    352  typedef detail::tvec3<i8, mediump> mediump_i8vec3;
    -
    353 
    -
    356  typedef detail::tvec4<i8, mediump> mediump_i8vec4;
    -
    357 
    -
    358 
    -
    361  typedef detail::tvec1<i8, highp> highp_i8vec1;
    -
    362 
    -
    365  typedef detail::tvec2<i8, highp> highp_i8vec2;
    -
    366 
    -
    369  typedef detail::tvec3<i8, highp> highp_i8vec3;
    -
    370 
    -
    373  typedef detail::tvec4<i8, highp> highp_i8vec4;
    -
    374 
    -
    375 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    376  typedef lowp_i8vec1 i8vec1;
    -
    377  typedef lowp_i8vec2 i8vec2;
    -
    378  typedef lowp_i8vec3 i8vec3;
    -
    379  typedef lowp_i8vec4 i8vec4;
    -
    380 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    381  typedef mediump_i8vec1 i8vec1;
    -
    382  typedef mediump_i8vec2 i8vec2;
    -
    383  typedef mediump_i8vec3 i8vec3;
    -
    384  typedef mediump_i8vec4 i8vec4;
    -
    385 #else
    -
    386  typedef highp_i8vec1 i8vec1;
    -
    389 
    - -
    393 
    - -
    397 
    - -
    401 #endif
    -
    402 
    -
    403 
    -
    406  typedef detail::tvec1<i16, lowp> lowp_i16vec1;
    -
    407 
    -
    410  typedef detail::tvec2<i16, lowp> lowp_i16vec2;
    -
    411 
    -
    414  typedef detail::tvec3<i16, lowp> lowp_i16vec3;
    -
    415 
    -
    418  typedef detail::tvec4<i16, lowp> lowp_i16vec4;
    -
    419 
    -
    420 
    -
    423  typedef detail::tvec1<i16, mediump> mediump_i16vec1;
    -
    424 
    -
    427  typedef detail::tvec2<i16, mediump> mediump_i16vec2;
    -
    428 
    -
    431  typedef detail::tvec3<i16, mediump> mediump_i16vec3;
    -
    432 
    -
    435  typedef detail::tvec4<i16, mediump> mediump_i16vec4;
    -
    436 
    -
    437 
    -
    440  typedef detail::tvec1<i16, highp> highp_i16vec1;
    -
    441 
    -
    444  typedef detail::tvec2<i16, highp> highp_i16vec2;
    -
    445 
    -
    448  typedef detail::tvec3<i16, highp> highp_i16vec3;
    -
    449 
    -
    452  typedef detail::tvec4<i16, highp> highp_i16vec4;
    -
    453 
    -
    454 
    -
    455 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    456  typedef lowp_i16vec1 i16vec1;
    -
    457  typedef lowp_i16vec2 i16vec2;
    -
    458  typedef lowp_i16vec3 i16vec3;
    -
    459  typedef lowp_i16vec4 i16vec4;
    -
    460 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    461  typedef mediump_i16vec1 i16vec1;
    -
    462  typedef mediump_i16vec2 i16vec2;
    -
    463  typedef mediump_i16vec3 i16vec3;
    -
    464  typedef mediump_i16vec4 i16vec4;
    -
    465 #else
    -
    466  typedef highp_i16vec1 i16vec1;
    -
    469 
    - -
    473 
    - -
    477 
    - -
    481 #endif
    -
    482 
    -
    483 
    -
    486  typedef detail::tvec1<i32, lowp> lowp_i32vec1;
    -
    487 
    -
    490  typedef detail::tvec2<i32, lowp> lowp_i32vec2;
    -
    491 
    -
    494  typedef detail::tvec3<i32, lowp> lowp_i32vec3;
    -
    495 
    -
    498  typedef detail::tvec4<i32, lowp> lowp_i32vec4;
    -
    499 
    -
    500 
    -
    503  typedef detail::tvec1<i32, mediump> mediump_i32vec1;
    -
    504 
    -
    507  typedef detail::tvec2<i32, mediump> mediump_i32vec2;
    -
    508 
    -
    511  typedef detail::tvec3<i32, mediump> mediump_i32vec3;
    -
    512 
    -
    515  typedef detail::tvec4<i32, mediump> mediump_i32vec4;
    -
    516 
    -
    517 
    -
    520  typedef detail::tvec1<i32, highp> highp_i32vec1;
    -
    521 
    -
    524  typedef detail::tvec2<i32, highp> highp_i32vec2;
    -
    525 
    -
    528  typedef detail::tvec3<i32, highp> highp_i32vec3;
    -
    529 
    -
    532  typedef detail::tvec4<i32, highp> highp_i32vec4;
    -
    533 
    -
    534 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    535  typedef lowp_i32vec1 i32vec1;
    -
    536  typedef lowp_i32vec2 i32vec2;
    -
    537  typedef lowp_i32vec3 i32vec3;
    -
    538  typedef lowp_i32vec4 i32vec4;
    -
    539 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    540  typedef mediump_i32vec1 i32vec1;
    -
    541  typedef mediump_i32vec2 i32vec2;
    -
    542  typedef mediump_i32vec3 i32vec3;
    -
    543  typedef mediump_i32vec4 i32vec4;
    -
    544 #else
    -
    545  typedef highp_i32vec1 i32vec1;
    -
    548 
    - -
    552 
    - -
    556 
    - -
    560 #endif
    -
    561 
    -
    562 
    -
    565  typedef detail::tvec1<i32, lowp> lowp_i32vec1;
    -
    566 
    -
    569  typedef detail::tvec2<i32, lowp> lowp_i32vec2;
    -
    570 
    -
    573  typedef detail::tvec3<i32, lowp> lowp_i32vec3;
    -
    574 
    -
    577  typedef detail::tvec4<i32, lowp> lowp_i32vec4;
    -
    578 
    -
    579 
    -
    582  typedef detail::tvec1<i32, mediump> mediump_i32vec1;
    -
    583 
    -
    586  typedef detail::tvec2<i32, mediump> mediump_i32vec2;
    -
    587 
    -
    590  typedef detail::tvec3<i32, mediump> mediump_i32vec3;
    -
    591 
    -
    594  typedef detail::tvec4<i32, mediump> mediump_i32vec4;
    -
    595 
    -
    596 
    -
    599  typedef detail::tvec1<i32, highp> highp_i32vec1;
    -
    600 
    -
    603  typedef detail::tvec2<i32, highp> highp_i32vec2;
    -
    604 
    -
    607  typedef detail::tvec3<i32, highp> highp_i32vec3;
    -
    608 
    -
    611  typedef detail::tvec4<i32, highp> highp_i32vec4;
    -
    612 
    -
    613 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    614  typedef lowp_i32vec1 i32vec1;
    -
    615  typedef lowp_i32vec2 i32vec2;
    -
    616  typedef lowp_i32vec3 i32vec3;
    -
    617  typedef lowp_i32vec4 i32vec4;
    -
    618 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    619  typedef mediump_i32vec1 i32vec1;
    -
    620  typedef mediump_i32vec2 i32vec2;
    -
    621  typedef mediump_i32vec3 i32vec3;
    -
    622  typedef mediump_i32vec4 i32vec4;
    -
    623 #else
    -
    624  typedef highp_i32vec1 i32vec1;
    -
    627 
    -
    630  typedef highp_i32vec2 i32vec2;
    -
    631 
    -
    634  typedef highp_i32vec3 i32vec3;
    -
    635 
    -
    638  typedef highp_i32vec4 i32vec4;
    -
    639 #endif
    -
    640 
    -
    641 
    -
    642 
    -
    645  typedef detail::tvec1<i64, lowp> lowp_i64vec1;
    -
    646 
    -
    649  typedef detail::tvec2<i64, lowp> lowp_i64vec2;
    -
    650 
    -
    653  typedef detail::tvec3<i64, lowp> lowp_i64vec3;
    -
    654 
    -
    657  typedef detail::tvec4<i64, lowp> lowp_i64vec4;
    -
    658 
    -
    659 
    -
    662  typedef detail::tvec1<i64, mediump> mediump_i64vec1;
    -
    663 
    -
    666  typedef detail::tvec2<i64, mediump> mediump_i64vec2;
    -
    667 
    -
    670  typedef detail::tvec3<i64, mediump> mediump_i64vec3;
    -
    671 
    -
    674  typedef detail::tvec4<i64, mediump> mediump_i64vec4;
    -
    675 
    -
    676 
    -
    679  typedef detail::tvec1<i64, highp> highp_i64vec1;
    -
    680 
    -
    683  typedef detail::tvec2<i64, highp> highp_i64vec2;
    -
    684 
    -
    687  typedef detail::tvec3<i64, highp> highp_i64vec3;
    -
    688 
    -
    691  typedef detail::tvec4<i64, highp> highp_i64vec4;
    -
    692 
    -
    693 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    694  typedef lowp_i64vec1 i64vec1;
    -
    695  typedef lowp_i64vec2 i64vec2;
    -
    696  typedef lowp_i64vec3 i64vec3;
    -
    697  typedef lowp_i64vec4 i64vec4;
    -
    698 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    699  typedef mediump_i64vec1 i64vec1;
    -
    700  typedef mediump_i64vec2 i64vec2;
    -
    701  typedef mediump_i64vec3 i64vec3;
    -
    702  typedef mediump_i64vec4 i64vec4;
    -
    703 #else
    -
    704  typedef highp_i64vec1 i64vec1;
    -
    707 
    - -
    711 
    - -
    715 
    - -
    719 #endif
    -
    720 
    -
    721 
    -
    723  // Unsigned int vector types
    -
    724 
    -
    727  typedef detail::uint8 lowp_uint8;
    -
    728 
    -
    731  typedef detail::uint16 lowp_uint16;
    -
    732 
    -
    735  typedef detail::uint32 lowp_uint32;
    -
    736 
    -
    739  typedef detail::uint64 lowp_uint64;
    -
    740 
    -
    741 
    -
    744  typedef detail::uint8 lowp_uint8_t;
    -
    745 
    -
    748  typedef detail::uint16 lowp_uint16_t;
    -
    749 
    -
    752  typedef detail::uint32 lowp_uint32_t;
    -
    753 
    -
    756  typedef detail::uint64 lowp_uint64_t;
    -
    757 
    -
    758 
    -
    761  typedef detail::uint8 lowp_u8;
    -
    762 
    -
    765  typedef detail::uint16 lowp_u16;
    -
    766 
    -
    769  typedef detail::uint32 lowp_u32;
    -
    770 
    -
    773  typedef detail::uint64 lowp_u64;
    -
    774 
    -
    775 
    -
    776 
    -
    779  typedef detail::uint8 mediump_uint8;
    -
    780 
    -
    783  typedef detail::uint16 mediump_uint16;
    -
    784 
    -
    787  typedef detail::uint32 mediump_uint32;
    -
    788 
    -
    791  typedef detail::uint64 mediump_uint64;
    -
    792 
    -
    795  typedef detail::uint8 mediump_uint8_t;
    -
    796 
    -
    799  typedef detail::uint16 mediump_uint16_t;
    -
    800 
    -
    803  typedef detail::uint32 mediump_uint32_t;
    -
    804 
    -
    807  typedef detail::uint64 mediump_uint64_t;
    -
    808 
    -
    811  typedef detail::uint8 mediump_u8;
    -
    812 
    -
    815  typedef detail::uint16 mediump_u16;
    -
    816 
    -
    819  typedef detail::uint32 mediump_u32;
    -
    820 
    -
    823  typedef detail::uint64 mediump_u64;
    -
    824 
    -
    825 
    -
    826 
    -
    829  typedef detail::uint8 highp_uint8;
    -
    830 
    -
    833  typedef detail::uint16 highp_uint16;
    -
    834 
    -
    837  typedef detail::uint32 highp_uint32;
    -
    838 
    -
    841  typedef detail::uint64 highp_uint64;
    -
    842 
    -
    845  typedef detail::uint8 highp_uint8_t;
    -
    846 
    -
    849  typedef detail::uint16 highp_uint16_t;
    -
    850 
    -
    853  typedef detail::uint32 highp_uint32_t;
    -
    854 
    -
    857  typedef detail::uint64 highp_uint64_t;
    -
    858 
    -
    861  typedef detail::uint8 highp_u8;
    -
    862 
    -
    865  typedef detail::uint16 highp_u16;
    -
    866 
    -
    869  typedef detail::uint32 highp_u32;
    -
    870 
    -
    873  typedef detail::uint64 highp_u64;
    -
    874 
    -
    875 
    -
    876 
    -
    879  typedef detail::uint8 uint8;
    -
    880 
    -
    883  typedef detail::uint16 uint16;
    -
    884 
    -
    887  typedef detail::uint32 uint32;
    -
    888 
    -
    891  typedef detail::uint64 uint64;
    -
    892 
    -
    895  typedef detail::uint8 uint8_t;
    -
    896 
    -
    899  typedef detail::uint16 uint16_t;
    -
    900 
    -
    903  typedef detail::uint32 uint32_t;
    -
    904 
    -
    907  typedef detail::uint64 uint64_t;
    -
    908 
    -
    911  typedef detail::uint8 u8;
    -
    912 
    -
    915  typedef detail::uint16 u16;
    -
    916 
    -
    919  typedef detail::uint32 u32;
    -
    920 
    -
    923  typedef detail::uint64 u64;
    -
    924 
    -
    925 
    -
    926 
    -
    927 
    -
    930  typedef detail::tvec1<u8, lowp> lowp_u8vec1;
    -
    931 
    -
    934  typedef detail::tvec2<u8, lowp> lowp_u8vec2;
    -
    935 
    -
    938  typedef detail::tvec3<u8, lowp> lowp_u8vec3;
    -
    939 
    -
    942  typedef detail::tvec4<u8, lowp> lowp_u8vec4;
    -
    943 
    -
    944 
    -
    947  typedef detail::tvec1<u8, mediump> mediump_u8vec1;
    -
    948 
    -
    951  typedef detail::tvec2<u8, mediump> mediump_u8vec2;
    -
    952 
    -
    955  typedef detail::tvec3<u8, mediump> mediump_u8vec3;
    -
    956 
    -
    959  typedef detail::tvec4<u8, mediump> mediump_u8vec4;
    -
    960 
    -
    961 
    -
    964  typedef detail::tvec1<u8, highp> highp_u8vec1;
    -
    965 
    -
    968  typedef detail::tvec2<u8, highp> highp_u8vec2;
    -
    969 
    -
    972  typedef detail::tvec3<u8, highp> highp_u8vec3;
    -
    973 
    -
    976  typedef detail::tvec4<u8, highp> highp_u8vec4;
    -
    977 
    -
    978 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    979  typedef lowp_u8vec1 u8vec1;
    -
    980  typedef lowp_u8vec2 u8vec2;
    -
    981  typedef lowp_u8vec3 u8vec3;
    -
    982  typedef lowp_u8vec4 u8vec4;
    -
    983 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    984  typedef mediump_u8vec1 u8vec1;
    -
    985  typedef mediump_u8vec2 u8vec2;
    -
    986  typedef mediump_u8vec3 u8vec3;
    -
    987  typedef mediump_u8vec4 u8vec4;
    -
    988 #else
    -
    989  typedef highp_u8vec1 u8vec1;
    -
    992 
    - -
    996 
    - -
    1000 
    - -
    1004 #endif
    -
    1005 
    -
    1006 
    -
    1009  typedef detail::tvec1<u16, lowp> lowp_u16vec1;
    -
    1010 
    -
    1013  typedef detail::tvec2<u16, lowp> lowp_u16vec2;
    -
    1014 
    -
    1017  typedef detail::tvec3<u16, lowp> lowp_u16vec3;
    -
    1018 
    -
    1021  typedef detail::tvec4<u16, lowp> lowp_u16vec4;
    -
    1022 
    -
    1023 
    -
    1026  typedef detail::tvec1<u16, mediump> mediump_u16vec1;
    -
    1027 
    -
    1030  typedef detail::tvec2<u16, mediump> mediump_u16vec2;
    -
    1031 
    -
    1034  typedef detail::tvec3<u16, mediump> mediump_u16vec3;
    -
    1035 
    -
    1038  typedef detail::tvec4<u16, mediump> mediump_u16vec4;
    -
    1039 
    -
    1040 
    -
    1043  typedef detail::tvec1<u16, highp> highp_u16vec1;
    -
    1044 
    -
    1047  typedef detail::tvec2<u16, highp> highp_u16vec2;
    -
    1048 
    -
    1051  typedef detail::tvec3<u16, highp> highp_u16vec3;
    -
    1052 
    -
    1055  typedef detail::tvec4<u16, highp> highp_u16vec4;
    -
    1056 
    -
    1057 
    -
    1058 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    1059  typedef lowp_u16vec1 u16vec1;
    -
    1060  typedef lowp_u16vec2 u16vec2;
    -
    1061  typedef lowp_u16vec3 u16vec3;
    -
    1062  typedef lowp_u16vec4 u16vec4;
    -
    1063 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    1064  typedef mediump_u16vec1 u16vec1;
    -
    1065  typedef mediump_u16vec2 u16vec2;
    -
    1066  typedef mediump_u16vec3 u16vec3;
    -
    1067  typedef mediump_u16vec4 u16vec4;
    -
    1068 #else
    -
    1069  typedef highp_u16vec1 u16vec1;
    -
    1072 
    - -
    1076 
    - -
    1080 
    - -
    1084 #endif
    -
    1085 
    -
    1086 
    -
    1089  typedef detail::tvec1<u32, lowp> lowp_u32vec1;
    -
    1090 
    -
    1093  typedef detail::tvec2<u32, lowp> lowp_u32vec2;
    -
    1094 
    -
    1097  typedef detail::tvec3<u32, lowp> lowp_u32vec3;
    -
    1098 
    -
    1101  typedef detail::tvec4<u32, lowp> lowp_u32vec4;
    -
    1102 
    -
    1103 
    -
    1106  typedef detail::tvec1<u32, mediump> mediump_u32vec1;
    -
    1107 
    -
    1110  typedef detail::tvec2<u32, mediump> mediump_u32vec2;
    -
    1111 
    -
    1114  typedef detail::tvec3<u32, mediump> mediump_u32vec3;
    -
    1115 
    -
    1118  typedef detail::tvec4<u32, mediump> mediump_u32vec4;
    -
    1119 
    -
    1120 
    -
    1123  typedef detail::tvec1<u32, highp> highp_u32vec1;
    -
    1124 
    -
    1127  typedef detail::tvec2<u32, highp> highp_u32vec2;
    -
    1128 
    -
    1131  typedef detail::tvec3<u32, highp> highp_u32vec3;
    -
    1132 
    -
    1135  typedef detail::tvec4<u32, highp> highp_u32vec4;
    -
    1136 
    -
    1137 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    1138  typedef lowp_u32vec1 u32vec1;
    -
    1139  typedef lowp_u32vec2 u32vec2;
    -
    1140  typedef lowp_u32vec3 u32vec3;
    -
    1141  typedef lowp_u32vec4 u32vec4;
    -
    1142 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    1143  typedef mediump_u32vec1 u32vec1;
    -
    1144  typedef mediump_u32vec2 u32vec2;
    -
    1145  typedef mediump_u32vec3 u32vec3;
    -
    1146  typedef mediump_u32vec4 u32vec4;
    -
    1147 #else
    -
    1148  typedef highp_u32vec1 u32vec1;
    -
    1151 
    - -
    1155 
    - -
    1159 
    - -
    1163 #endif
    -
    1164 
    -
    1165 
    -
    1168  typedef detail::tvec1<u32, lowp> lowp_u32vec1;
    -
    1169 
    -
    1172  typedef detail::tvec2<u32, lowp> lowp_u32vec2;
    -
    1173 
    -
    1176  typedef detail::tvec3<u32, lowp> lowp_u32vec3;
    -
    1177 
    -
    1180  typedef detail::tvec4<u32, lowp> lowp_u32vec4;
    -
    1181 
    -
    1182 
    -
    1185  typedef detail::tvec1<u32, mediump> mediump_u32vec1;
    -
    1186 
    -
    1189  typedef detail::tvec2<u32, mediump> mediump_u32vec2;
    -
    1190 
    -
    1193  typedef detail::tvec3<u32, mediump> mediump_u32vec3;
    -
    1194 
    -
    1197  typedef detail::tvec4<u32, mediump> mediump_u32vec4;
    -
    1198 
    -
    1199 
    -
    1202  typedef detail::tvec1<u32, highp> highp_u32vec1;
    -
    1203 
    -
    1206  typedef detail::tvec2<u32, highp> highp_u32vec2;
    -
    1207 
    -
    1210  typedef detail::tvec3<u32, highp> highp_u32vec3;
    -
    1211 
    -
    1214  typedef detail::tvec4<u32, highp> highp_u32vec4;
    -
    1215 
    -
    1216 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    1217  typedef lowp_u32vec1 u32vec1;
    -
    1218  typedef lowp_u32vec2 u32vec2;
    -
    1219  typedef lowp_u32vec3 u32vec3;
    -
    1220  typedef lowp_u32vec4 u32vec4;
    -
    1221 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    1222  typedef mediump_u32vec1 u32vec1;
    -
    1223  typedef mediump_u32vec2 u32vec2;
    -
    1224  typedef mediump_u32vec3 u32vec3;
    -
    1225  typedef mediump_u32vec4 u32vec4;
    -
    1226 #else
    -
    1227  typedef highp_u32vec1 u32vec1;
    -
    1230 
    -
    1233  typedef highp_u32vec2 u32vec2;
    -
    1234 
    -
    1237  typedef highp_u32vec3 u32vec3;
    -
    1238 
    -
    1241  typedef highp_u32vec4 u32vec4;
    -
    1242 #endif
    -
    1243 
    -
    1244 
    -
    1245 
    -
    1248  typedef detail::tvec1<u64, lowp> lowp_u64vec1;
    -
    1249 
    -
    1252  typedef detail::tvec2<u64, lowp> lowp_u64vec2;
    -
    1253 
    -
    1256  typedef detail::tvec3<u64, lowp> lowp_u64vec3;
    -
    1257 
    -
    1260  typedef detail::tvec4<u64, lowp> lowp_u64vec4;
    -
    1261 
    -
    1262 
    -
    1265  typedef detail::tvec1<u64, mediump> mediump_u64vec1;
    -
    1266 
    -
    1269  typedef detail::tvec2<u64, mediump> mediump_u64vec2;
    -
    1270 
    -
    1273  typedef detail::tvec3<u64, mediump> mediump_u64vec3;
    -
    1274 
    -
    1277  typedef detail::tvec4<u64, mediump> mediump_u64vec4;
    -
    1278 
    -
    1279 
    -
    1282  typedef detail::tvec1<u64, highp> highp_u64vec1;
    -
    1283 
    -
    1286  typedef detail::tvec2<u64, highp> highp_u64vec2;
    -
    1287 
    -
    1290  typedef detail::tvec3<u64, highp> highp_u64vec3;
    -
    1291 
    -
    1294  typedef detail::tvec4<u64, highp> highp_u64vec4;
    -
    1295 
    -
    1296 #if(defined(GLM_PRECISION_LOWP_UINT))
    -
    1297  typedef lowp_u64vec1 u64vec1;
    -
    1298  typedef lowp_u64vec2 u64vec2;
    -
    1299  typedef lowp_u64vec3 u64vec3;
    -
    1300  typedef lowp_u64vec4 u64vec4;
    -
    1301 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    -
    1302  typedef mediump_u64vec1 u64vec1;
    -
    1303  typedef mediump_u64vec2 u64vec2;
    -
    1304  typedef mediump_u64vec3 u64vec3;
    -
    1305  typedef mediump_u64vec4 u64vec4;
    -
    1306 #else
    -
    1307  typedef highp_u64vec1 u64vec1;
    -
    1310 
    - -
    1314 
    - -
    1318 
    - -
    1322 #endif
    -
    1323 
    -
    1324 
    -
    1326  // Float vector types
    -
    1327 
    -
    1330  typedef detail::float32 lowp_float32;
    -
    1331 
    -
    1334  typedef detail::float64 lowp_float64;
    -
    1335 
    -
    1338  typedef detail::float32 lowp_float32_t;
    -
    1339 
    -
    1342  typedef detail::float64 lowp_float64_t;
    -
    1343 
    - -
    1347 
    - -
    1351 
    -
    1354  typedef detail::float32 lowp_float32;
    -
    1355 
    -
    1358  typedef detail::float64 lowp_float64;
    -
    1359 
    -
    1362  typedef detail::float32 lowp_float32_t;
    -
    1363 
    -
    1366  typedef detail::float64 lowp_float64_t;
    -
    1367 
    -
    1370  typedef float32 lowp_f32;
    -
    1371 
    -
    1374  typedef float64 lowp_f64;
    -
    1375 
    -
    1376 
    -
    1379  typedef detail::float32 lowp_float32;
    -
    1380 
    -
    1383  typedef detail::float64 lowp_float64;
    -
    1384 
    -
    1387  typedef detail::float32 lowp_float32_t;
    -
    1388 
    -
    1391  typedef detail::float64 lowp_float64_t;
    -
    1392 
    -
    1395  typedef float32 lowp_f32;
    -
    1396 
    -
    1399  typedef float64 lowp_f64;
    -
    1400 
    -
    1401 
    -
    1404  typedef detail::float32 mediump_float32;
    -
    1405 
    -
    1408  typedef detail::float64 mediump_float64;
    -
    1409 
    -
    1412  typedef detail::float32 mediump_float32_t;
    -
    1413 
    -
    1416  typedef detail::float64 mediump_float64_t;
    -
    1417 
    - -
    1421 
    - -
    1425 
    -
    1426 
    -
    1429  typedef detail::float32 highp_float32;
    -
    1430 
    -
    1433  typedef detail::float64 highp_float64;
    -
    1434 
    -
    1437  typedef detail::float32 highp_float32_t;
    -
    1438 
    -
    1441  typedef detail::float64 highp_float64_t;
    -
    1442 
    - -
    1446 
    - -
    1450 
    -
    1451 
    -
    1452 #if(defined(GLM_PRECISION_LOWP_FLOAT))
    -
    1453  typedef lowp_float32 float32;
    -
    1456 
    -
    1459  typedef lowp_float64 float64;
    -
    1460 
    -
    1463  typedef lowp_float32_t float32_t;
    -
    1464 
    -
    1467  typedef lowp_float64_t float64_t;
    -
    1468 
    -
    1471  typedef lowp_f32 f32;
    -
    1472 
    -
    1475  typedef lowp_f64 f64;
    -
    1476 
    -
    1477 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    -
    1478 
    -
    1481  typedef mediump_float32 float32;
    -
    1482 
    -
    1485  typedef mediump_float64 float64;
    -
    1486 
    -
    1489  typedef mediump_float32 float32_t;
    -
    1490 
    -
    1493  typedef mediump_float64 float64_t;
    -
    1494 
    -
    1497  typedef mediump_float32 f32;
    -
    1498 
    -
    1501  typedef mediump_float64 f64;
    -
    1502 
    -
    1503 #else//(defined(GLM_PRECISION_HIGHP_FLOAT))
    -
    1504 
    -
    1507  typedef highp_float32 float32;
    -
    1508 
    -
    1511  typedef highp_float64 float64;
    -
    1512 
    - -
    1516 
    - -
    1520 
    - -
    1524 
    - -
    1528 #endif
    -
    1529 
    -
    1530 
    -
    1533  typedef detail::tvec1<float, lowp> lowp_vec1;
    -
    1534 
    -
    1537  typedef detail::tvec2<float, lowp> lowp_vec2;
    -
    1538 
    -
    1541  typedef detail::tvec3<float, lowp> lowp_vec3;
    -
    1542 
    -
    1545  typedef detail::tvec4<float, lowp> lowp_vec4;
    -
    1546 
    -
    1549  typedef detail::tvec1<float, lowp> lowp_fvec1;
    -
    1550 
    -
    1553  typedef detail::tvec2<float, lowp> lowp_fvec2;
    -
    1554 
    -
    1557  typedef detail::tvec3<float, lowp> lowp_fvec3;
    -
    1558 
    -
    1561  typedef detail::tvec4<float, lowp> lowp_fvec4;
    -
    1562 
    -
    1563 
    -
    1564 
    -
    1567  typedef detail::tvec1<float, mediump> mediump_vec1;
    -
    1568 
    -
    1571  typedef detail::tvec2<float, mediump> mediump_vec2;
    -
    1572 
    -
    1575  typedef detail::tvec3<float, mediump> mediump_vec3;
    -
    1576 
    -
    1579  typedef detail::tvec4<float, mediump> mediump_vec4;
    -
    1580 
    -
    1583  typedef detail::tvec1<float, mediump> mediump_fvec1;
    -
    1584 
    -
    1587  typedef detail::tvec2<float, mediump> mediump_fvec2;
    -
    1588 
    -
    1591  typedef detail::tvec3<float, mediump> mediump_fvec3;
    -
    1592 
    -
    1595  typedef detail::tvec4<float, mediump> mediump_fvec4;
    -
    1596 
    -
    1597 
    -
    1598 
    -
    1601  typedef detail::tvec1<float, highp> highp_vec1;
    -
    1602 
    -
    1605  typedef detail::tvec2<float, highp> highp_vec2;
    -
    1606 
    -
    1609  typedef detail::tvec3<float, highp> highp_vec3;
    -
    1610 
    -
    1613  typedef detail::tvec4<float, highp> highp_vec4;
    -
    1614 
    -
    1617  typedef detail::tvec1<float, highp> highp_fvec1;
    -
    1618 
    -
    1621  typedef detail::tvec2<float, highp> highp_fvec2;
    -
    1622 
    -
    1625  typedef detail::tvec3<float, highp> highp_fvec3;
    -
    1626 
    -
    1629  typedef detail::tvec4<float, highp> highp_fvec4;
    -
    1630 
    -
    1631 
    -
    1634  typedef detail::tvec1<f32, lowp> lowp_f32vec1;
    -
    1635 
    -
    1638  typedef detail::tvec2<f32, lowp> lowp_f32vec2;
    -
    1639 
    -
    1642  typedef detail::tvec3<f32, lowp> lowp_f32vec3;
    -
    1643 
    -
    1646  typedef detail::tvec4<f32, lowp> lowp_f32vec4;
    -
    1647 
    -
    1650  typedef detail::tvec1<f32, mediump> mediump_f32vec1;
    -
    1651 
    -
    1654  typedef detail::tvec2<f32, mediump> mediump_f32vec2;
    -
    1655 
    -
    1658  typedef detail::tvec3<f32, mediump> mediump_f32vec3;
    -
    1659 
    -
    1662  typedef detail::tvec4<f32, mediump> mediump_f32vec4;
    -
    1663 
    -
    1666  typedef detail::tvec1<f32, highp> highp_f32vec1;
    -
    1667 
    -
    1670  typedef detail::tvec2<f32, highp> highp_f32vec2;
    -
    1671 
    -
    1674  typedef detail::tvec3<f32, highp> highp_f32vec3;
    -
    1675 
    -
    1678  typedef detail::tvec4<f32, highp> highp_f32vec4;
    -
    1679 
    -
    1680 
    -
    1683  typedef detail::tvec1<f64, lowp> lowp_f64vec1;
    -
    1684 
    -
    1687  typedef detail::tvec2<f64, lowp> lowp_f64vec2;
    -
    1688 
    -
    1691  typedef detail::tvec3<f64, lowp> lowp_f64vec3;
    -
    1692 
    -
    1695  typedef detail::tvec4<f64, lowp> lowp_f64vec4;
    -
    1696 
    -
    1699  typedef detail::tvec1<f64, mediump> mediump_f64vec1;
    -
    1700 
    -
    1703  typedef detail::tvec2<f64, mediump> mediump_f64vec2;
    -
    1704 
    -
    1707  typedef detail::tvec3<f64, mediump> mediump_f64vec3;
    -
    1708 
    -
    1711  typedef detail::tvec4<f64, mediump> mediump_f64vec4;
    -
    1712 
    -
    1715  typedef detail::tvec1<f64, highp> highp_f64vec1;
    -
    1716 
    -
    1719  typedef detail::tvec2<f64, highp> highp_f64vec2;
    -
    1720 
    -
    1723  typedef detail::tvec3<f64, highp> highp_f64vec3;
    -
    1724 
    -
    1727  typedef detail::tvec4<f64, highp> highp_f64vec4;
    -
    1728 
    -
    1729 
    -
    1731  // Float matrix types
    -
    1732 
    -
    1735  //typedef lowp_f32 lowp_fmat1x1;
    -
    1736 
    -
    1739  typedef detail::tmat2x2<f32, lowp> lowp_fmat2x2;
    -
    1740 
    -
    1743  typedef detail::tmat2x3<f32, lowp> lowp_fmat2x3;
    -
    1744 
    -
    1747  typedef detail::tmat2x4<f32, lowp> lowp_fmat2x4;
    -
    1748 
    -
    1751  typedef detail::tmat3x2<f32, lowp> lowp_fmat3x2;
    -
    1752 
    -
    1755  typedef detail::tmat3x3<f32, lowp> lowp_fmat3x3;
    -
    1756 
    -
    1759  typedef detail::tmat3x4<f32, lowp> lowp_fmat3x4;
    -
    1760 
    -
    1763  typedef detail::tmat4x2<f32, lowp> lowp_fmat4x2;
    -
    1764 
    -
    1767  typedef detail::tmat4x3<f32, lowp> lowp_fmat4x3;
    -
    1768 
    -
    1771  typedef detail::tmat4x4<f32, lowp> lowp_fmat4x4;
    -
    1772 
    -
    1775  //typedef lowp_fmat1x1 lowp_fmat1;
    -
    1776 
    - -
    1780 
    - -
    1784 
    - -
    1788 
    -
    1789 
    -
    1792  //typedef mediump_f32 mediump_fmat1x1;
    -
    1793 
    -
    1796  typedef detail::tmat2x2<f32, mediump> mediump_fmat2x2;
    -
    1797 
    -
    1800  typedef detail::tmat2x3<f32, mediump> mediump_fmat2x3;
    -
    1801 
    -
    1804  typedef detail::tmat2x4<f32, mediump> mediump_fmat2x4;
    -
    1805 
    -
    1808  typedef detail::tmat3x2<f32, mediump> mediump_fmat3x2;
    -
    1809 
    -
    1812  typedef detail::tmat3x3<f32, mediump> mediump_fmat3x3;
    -
    1813 
    -
    1816  typedef detail::tmat3x4<f32, mediump> mediump_fmat3x4;
    -
    1817 
    -
    1820  typedef detail::tmat4x2<f32, mediump> mediump_fmat4x2;
    -
    1821 
    -
    1824  typedef detail::tmat4x3<f32, mediump> mediump_fmat4x3;
    -
    1825 
    -
    1828  typedef detail::tmat4x4<f32, mediump> mediump_fmat4x4;
    -
    1829 
    -
    1832  //typedef mediump_fmat1x1 mediump_fmat1;
    -
    1833 
    - -
    1837 
    - -
    1841 
    - -
    1845 
    -
    1846 
    -
    1847 
    -
    1850  //typedef highp_f32 highp_fmat1x1;
    -
    1851 
    -
    1854  typedef detail::tmat2x2<f32, highp> highp_fmat2x2;
    -
    1855 
    -
    1858  typedef detail::tmat2x3<f32, highp> highp_fmat2x3;
    -
    1859 
    -
    1862  typedef detail::tmat2x4<f32, highp> highp_fmat2x4;
    -
    1863 
    -
    1866  typedef detail::tmat3x2<f32, highp> highp_fmat3x2;
    -
    1867 
    -
    1870  typedef detail::tmat3x3<f32, highp> highp_fmat3x3;
    -
    1871 
    -
    1874  typedef detail::tmat3x4<f32, highp> highp_fmat3x4;
    -
    1875 
    -
    1878  typedef detail::tmat4x2<f32, highp> highp_fmat4x2;
    -
    1879 
    -
    1882  typedef detail::tmat4x3<f32, highp> highp_fmat4x3;
    -
    1883 
    -
    1886  typedef detail::tmat4x4<f32, highp> highp_fmat4x4;
    -
    1887 
    -
    1890  //typedef highp_fmat1x1 highp_fmat1;
    -
    1891 
    - -
    1895 
    - -
    1899 
    - -
    1903 
    -
    1904 
    -
    1907  //typedef f32 lowp_f32mat1x1;
    -
    1908 
    -
    1911  typedef detail::tmat2x2<f32, lowp> lowp_f32mat2x2;
    -
    1912 
    -
    1915  typedef detail::tmat2x3<f32, lowp> lowp_f32mat2x3;
    -
    1916 
    -
    1919  typedef detail::tmat2x4<f32, lowp> lowp_f32mat2x4;
    -
    1920 
    -
    1923  typedef detail::tmat3x2<f32, lowp> lowp_f32mat3x2;
    -
    1924 
    -
    1927  typedef detail::tmat3x3<f32, lowp> lowp_f32mat3x3;
    -
    1928 
    -
    1931  typedef detail::tmat3x4<f32, lowp> lowp_f32mat3x4;
    -
    1932 
    -
    1935  typedef detail::tmat4x2<f32, lowp> lowp_f32mat4x2;
    -
    1936 
    -
    1939  typedef detail::tmat4x3<f32, lowp> lowp_f32mat4x3;
    -
    1940 
    -
    1943  typedef detail::tmat4x4<f32, lowp> lowp_f32mat4x4;
    -
    1944 
    -
    1947  //typedef detail::tmat1x1<f32, lowp> lowp_f32mat1;
    -
    1948 
    - -
    1952 
    - -
    1956 
    - -
    1960 
    -
    1961 
    -
    1962 
    -
    1965  //typedef f32 mediump_f32mat1x1;
    -
    1966 
    -
    1969  typedef detail::tmat2x2<f32, mediump> mediump_f32mat2x2;
    -
    1970 
    -
    1973  typedef detail::tmat2x3<f32, mediump> mediump_f32mat2x3;
    -
    1974 
    -
    1977  typedef detail::tmat2x4<f32, mediump> mediump_f32mat2x4;
    -
    1978 
    -
    1981  typedef detail::tmat3x2<f32, mediump> mediump_f32mat3x2;
    -
    1982 
    -
    1985  typedef detail::tmat3x3<f32, mediump> mediump_f32mat3x3;
    -
    1986 
    -
    1989  typedef detail::tmat3x4<f32, mediump> mediump_f32mat3x4;
    -
    1990 
    -
    1993  typedef detail::tmat4x2<f32, mediump> mediump_f32mat4x2;
    -
    1994 
    -
    1997  typedef detail::tmat4x3<f32, mediump> mediump_f32mat4x3;
    -
    1998 
    -
    2001  typedef detail::tmat4x4<f32, mediump> mediump_f32mat4x4;
    -
    2002 
    -
    2005  //typedef detail::tmat1x1<f32, mediump> f32mat1;
    -
    2006 
    - -
    2010 
    - -
    2014 
    - -
    2018 
    -
    2019 
    -
    2020 
    -
    2021 
    -
    2024  //typedef f32 highp_f32mat1x1;
    -
    2025 
    -
    2028  typedef detail::tmat2x2<f32, highp> highp_f32mat2x2;
    -
    2029 
    -
    2032  typedef detail::tmat2x3<f32, highp> highp_f32mat2x3;
    -
    2033 
    -
    2036  typedef detail::tmat2x4<f32, highp> highp_f32mat2x4;
    -
    2037 
    -
    2040  typedef detail::tmat3x2<f32, highp> highp_f32mat3x2;
    -
    2041 
    -
    2044  typedef detail::tmat3x3<f32, highp> highp_f32mat3x3;
    -
    2045 
    -
    2048  typedef detail::tmat3x4<f32, highp> highp_f32mat3x4;
    -
    2049 
    -
    2052  typedef detail::tmat4x2<f32, highp> highp_f32mat4x2;
    -
    2053 
    -
    2056  typedef detail::tmat4x3<f32, highp> highp_f32mat4x3;
    -
    2057 
    -
    2060  typedef detail::tmat4x4<f32, highp> highp_f32mat4x4;
    -
    2061 
    -
    2064  //typedef detail::tmat1x1<f32, highp> f32mat1;
    -
    2065 
    - -
    2069 
    - -
    2073 
    - -
    2077 
    -
    2078 
    -
    2079 
    -
    2082  //typedef f64 lowp_f64mat1x1;
    -
    2083 
    -
    2086  typedef detail::tmat2x2<f64, lowp> lowp_f64mat2x2;
    -
    2087 
    -
    2090  typedef detail::tmat2x3<f64, lowp> lowp_f64mat2x3;
    -
    2091 
    -
    2094  typedef detail::tmat2x4<f64, lowp> lowp_f64mat2x4;
    -
    2095 
    -
    2098  typedef detail::tmat3x2<f64, lowp> lowp_f64mat3x2;
    -
    2099 
    -
    2102  typedef detail::tmat3x3<f64, lowp> lowp_f64mat3x3;
    -
    2103 
    -
    2106  typedef detail::tmat3x4<f64, lowp> lowp_f64mat3x4;
    -
    2107 
    -
    2110  typedef detail::tmat4x2<f64, lowp> lowp_f64mat4x2;
    -
    2111 
    -
    2114  typedef detail::tmat4x3<f64, lowp> lowp_f64mat4x3;
    -
    2115 
    -
    2118  typedef detail::tmat4x4<f64, lowp> lowp_f64mat4x4;
    -
    2119 
    -
    2122  //typedef lowp_f64mat1x1 lowp_f64mat1;
    -
    2123 
    - -
    2127 
    - -
    2131 
    - -
    2135 
    -
    2136 
    -
    2137 
    -
    2140  //typedef f64 Highp_f64mat1x1;
    -
    2141 
    -
    2144  typedef detail::tmat2x2<f64, mediump> mediump_f64mat2x2;
    -
    2145 
    -
    2148  typedef detail::tmat2x3<f64, mediump> mediump_f64mat2x3;
    -
    2149 
    -
    2152  typedef detail::tmat2x4<f64, mediump> mediump_f64mat2x4;
    -
    2153 
    -
    2156  typedef detail::tmat3x2<f64, mediump> mediump_f64mat3x2;
    -
    2157 
    -
    2160  typedef detail::tmat3x3<f64, mediump> mediump_f64mat3x3;
    -
    2161 
    -
    2164  typedef detail::tmat3x4<f64, mediump> mediump_f64mat3x4;
    -
    2165 
    -
    2168  typedef detail::tmat4x2<f64, mediump> mediump_f64mat4x2;
    -
    2169 
    -
    2172  typedef detail::tmat4x3<f64, mediump> mediump_f64mat4x3;
    -
    2173 
    -
    2176  typedef detail::tmat4x4<f64, mediump> mediump_f64mat4x4;
    -
    2177 
    -
    2180  //typedef mediump_f64mat1x1 mediump_f64mat1;
    -
    2181 
    - -
    2185 
    - -
    2189 
    - -
    2193 
    -
    2196  //typedef f64 highp_f64mat1x1;
    -
    2197 
    -
    2200  typedef detail::tmat2x2<f64, highp> highp_f64mat2x2;
    -
    2201 
    -
    2204  typedef detail::tmat2x3<f64, highp> highp_f64mat2x3;
    -
    2205 
    -
    2208  typedef detail::tmat2x4<f64, highp> highp_f64mat2x4;
    -
    2209 
    -
    2212  typedef detail::tmat3x2<f64, highp> highp_f64mat3x2;
    -
    2213 
    -
    2216  typedef detail::tmat3x3<f64, highp> highp_f64mat3x3;
    -
    2217 
    -
    2220  typedef detail::tmat3x4<f64, highp> highp_f64mat3x4;
    -
    2221 
    -
    2224  typedef detail::tmat4x2<f64, highp> highp_f64mat4x2;
    -
    2225 
    -
    2228  typedef detail::tmat4x3<f64, highp> highp_f64mat4x3;
    -
    2229 
    -
    2232  typedef detail::tmat4x4<f64, highp> highp_f64mat4x4;
    -
    2233 
    -
    2236  //typedef highp_f64mat1x1 highp_f64mat1;
    -
    2237 
    - -
    2241 
    - -
    2245 
    - -
    2249 
    -
    2251  // Quaternion types
    -
    2252 
    -
    2255  typedef detail::tquat<f32, lowp> lowp_f32quat;
    -
    2256 
    -
    2259  typedef detail::tquat<f64, lowp> lowp_f64quat;
    -
    2260 
    -
    2263  typedef detail::tquat<f32, mediump> mediump_f32quat;
    -
    2264 
    -
    2267  typedef detail::tquat<f64, mediump> mediump_f64quat;
    -
    2268 
    -
    2271  typedef detail::tquat<f32, highp> highp_f32quat;
    -
    2272 
    -
    2275  typedef detail::tquat<f64, highp> highp_f64quat;
    -
    2276 
    -
    2277 
    -
    2278 #if(defined(GLM_PRECISION_LOWP_FLOAT))
    -
    2279  typedef lowp_f32vec1 fvec1;
    -
    2280  typedef lowp_f32vec2 fvec2;
    -
    2281  typedef lowp_f32vec3 fvec3;
    -
    2282  typedef lowp_f32vec4 fvec4;
    -
    2283  typedef lowp_f32mat2 fmat2;
    -
    2284  typedef lowp_f32mat3 fmat3;
    -
    2285  typedef lowp_f32mat4 fmat4;
    -
    2286  typedef lowp_f32mat2x2 fmat2x2;
    -
    2287  typedef lowp_f32mat3x2 fmat3x2;
    -
    2288  typedef lowp_f32mat4x2 fmat4x2;
    -
    2289  typedef lowp_f32mat2x3 fmat2x3;
    -
    2290  typedef lowp_f32mat3x3 fmat3x3;
    -
    2291  typedef lowp_f32mat4x3 fmat4x3;
    -
    2292  typedef lowp_f32mat2x4 fmat2x4;
    -
    2293  typedef lowp_f32mat3x4 fmat3x4;
    -
    2294  typedef lowp_f32mat4x4 fmat4x4;
    -
    2295  typedef lowp_f32quat fquat;
    -
    2296 
    -
    2297  typedef lowp_f32vec1 f32vec1;
    -
    2298  typedef lowp_f32vec2 f32vec2;
    -
    2299  typedef lowp_f32vec3 f32vec3;
    -
    2300  typedef lowp_f32vec4 f32vec4;
    -
    2301  typedef lowp_f32mat2 f32mat2;
    -
    2302  typedef lowp_f32mat3 f32mat3;
    -
    2303  typedef lowp_f32mat4 f32mat4;
    -
    2304  typedef lowp_f32mat2x2 f32mat2x2;
    -
    2305  typedef lowp_f32mat3x2 f32mat3x2;
    -
    2306  typedef lowp_f32mat4x2 f32mat4x2;
    -
    2307  typedef lowp_f32mat2x3 f32mat2x3;
    -
    2308  typedef lowp_f32mat3x3 f32mat3x3;
    -
    2309  typedef lowp_f32mat4x3 f32mat4x3;
    -
    2310  typedef lowp_f32mat2x4 f32mat2x4;
    -
    2311  typedef lowp_f32mat3x4 f32mat3x4;
    -
    2312  typedef lowp_f32mat4x4 f32mat4x4;
    -
    2313  typedef lowp_f32quat f32quat;
    -
    2314 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    -
    2315  typedef mediump_f32vec1 fvec1;
    -
    2316  typedef mediump_f32vec2 fvec2;
    -
    2317  typedef mediump_f32vec3 fvec3;
    -
    2318  typedef mediump_f32vec4 fvec4;
    -
    2319  typedef mediump_f32mat2 fmat2;
    -
    2320  typedef mediump_f32mat3 fmat3;
    -
    2321  typedef mediump_f32mat4 fmat4;
    -
    2322  typedef mediump_f32mat2x2 fmat2x2;
    -
    2323  typedef mediump_f32mat3x2 fmat3x2;
    -
    2324  typedef mediump_f32mat4x2 fmat4x2;
    -
    2325  typedef mediump_f32mat2x3 fmat2x3;
    -
    2326  typedef mediump_f32mat3x3 fmat3x3;
    -
    2327  typedef mediump_f32mat4x3 fmat4x3;
    -
    2328  typedef mediump_f32mat2x4 fmat2x4;
    -
    2329  typedef mediump_f32mat3x4 fmat3x4;
    -
    2330  typedef mediump_f32mat4x4 fmat4x4;
    -
    2331  typedef mediump_f32quat fquat;
    -
    2332 
    -
    2333  typedef mediump_f32vec1 f32vec1;
    -
    2334  typedef mediump_f32vec2 f32vec2;
    -
    2335  typedef mediump_f32vec3 f32vec3;
    -
    2336  typedef mediump_f32vec4 f32vec4;
    -
    2337  typedef mediump_f32mat2 f32mat2;
    -
    2338  typedef mediump_f32mat3 f32mat3;
    -
    2339  typedef mediump_f32mat4 f32mat4;
    -
    2340  typedef mediump_f32mat2x2 f32mat2x2;
    -
    2341  typedef mediump_f32mat3x2 f32mat3x2;
    -
    2342  typedef mediump_f32mat4x2 f32mat4x2;
    -
    2343  typedef mediump_f32mat2x3 f32mat2x3;
    -
    2344  typedef mediump_f32mat3x3 f32mat3x3;
    -
    2345  typedef mediump_f32mat4x3 f32mat4x3;
    -
    2346  typedef mediump_f32mat2x4 f32mat2x4;
    -
    2347  typedef mediump_f32mat3x4 f32mat3x4;
    -
    2348  typedef mediump_f32mat4x4 f32mat4x4;
    -
    2349  typedef mediump_f32quat f32quat;
    -
    2350 #else//if(defined(GLM_PRECISION_HIGHP_FLOAT))
    -
    2351  typedef highp_f32vec1 fvec1;
    -
    2354 
    - -
    2358 
    - -
    2362 
    - -
    2366 
    - -
    2370 
    - -
    2374 
    - -
    2378 
    - -
    2382 
    - -
    2386 
    - -
    2390 
    - -
    2394 
    - -
    2398 
    - -
    2402 
    -
    2405  typedef fmat2x2 fmat2;
    -
    2406 
    -
    2409  typedef fmat3x3 fmat3;
    -
    2410 
    -
    2413  typedef fmat4x4 fmat4;
    -
    2414 
    -
    2417  typedef highp_fquat fquat;
    -
    2418 
    -
    2419 
    -
    2420 
    - -
    2424 
    - -
    2428 
    - -
    2432 
    - -
    2436 
    - -
    2440 
    - -
    2444 
    - -
    2448 
    - -
    2452 
    - -
    2456 
    - -
    2460 
    - -
    2464 
    - -
    2468 
    - -
    2472 
    - -
    2476 
    - -
    2480 
    - -
    2484 
    - -
    2488 #endif
    -
    2489 
    -
    2490 
    -
    2491 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    2492  typedef lowp_f64vec1 f64vec1;
    -
    2493  typedef lowp_f64vec2 f64vec2;
    -
    2494  typedef lowp_f64vec3 f64vec3;
    -
    2495  typedef lowp_f64vec4 f64vec4;
    -
    2496  typedef lowp_f64mat2 f64mat2;
    -
    2497  typedef lowp_f64mat3 f64mat3;
    -
    2498  typedef lowp_f64mat4 f64mat4;
    -
    2499  typedef lowp_f64mat2x2 f64mat2x2;
    -
    2500  typedef lowp_f64mat3x2 f64mat3x2;
    -
    2501  typedef lowp_f64mat4x2 f64mat4x2;
    -
    2502  typedef lowp_f64mat2x3 f64mat2x3;
    -
    2503  typedef lowp_f64mat3x3 f64mat3x3;
    -
    2504  typedef lowp_f64mat4x3 f64mat4x3;
    -
    2505  typedef lowp_f64mat2x4 f64mat2x4;
    -
    2506  typedef lowp_f64mat3x4 f64mat3x4;
    -
    2507  typedef lowp_f64mat4x4 f64mat4x4;
    -
    2508  typedef lowp_f64quat f64quat;
    -
    2509 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
    -
    2510  typedef mediump_f64vec1 f64vec1;
    -
    2511  typedef mediump_f64vec2 f64vec2;
    -
    2512  typedef mediump_f64vec3 f64vec3;
    -
    2513  typedef mediump_f64vec4 f64vec4;
    -
    2514  typedef mediump_f64mat2 f64mat2;
    -
    2515  typedef mediump_f64mat3 f64mat3;
    -
    2516  typedef mediump_f64mat4 f64mat4;
    -
    2517  typedef mediump_f64mat2x2 f64mat2x2;
    -
    2518  typedef mediump_f64mat3x2 f64mat3x2;
    -
    2519  typedef mediump_f64mat4x2 f64mat4x2;
    -
    2520  typedef mediump_f64mat2x3 f64mat2x3;
    -
    2521  typedef mediump_f64mat3x3 f64mat3x3;
    -
    2522  typedef mediump_f64mat4x3 f64mat4x3;
    -
    2523  typedef mediump_f64mat2x4 f64mat2x4;
    -
    2524  typedef mediump_f64mat3x4 f64mat3x4;
    -
    2525  typedef mediump_f64mat4x4 f64mat4x4;
    -
    2526  typedef mediump_f64quat f64quat;
    -
    2527 #else
    -
    2528  typedef highp_f64vec1 f64vec1;
    -
    2531 
    - -
    2535 
    - -
    2539 
    - -
    2543 
    - -
    2547 
    - -
    2551 
    - -
    2555 
    - -
    2559 
    - -
    2563 
    - -
    2567 
    - -
    2571 
    - -
    2575 
    - -
    2579 
    - -
    2583 
    - -
    2587 
    - -
    2591 
    - -
    2595 #endif
    -
    2596 }//namespace glm
    -
    2597 
    -
    2598 #endif//GLM_FWD_INCLUDED
    -
    highp_i16vec1 i16vec1
    Default precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:468
    -
    highp_u16vec1 u16vec1
    Default precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1071
    -
    detail::int8 mediump_int8_t
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:196
    -
    highp_fmat4x4 highp_fmat4
    High single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1902
    -
    detail::tmat4x4< f32, lowp > lowp_fmat4x4
    Low single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1771
    -
    lowp_fmat2x2 lowp_fmat2
    Low single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1779
    -
    highp_f32mat4x3 fmat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2397
    -
    detail::tvec4< float, mediump > mediump_fvec4
    Medium Single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1595
    -
    detail::uint8 highp_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:845
    -
    detail::tvec1< f64, lowp > lowp_f64vec1
    Low double-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1683
    -
    detail::tmat3x4< f32, mediump > mediump_fmat3x4
    Medium single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1816
    -
    mediump_fmat2x2 mediump_fmat2
    Medium single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1836
    -
    highp_f32vec1 fvec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2353
    -
    highp_u8vec3 u8vec3
    Default precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:999
    -
    detail::tvec3< float, lowp > lowp_fvec3
    Low single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1557
    -
    detail::int8 int8
    8 bit signed integer type.
    Definition: type_int.hpp:89
    -
    detail::tvec1< u16, highp > highp_u16vec1
    High precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1043
    -
    highp_i64vec2 i64vec2
    Default precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:710
    -
    detail::float32 highp_float32_t
    High 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1437
    -
    float32 mediump_f32
    Medium 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1420
    -
    detail::tvec1< i16, lowp > lowp_i16vec1
    Low precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:406
    -
    highp_u64vec3 u64vec3
    Default precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1317
    -
    detail::tvec2< i16, mediump > mediump_i16vec2
    Medium precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:427
    -
    detail::tquat< f64, lowp > lowp_f64quat
    Low double-precision floating-point quaternion.
    Definition: fwd.hpp:2259
    -
    detail::uint16 mediump_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:815
    -
    detail::tmat2x4< f32, mediump > mediump_fmat2x4
    Medium single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1804
    -
    detail::uint64 lowp_uint64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:739
    -
    detail::tvec3< i8, highp > highp_i8vec3
    High precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:369
    -
    detail::tvec3< i32, mediump > mediump_i32vec3
    Medium precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:511
    -
    detail::tvec2< u8, lowp > lowp_u8vec2
    Low precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:934
    -
    detail::uint32 mediump_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:787
    -
    detail::uint32 uint32
    32 bit unsigned integer type.
    Definition: type_int.hpp:96
    -
    detail::int16 int16
    16 bit signed integer type.
    Definition: type_int.hpp:90
    -
    detail::tvec1< u64, highp > highp_u64vec1
    High precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1282
    -
    highp_i32vec2 i32vec2
    Default precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:551
    -
    detail::uint8 lowp_uint8_t
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:744
    -
    mediump_f64mat3x3 mediump_f64mat3
    Medium double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2188
    -
    float float32
    Default 32 bit single-precision floating-point scalar.
    Definition: type_float.hpp:81
    -
    detail::tvec2< u32, lowp > lowp_u32vec2
    Low precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1093
    -
    highp_u16vec3 u16vec3
    Default precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1079
    -
    detail::int32 highp_int32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:236
    -
    detail::uint8 uint8_t
    8 bit unsigned integer type.
    Definition: fwd.hpp:895
    -
    highp_f32vec3 f32vec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2431
    -
    detail::tvec4< i64, lowp > lowp_i64vec4
    Low precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:657
    -
    detail::tquat< f32, highp > highp_f32quat
    High single-precision floating-point quaternion.
    Definition: fwd.hpp:2271
    -
    highp_u64vec1 u64vec1
    Default precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1309
    -
    detail::float32 mediump_float32
    Medium 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1404
    -
    highp_fmat2x2 highp_fmat2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1894
    -
    detail::tvec3< i16, lowp > lowp_i16vec3
    Low precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:414
    -
    detail::tvec1< u8, lowp > lowp_u8vec1
    Low precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:930
    -
    detail::tmat2x4< f64, mediump > mediump_f64mat2x4
    Medium double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2152
    -
    detail::int16 highp_int16_t
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:248
    -
    highp_u8vec4 u8vec4
    Default precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1003
    -
    detail::tmat4x2< f32, mediump > mediump_f32mat4x2
    Medium single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1993
    -
    detail::int64 mediump_int64_t
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:208
    -
    detail::tmat2x2< f32, mediump > mediump_f32mat2x2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1969
    -
    detail::int32 lowp_int32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:140
    -
    detail::tvec3< float, mediump > mediump_fvec3
    Medium Single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1591
    -
    detail::int64 int64_t
    64 bit signed integer type.
    Definition: fwd.hpp:305
    -
    detail::tvec3< f64, lowp > lowp_f64vec3
    Low double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1691
    -
    detail::tmat4x3< f32, lowp > lowp_fmat4x3
    Low single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:1767
    -
    detail::tvec1< i8, mediump > mediump_i8vec1
    Medium precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:344
    -
    highp_float32_t f32
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1523
    -
    detail::tvec3< u64, lowp > lowp_u64vec3
    Low precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1256
    -
    detail::uint32 uint32_t
    32 bit unsigned integer type.
    Definition: fwd.hpp:903
    -
    detail::uint8 u8
    8 bit unsigned integer type.
    Definition: fwd.hpp:911
    -
    detail::int64 int64
    64 bit signed integer type.
    Definition: type_int.hpp:92
    -
    detail::float32 lowp_float32
    Low 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1330
    -
    detail::tvec3< i16, highp > highp_i16vec3
    High precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:448
    -
    detail::tvec2< i64, lowp > lowp_i64vec2
    Low precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:649
    -
    detail::uint16 lowp_u16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:765
    -
    highp_float32_t float32_t
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1515
    -
    detail::int32 highp_int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:252
    -
    highp_f32vec2 fvec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2357
    -
    highp_i16vec2 i16vec2
    Default precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:472
    -
    detail::tvec4< u64, highp > highp_u64vec4
    High precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1294
    -
    detail::float32 highp_float32
    High 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1429
    -
    detail::tmat3x2< f32, mediump > mediump_fmat3x2
    Medium single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1808
    -
    detail::tvec3< i64, highp > highp_i64vec3
    High precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:687
    -
    lowp_f64mat3x3 lowp_f64mat3
    Low double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2130
    -
    detail::tvec4< f64, lowp > lowp_f64vec4
    Low double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1695
    -
    detail::tmat4x3< f32, mediump > mediump_f32mat4x3
    Medium single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:1997
    -
    detail::tmat4x2< f32, lowp > lowp_fmat4x2
    Low single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1763
    -
    detail::uint32 mediump_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:803
    -
    lowp_quat lowp_fquat
    Quaternion of low single-precision floating-point numbers.
    Definition: fwd.hpp:75
    -
    detail::uint32 highp_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:837
    -
    detail::tvec1< float, lowp > lowp_fvec1
    Low single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1549
    -
    detail::uint16 mediump_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:783
    -
    detail::tvec3< i64, lowp > lowp_i64vec3
    Low precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:653
    -
    detail::tmat4x4< f32, mediump > mediump_f32mat4x4
    Medium single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2001
    -
    detail::tmat4x3< f32, mediump > mediump_fmat4x3
    Medium single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:1824
    -
    detail::tmat3x4< f64, lowp > lowp_f64mat3x4
    Low double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2106
    -
    detail::tvec4< float, mediump > mediump_vec4
    4 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:288
    -
    detail::tvec3< i32, lowp > lowp_i32vec3
    Low precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:494
    -
    detail::uint16 lowp_uint16_t
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:748
    -
    detail::tvec2< u64, mediump > mediump_u64vec2
    Medium precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1269
    -
    detail::int16 mediump_int16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:184
    -
    detail::tvec4< u16, highp > highp_u16vec4
    High precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1055
    -
    detail::tquat< f64, highp > highp_f64quat
    High double-precision floating-point quaternion.
    Definition: fwd.hpp:2275
    -
    detail::tvec2< u16, lowp > lowp_u16vec2
    Low precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1013
    -
    highp_f64mat3x4 f64mat3x4
    Default double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2566
    -
    lowp_fmat3x3 lowp_fmat3
    Low single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1783
    -
    detail::uint8 mediump_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:795
    -
    detail::tmat2x2< f32, lowp > lowp_fmat2x2
    Low single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1739
    -
    detail::int32 i32
    32 bit signed integer type.
    Definition: fwd.hpp:317
    -
    float64 lowp_f64
    Low 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1350
    -
    mediump_f64mat4x4 mediump_f64mat4
    Medium double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2192
    -
    detail::tmat3x3< f32, mediump > mediump_fmat3x3
    Medium single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1812
    -
    detail::tmat4x3< f64, highp > highp_f64mat4x3
    High double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2228
    -
    detail::tvec3< u32, highp > highp_u32vec3
    High precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1131
    -
    mediump_f32mat2x2 mediump_f32mat2
    Medium single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2009
    -
    quat fquat
    Quaternion of default single-precision floating-point numbers.
    Definition: fwd.hpp:90
    -
    highp_f64vec1 f64vec1
    Default double-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2530
    -
    detail::int8 lowp_int8_t
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:148
    -
    detail::uint16 highp_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:833
    -
    detail::tvec3< u16, mediump > mediump_u16vec3
    Medium precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1034
    -
    detail::tmat4x2< f32, highp > highp_fmat4x2
    High single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1878
    -
    detail::tmat2x3< f64, lowp > lowp_f64mat2x3
    Low double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2090
    -
    detail::tvec4< float, highp > highp_fvec4
    High Single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1629
    -
    detail::tmat3x2< f64, mediump > mediump_f64mat3x2
    Medium double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2156
    -
    highp_f64mat3x3 highp_f64mat3
    High double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2244
    -
    detail::tvec4< u64, lowp > lowp_u64vec4
    Low precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1260
    -
    detail::tmat3x3< f64, highp > highp_f64mat3x3
    High double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2216
    -
    detail::uint64 mediump_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:823
    -
    detail::uint64 uint64_t
    64 bit unsigned integer type.
    Definition: fwd.hpp:907
    -
    detail::tvec2< i32, mediump > mediump_i32vec2
    Medium precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:507
    -
    detail::tvec1< i8, highp > highp_i8vec1
    High precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:361
    -
    detail::tvec1< i32, mediump > mediump_i32vec1
    Medium precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:503
    -
    float64 highp_f64
    High 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1449
    -
    detail::tvec2< f64, lowp > lowp_f64vec2
    Low double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1687
    -
    detail::tmat2x4< f32, mediump > mediump_f32mat2x4
    Medium single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1977
    -
    detail::float64 mediump_float64_t
    Medium 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1416
    -
    detail::tvec1< i64, mediump > mediump_i64vec1
    Medium precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:662
    -
    highp_i64vec1 i64vec1
    Default precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:706
    -
    detail::tmat3x4< f64, mediump > mediump_f64mat3x4
    Medium double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2164
    -
    detail::int16 int16_t
    16 bit signed integer type.
    Definition: fwd.hpp:297
    -
    detail::tvec1< f32, highp > highp_f32vec1
    High single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1666
    -
    highp_f32vec2 f32vec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2427
    -
    detail::tmat4x2< f32, lowp > lowp_f32mat4x2
    Low single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1935
    -
    detail::tvec2< float, highp > highp_fvec2
    High Single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1621
    -
    detail::tvec1< float, highp > highp_vec1
    High single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1601
    -
    detail::tvec4< u32, highp > highp_u32vec4
    High precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1135
    -
    detail::uint16 highp_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:865
    -
    detail::tvec4< i8, lowp > lowp_i8vec4
    Low precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:339
    -
    detail::tvec4< u32, lowp > lowp_u32vec4
    Low precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1101
    -
    highp_f64mat4x4 f64mat4x4
    Default double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2578
    -
    highp_f64mat4x2 f64mat4x2
    Default double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2570
    -
    detail::tvec2< i8, mediump > mediump_i8vec2
    Medium precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:348
    -
    detail::float64 highp_float64_t
    High 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1441
    -
    detail::tvec4< u16, lowp > lowp_u16vec4
    Low precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1021
    -
    highp_f32vec3 fvec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2361
    -
    detail::tvec3< u8, mediump > mediump_u8vec3
    Medium precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:955
    -
    detail::tmat2x2< f64, lowp > lowp_f64mat2x2
    Low double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2086
    -
    detail::int64 i64
    64 bit signed integer type.
    Definition: fwd.hpp:321
    -
    detail::tvec2< f32, highp > highp_f32vec2
    High single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1670
    -
    detail::tvec3< float, lowp > lowp_vec3
    3 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:190
    -
    detail::tvec2< u8, highp > highp_u8vec2
    High precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:968
    -
    detail::int32 mediump_int32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:188
    -
    detail::tmat4x4< f32, highp > highp_fmat4x4
    High single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1886
    -
    f32mat4x4 f32mat4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2483
    -
    detail::tmat2x4< f32, lowp > lowp_fmat2x4
    Low single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1747
    -
    detail::int64 lowp_i64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:176
    -
    detail::tvec3< float, highp > highp_vec3
    3 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:176
    -
    detail::tvec4< i16, mediump > mediump_i16vec4
    Medium precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:435
    -
    detail::uint64 uint64
    64 bit unsigned integer type.
    Definition: type_int.hpp:97
    -
    highp_quat highp_fquat
    Quaternion of high single-precision floating-point numbers.
    Definition: fwd.hpp:85
    -
    detail::tvec2< i32, highp > highp_i32vec2
    High precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:524
    -
    detail::int64 highp_int64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:240
    -
    detail::uint32 highp_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:853
    -
    lowp_f64mat4x4 lowp_f64mat4
    Low double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2134
    -
    detail::tquat< float, mediump > mediump_quat
    Quaternion of medium single-precision floating-point numbers.
    Definition: fwd.hpp:54
    -
    detail::tvec4< float, lowp > lowp_fvec4
    Low single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1561
    -
    detail::int16 mediump_int16_t
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:200
    -
    detail::tmat3x3< f32, lowp > lowp_f32mat3x3
    Low single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1927
    -
    detail::tvec3< u8, highp > highp_u8vec3
    High precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:972
    -
    detail::tvec2< u64, highp > highp_u64vec2
    High precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1286
    -
    detail::int16 lowp_int16_t
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:152
    -
    detail::tmat2x3< f64, highp > highp_f64mat2x3
    High double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2204
    -
    detail::tvec1< i16, highp > highp_i16vec1
    High precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:440
    -
    detail::tvec3< u64, highp > highp_u64vec3
    High precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1290
    -
    detail::tmat3x2< f32, highp > highp_fmat3x2
    High single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1866
    -
    highp_i8vec4 i8vec4
    Default precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:400
    -
    detail::tmat4x3< f32, highp > highp_f32mat4x3
    High single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2056
    -
    detail::tvec1< i32, lowp > lowp_i32vec1
    Low precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:486
    -
    detail::tmat3x3< f64, lowp > lowp_f64mat3x3
    Low double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2102
    -
    detail::int32 mediump_int32_t
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:204
    -
    highp_f32mat4x3 f32mat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2467
    -
    detail::uint16 lowp_uint16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:731
    -
    highp_f32mat3x4 f32mat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2459
    -
    mediump_f32mat4x4 mediump_f32mat4
    Medium single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2017
    -
    detail::tmat3x3< f32, highp > highp_fmat3x3
    High single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1870
    -
    detail::float32 mediump_float32_t
    Medium 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1412
    -
    detail::tvec4< i16, lowp > lowp_i16vec4
    Low precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:418
    -
    detail::int64 mediump_int64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:192
    -
    detail::tvec4< u8, highp > highp_u8vec4
    High precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:976
    -
    highp_u32vec2 u32vec2
    Default precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1154
    -
    detail::int32 lowp_int32_t
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:156
    -
    detail::float64 lowp_float64_t
    Low 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1342
    -
    highp_f64mat2x3 f64mat2x3
    Default double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2550
    -
    detail::uint16 highp_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:849
    -
    highp_f32vec4 f32vec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2435
    -
    detail::tmat4x4< f64, mediump > mediump_f64mat4x4
    Medium double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2176
    -
    f64mat3x3 f64mat3
    Default double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2586
    -
    detail::tvec3< i64, mediump > mediump_i64vec3
    Medium precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:670
    -
    detail::uint64 highp_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:841
    -
    detail::tvec1< float, mediump > mediump_vec1
    Medium single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1567
    -
    detail::tvec4< i32, lowp > lowp_i32vec4
    Low precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:498
    -
    highp_dquat dquat
    Quaternion of default double-precision floating-point numbers.
    Definition: fwd.hpp:118
    -
    detail::uint64 highp_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:873
    -
    detail::uint8 lowp_uint8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:727
    -
    highp_i16vec3 i16vec3
    Default precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:476
    -
    detail::int16 i16
    16 bit signed integer type.
    Definition: fwd.hpp:313
    -
    detail::tvec1< u16, mediump > mediump_u16vec1
    Medium precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1026
    -
    detail::tvec1< u32, lowp > lowp_u32vec1
    Low precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1089
    -
    detail::uint64 lowp_u64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:773
    -
    detail::uint64 lowp_uint64_t
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:756
    -
    detail::tvec1< i16, mediump > mediump_i16vec1
    Medium precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:423
    -
    detail::tquat< f32, lowp > lowp_f32quat
    Low single-precision floating-point quaternion.
    Definition: fwd.hpp:2255
    -
    detail::int8 int8_t
    8 bit signed integer type.
    Definition: fwd.hpp:293
    -
    detail::tvec1< float, lowp > lowp_vec1
    Low single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1533
    -
    detail::tvec4< u8, mediump > mediump_u8vec4
    Medium precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:959
    -
    highp_f64vec3 f64vec3
    Default double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2538
    -
    fmat4x4 fmat4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2413
    -
    detail::tmat4x3< f32, lowp > lowp_f32mat4x3
    Low single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:1939
    -
    detail::uint16 uint16_t
    16 bit unsigned integer type.
    Definition: fwd.hpp:899
    -
    detail::tmat2x3< f64, mediump > mediump_f64mat2x3
    Medium double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2148
    -
    detail::tmat2x2< f32, lowp > lowp_f32mat2x2
    Low single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1911
    -
    detail::uint8 lowp_u8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:761
    -
    detail::tmat3x2< f64, highp > highp_f64mat3x2
    High double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2212
    -
    detail::int8 i8
    8 bit signed integer type.
    Definition: fwd.hpp:309
    -
    detail::tvec1< i8, lowp > lowp_i8vec1
    Low precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:327
    -
    highp_f32mat4x2 f32mat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2463
    -
    detail::tmat3x3< f32, lowp > lowp_fmat3x3
    Low single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1755
    -
    detail::tmat2x3< f32, mediump > mediump_f32mat2x3
    Medium single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1973
    -
    highp_quat quat
    Quaternion of default single-precision floating-point numbers.
    Definition: fwd.hpp:69
    -
    detail::uint32 lowp_uint32_t
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:752
    -
    mediump_fmat4x4 mediump_fmat4
    Medium single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1844
    -
    detail::tvec2< f64, mediump > mediump_f64vec2
    Medium double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1703
    -
    detail::int32 int32
    32 bit signed integer type.
    Definition: type_int.hpp:91
    -
    highp_i64vec4 i64vec4
    Default precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:718
    -
    detail::tvec3< u16, lowp > lowp_u16vec3
    Low precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1017
    -
    detail::tvec2< u16, highp > highp_u16vec2
    High precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1047
    -
    f64mat4x4 f64mat4
    Default double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2590
    -
    highp_f64mat2x4 f64mat2x4
    Default double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2554
    -
    highp_f32mat4x2 fmat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2393
    -
    detail::tvec1< float, highp > highp_fvec1
    High single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1617
    -
    detail::tmat2x2< f32, mediump > mediump_fmat2x2
    Medium single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1796
    -
    highp_f32mat2x2 fmat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2369
    -
    detail::tmat4x3< f64, lowp > lowp_f64mat4x3
    Low double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2114
    -
    detail::int32 highp_i32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:268
    -
    detail::tvec1< f64, highp > highp_f64vec1
    High double-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1715
    -
    fmat2x2 fmat2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2405
    -
    detail::tmat2x2< f32, highp > highp_fmat2x2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1854
    -
    detail::tquat< float, highp > highp_quat
    Quaternion of high single-precision floating-point numbers.
    Definition: fwd.hpp:59
    -
    highp_u64vec2 u64vec2
    Default precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1313
    -
    detail::int64 highp_int64_t
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:256
    -
    detail::int32 int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:301
    -
    detail::tvec1< u8, highp > highp_u8vec1
    High precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:964
    -
    detail::tvec3< u8, lowp > lowp_u8vec3
    Low precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:938
    -
    detail::tmat2x4< f64, highp > highp_f64mat2x4
    High double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2208
    -
    detail::tvec4< f32, mediump > mediump_f32vec4
    Medium single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1662
    -
    lowp_f32mat4x4 lowp_f32mat4
    Low single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1959
    -
    detail::tvec3< f32, lowp > lowp_f32vec3
    Low single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1642
    -
    detail::tvec3< u64, mediump > mediump_u64vec3
    Medium precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1273
    -
    highp_f32mat3x2 f32mat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2451
    -
    detail::tvec4< u32, mediump > mediump_u32vec4
    Medium precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1118
    -
    highp_f64mat4x3 f64mat4x3
    Default double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2574
    -
    float32 highp_f32
    High 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1445
    -
    detail::tmat4x4< f32, lowp > lowp_f32mat4x4
    Low single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1943
    -
    detail::int64 lowp_int64_t
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:160
    -
    detail::tquat< f64, mediump > mediump_f64quat
    Medium double-precision floating-point quaternion.
    Definition: fwd.hpp:2267
    -
    detail::tvec2< u8, mediump > mediump_u8vec2
    Medium precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:951
    -
    detail::int8 mediump_int8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:180
    -
    detail::tvec3< i8, lowp > lowp_i8vec3
    Low precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:335
    -
    detail::tvec2< u32, mediump > mediump_u32vec2
    Medium precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1110
    -
    detail::float64 lowp_float64
    Low 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1334
    -
    detail::float32 lowp_float32_t
    Low 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1338
    -
    detail::uint32 highp_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:869
    -
    detail::tquat< f32, mediump > mediump_f32quat
    Medium single-precision floating-point quaternion.
    Definition: fwd.hpp:2263
    -
    highp_u16vec4 u16vec4
    Default precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1083
    -
    detail::int16 lowp_int16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:136
    -
    detail::uint64 mediump_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:807
    -
    highp_f32mat3x3 highp_f32mat3
    High single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2072
    -
    highp_u16vec2 u16vec2
    Default precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1075
    -
    detail::uint64 u64
    64 bit unsigned integer type.
    Definition: fwd.hpp:923
    -
    detail::tvec1< i32, highp > highp_i32vec1
    High precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:520
    -
    f64mat2x2 f64mat2
    Default double-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2582
    -
    detail::tmat4x2< f32, highp > highp_f32mat4x2
    High single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2052
    -
    lowp_fmat4x4 lowp_fmat4
    Low single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1787
    -
    detail::tmat2x3< f32, highp > highp_f32mat2x3
    High single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2032
    -
    detail::float64 mediump_float64
    Medium 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1408
    -
    detail::tvec1< u64, lowp > lowp_u64vec1
    Low precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1248
    -
    detail::tvec1< u8, mediump > mediump_u8vec1
    Medium precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:947
    -
    lowp_f64mat2x2 lowp_f64mat2
    Low double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2126
    -
    detail::tvec1< i64, lowp > lowp_i64vec1
    Low precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:645
    -
    detail::tvec2< i8, lowp > lowp_i8vec2
    Low precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:331
    -
    detail::tvec4< i8, mediump > mediump_i8vec4
    Medium precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:356
    -
    detail::tmat3x2< f64, lowp > lowp_f64mat3x2
    Low double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2098
    -
    mediump_f64mat2x2 mediump_f64mat2
    Medium double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2184
    -
    highp_u64vec4 u64vec4
    Default precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1321
    -
    detail::tquat< double, lowp > lowp_dquat
    Quaternion of low double-precision floating-point numbers.
    Definition: fwd.hpp:96
    -
    detail::uint8 mediump_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:811
    -
    detail::tvec2< u32, highp > highp_u32vec2
    High precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1127
    -
    highp_f32mat4x4 f32mat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2471
    -
    detail::float64 highp_float64
    High 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1433
    -
    highp_f32mat2x3 fmat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2373
    -
    detail::tvec4< i8, highp > highp_i8vec4
    High precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:373
    -
    detail::tvec4< f64, highp > highp_f64vec4
    High double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1727
    -
    highp_f32mat4x4 fmat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2401
    -
    detail::tquat< double, highp > highp_dquat
    Quaternion of high double-precision floating-point numbers.
    Definition: fwd.hpp:106
    -
    highp_f32mat4x4 highp_f32mat4
    High single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2076
    -
    detail::tmat3x2< f32, lowp > lowp_fmat3x2
    Low single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1751
    -
    detail::tvec2< f32, lowp > lowp_f32vec2
    Low single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1638
    -
    highp_u8vec2 u8vec2
    Default precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:995
    -
    detail::tvec4< f32, lowp > lowp_f32vec4
    Low single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1646
    -
    detail::tvec3< f32, highp > highp_f32vec3
    High single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1674
    -
    highp_u32vec3 u32vec3
    Default precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1158
    -
    detail::tvec1< f32, mediump > mediump_f32vec1
    Medium single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1650
    -
    detail::uint8 uint8
    8 bit unsigned integer type.
    Definition: type_int.hpp:94
    -
    detail::int8 lowp_int8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:132
    -
    detail::tmat3x3< f32, highp > highp_f32mat3x3
    High single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2044
    -
    detail::uint32 mediump_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:819
    -
    detail::tvec2< i64, mediump > mediump_i64vec2
    Medium precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:666
    -
    detail::uint32 lowp_uint32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:735
    -
    highp_f64mat2x2 highp_f64mat2
    High double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2240
    -
    detail::int32 lowp_i32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:172
    -
    detail::tmat3x2< f32, lowp > lowp_f32mat3x2
    Low single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1923
    -
    lowp_f32mat3x3 lowp_f32mat3
    Low single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1955
    -
    detail::uint32 u32
    32 bit unsigned integer type.
    Definition: fwd.hpp:919
    -
    highp_i8vec2 i8vec2
    Default precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:392
    -
    detail::tmat4x4< f32, highp > highp_f32mat4x4
    High single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2060
    -
    highp_i32vec3 i32vec3
    Default precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:555
    -
    detail::tmat2x2< f64, mediump > mediump_f64mat2x2
    Medium double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2144
    -
    detail::tmat2x4< f32, lowp > lowp_f32mat2x4
    Low single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1919
    -
    highp_f64mat2x2 f64mat2x2
    Default double-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2546
    -
    highp_f64mat4x4 highp_f64mat4
    High double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2248
    -
    detail::tmat2x3< f32, lowp > lowp_f32mat2x3
    Low single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1915
    -
    highp_f32vec1 f32vec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2423
    -
    detail::tmat2x3< f32, highp > highp_fmat2x3
    High single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1858
    -
    detail::tmat4x4< f32, mediump > mediump_fmat4x4
    Medium single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:1828
    -
    detail::tmat4x3< f64, mediump > mediump_f64mat4x3
    Medium double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2172
    -
    detail::tvec3< float, highp > highp_fvec3
    High Single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1625
    -
    detail::tvec3< f64, mediump > mediump_f64vec3
    Medium double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1707
    -
    detail::tvec1< u16, lowp > lowp_u16vec1
    Low precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1009
    -
    highp_f32mat2x4 fmat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2377
    -
    highp_fmat3x3 highp_fmat3
    High single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1898
    -
    detail::int64 highp_i64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:272
    -
    highp_float64_t float64_t
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1519
    -
    detail::tmat4x2< f64, highp > highp_f64mat4x2
    High double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2224
    -
    detail::tvec4< f32, highp > highp_f32vec4
    High single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1678
    -
    f32mat3x3 f32mat3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2479
    -
    detail::int8 highp_i8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:260
    -
    detail::tvec4< u64, mediump > mediump_u64vec4
    Medium precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1277
    -
    highp_i8vec3 i8vec3
    Default precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:396
    -
    detail::tvec2< float, highp > highp_vec2
    2 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:65
    -
    detail::int32 mediump_i32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:220
    -
    detail::tvec2< u64, lowp > lowp_u64vec2
    Low precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1252
    -
    detail::tvec2< i16, highp > highp_i16vec2
    High precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:444
    -
    detail::tvec1< u64, mediump > mediump_u64vec1
    Medium precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1265
    -
    detail::tvec2< float, mediump > mediump_fvec2
    Medium Single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1587
    -
    detail::tmat3x2< f32, highp > highp_f32mat3x2
    High single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2040
    -
    detail::tvec2< i8, highp > highp_i8vec2
    High precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:365
    -
    detail::tmat3x4< f32, lowp > lowp_f32mat3x4
    Low single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1931
    -
    detail::tmat4x4< f64, lowp > lowp_f64mat4x4
    Low double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2118
    -
    highp_f32quat f32quat
    Default single-precision floating-point quaternion.
    Definition: fwd.hpp:2487
    -
    highp_u8vec1 u8vec1
    Default precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:991
    -
    detail::uint64 mediump_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:791
    -
    highp_i32vec1 i32vec1
    Default precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:547
    -
    detail::tvec2< float, lowp > lowp_fvec2
    Low single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1553
    -
    detail::tmat2x2< f32, highp > highp_f32mat2x2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2028
    -
    detail::tvec4< f64, mediump > mediump_f64vec4
    Medium double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:1711
    -
    lowp_f32mat2x2 lowp_f32mat2
    Low single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:1951
    -
    highp_u32vec4 u32vec4
    Default precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1162
    -
    detail::uint8 highp_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:861
    -
    highp_f32mat2x2 f32mat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2439
    -
    detail::tmat3x2< f32, mediump > mediump_f32mat3x2
    Medium single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:1981
    -
    highp_i32vec4 i32vec4
    Default precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:559
    -
    detail::uint8 mediump_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:779
    -
    highp_i16vec4 i16vec4
    Default precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:480
    -
    detail::tvec3< f32, mediump > mediump_f32vec3
    Medium single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1658
    -
    highp_float64_t f64
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1527
    -
    detail::tmat3x4< f32, highp > highp_fmat3x4
    High single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1874
    -
    detail::int8 mediump_i8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:212
    -
    detail::int64 mediump_i64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:224
    -
    detail::int16 highp_int16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:232
    -
    highp_f64vec2 f64vec2
    Default double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2534
    -
    mediump_fmat3x3 mediump_fmat3
    Medium single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1840
    -
    detail::tvec3< f64, highp > highp_f64vec3
    High double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:1723
    -
    highp_i8vec1 i8vec1
    Default precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:388
    -
    detail::tvec2< float, lowp > lowp_vec2
    2 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:79
    -
    highp_f64mat3x2 f64mat3x2
    Default double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2558
    -
    detail::tmat3x4< f32, mediump > mediump_f32mat3x4
    Medium single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1989
    -
    float64 mediump_f64
    Medium 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1424
    -
    detail::tmat2x3< f32, lowp > lowp_fmat2x3
    Low single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1743
    -
    highp_f32mat2x2 highp_f32mat2
    High single-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2068
    -
    detail::uint32 lowp_u32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:769
    -
    detail::int16 highp_i16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:264
    -
    detail::int8 highp_int8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:228
    -
    detail::tvec2< i64, highp > highp_i64vec2
    High precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:683
    -
    float32 lowp_f32
    Low 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1346
    -
    detail::tvec4< u16, mediump > mediump_u16vec4
    Medium precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1038
    -
    detail::tvec3< i8, mediump > mediump_i8vec3
    Medium precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:352
    -
    detail::tmat2x3< f32, mediump > mediump_fmat2x3
    Medium single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:1800
    -
    detail::tmat3x4< f64, highp > highp_f64mat3x4
    High double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2220
    -
    detail::tmat4x3< f32, highp > highp_fmat4x3
    High single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:1882
    -
    detail::tvec1< i64, highp > highp_i64vec1
    High precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:679
    -
    detail::tmat4x2< f32, mediump > mediump_fmat4x2
    Medium single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:1820
    -
    detail::tvec4< i32, highp > highp_i32vec4
    High precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:532
    -
    detail::tmat2x4< f32, highp > highp_f32mat2x4
    High single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2036
    -
    detail::tmat3x3< f32, mediump > mediump_f32mat3x3
    Medium single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:1985
    -
    detail::tvec3< i16, mediump > mediump_i16vec3
    Medium precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:431
    -
    mediump_quat mediump_fquat
    Quaternion of medium single-precision floating-point numbers.
    Definition: fwd.hpp:80
    -
    highp_u32vec1 u32vec1
    Default precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1150
    -
    detail::tmat3x4< f32, highp > highp_f32mat3x4
    High single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2048
    -
    detail::uint16 u16
    16 bit unsigned integer type.
    Definition: fwd.hpp:915
    -
    fmat3x3 fmat3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2409
    -
    detail::tvec1< f64, mediump > mediump_f64vec1
    Medium double-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1699
    -
    detail::int16 lowp_i16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:168
    -
    detail::tmat2x4< f64, lowp > lowp_f64mat2x4
    Low double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2094
    -
    detail::tvec3< i32, highp > highp_i32vec3
    High precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:528
    -
    highp_f32mat2x3 f32mat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2443
    -
    mediump_f32mat3x3 mediump_f32mat3
    Medium single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2013
    -
    detail::uint16 uint16
    16 bit unsigned integer type.
    Definition: type_int.hpp:95
    -
    highp_f32vec4 fvec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2365
    -
    detail::tmat3x4< f32, lowp > lowp_fmat3x4
    Low single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:1759
    -
    detail::tmat4x4< f64, highp > highp_f64mat4x4
    High double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2232
    -
    highp_f64quat f64quat
    Default double-precision floating-point quaternion.
    Definition: fwd.hpp:2594
    -
    detail::tvec2< i16, lowp > lowp_i16vec2
    Low precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:410
    -
    detail::tquat< float, lowp > lowp_quat
    Quaternion of low single-precision floating-point numbers.
    Definition: fwd.hpp:49
    -
    detail::tvec1< u32, highp > highp_u32vec1
    High precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1123
    -
    detail::tvec4< i32, mediump > mediump_i32vec4
    Medium precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:515
    -
    detail::int8 highp_int8_t
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:244
    -
    detail::tvec3< u32, lowp > lowp_u32vec3
    Low precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1097
    -
    highp_f32mat2x4 f32mat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2447
    -
    f32mat2x2 f32mat2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2475
    -
    detail::tvec2< u16, mediump > mediump_u16vec2
    Medium precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1030
    -
    detail::tvec3< u32, mediump > mediump_u32vec3
    Medium precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1114
    -
    detail::tvec4< float, lowp > lowp_vec4
    4 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:294
    -
    highp_f64vec4 f64vec4
    Default double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2542
    -
    detail::tvec2< float, mediump > mediump_vec2
    2 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:72
    -
    detail::int64 lowp_int64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:144
    -
    detail::tmat3x3< f64, mediump > mediump_f64mat3x3
    Medium double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2160
    -
    detail::uint64 highp_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:857
    -
    detail::tquat< double, mediump > mediump_dquat
    Quaternion of medium double-precision floating-point numbers.
    Definition: fwd.hpp:101
    -
    detail::tmat2x4< f32, highp > highp_fmat2x4
    High single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:1862
    -
    double float64
    Default 64 bit double-precision floating-point scalar.
    Definition: type_float.hpp:82
    -
    detail::tvec2< f32, mediump > mediump_f32vec2
    Medium single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1654
    -
    highp_f32mat3x3 fmat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2385
    -
    detail::uint8 highp_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:829
    -
    detail::int8 lowp_i8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:164
    -
    detail::tmat2x2< f64, highp > highp_f64mat2x2
    High double-precision floating-point 1x1 matrix.
    Definition: fwd.hpp:2200
    -
    detail::tvec2< f64, highp > highp_f64vec2
    High double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:1719
    -
    detail::tvec3< u16, highp > highp_u16vec3
    High precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1051
    -
    detail::tvec1< float, mediump > mediump_fvec1
    Medium single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1583
    -
    detail::tvec1< f32, lowp > lowp_f32vec1
    Low single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1634
    -
    detail::tvec4< i16, highp > highp_i16vec4
    High precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:452
    -
    detail::tvec4< i64, highp > highp_i64vec4
    High precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:691
    -
    detail::tvec1< u32, mediump > mediump_u32vec1
    Medium precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1106
    -
    detail::tvec4< i64, mediump > mediump_i64vec4
    Medium precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:674
    -
    detail::tvec2< i32, lowp > lowp_i32vec2
    Low precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:490
    -
    highp_f32mat3x3 f32mat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2455
    -
    highp_f64mat3x3 f64mat3x3
    Default double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2562
    -
    highp_f32mat3x4 fmat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2389
    -
    detail::tvec4< float, highp > highp_vec4
    4 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:282
    -
    detail::tvec4< u8, lowp > lowp_u8vec4
    Low precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:942
    -
    detail::tmat4x2< f64, lowp > lowp_f64mat4x2
    Low double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2110
    -
    detail::tmat4x2< f64, mediump > mediump_f64mat4x2
    Medium double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2168
    -
    highp_f32mat3x2 fmat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2381
    -
    detail::int16 mediump_i16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:216
    -
    highp_i64vec3 i64vec3
    Default precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:714
    -
    detail::uint16 mediump_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:799
    -
    detail::tvec3< float, mediump > mediump_vec3
    3 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:183
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_handed_coordinate_space extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename T, precision P>
    +
    55  GLM_FUNC_DECL bool rightHanded(
    +
    56  tvec3<T, P> const & tangent,
    +
    57  tvec3<T, P> const & binormal,
    +
    58  tvec3<T, P> const & normal);
    +
    59 
    +
    62  template <typename T, precision P>
    +
    63  GLM_FUNC_DECL bool leftHanded(
    +
    64  tvec3<T, P> const & tangent,
    +
    65  tvec3<T, P> const & binormal,
    +
    66  tvec3<T, P> const & normal);
    +
    67 
    +
    69 }// namespace glm
    +
    70 
    +
    71 #include "handed_coordinate_space.inl"
    +
    GLM_FUNC_DECL bool leftHanded(tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)
    Return if a trihedron left handed or not.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL bool rightHanded(tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)
    Return if a trihedron right handed or not.
    diff --git a/doc/api/a00042.html b/doc/api/a00042.html index 67521fe5..7c49379c 100644 --- a/doc/api/a00042.html +++ b/doc/api/a00042.html @@ -3,8 +3,8 @@ - -GLM: geometric.hpp File Reference + +0.9.6: inertia.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,12 +41,12 @@
    -
    geometric.hpp File Reference
    +
    inertia.hpp File Reference
    @@ -58,17 +56,20 @@

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTX_inertia

    +
    Date
    2006-04-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_extented_min_max (dependence)
    -

    Definition in file geometric.hpp.

    +

    Definition in file inertia.hpp.

    diff --git a/doc/api/a00042_source.html b/doc/api/a00042_source.html index 0a2989c3..1ebc8a24 100644 --- a/doc/api/a00042_source.html +++ b/doc/api/a00042_source.html @@ -3,8 +3,8 @@ - -GLM: geometric.hpp Source File + +0.9.6: inertia.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,78 @@
    -
    geometric.hpp
    +
    inertia.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_GEOMETRIC_INCLUDED
    -
    30 #define GLM_GEOMETRIC_INCLUDED
    -
    31 
    -
    32 #include "detail/func_geometric.hpp"
    -
    33 
    -
    34 #endif//GLM_GEOMETRIC_INCLUDED
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_inertia extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    50  /*
    +
    53 
    +
    56  template <typename T, precision P>
    +
    57  tmat3x3<T, P> boxInertia3(
    +
    58  T const & Mass,
    +
    59  tvec3<T, P> const & Scale);
    +
    60 
    +
    63  template <typename T, precision P>
    +
    64  tmat4x4<T, P> boxInertia4(
    +
    65  T const & Mass,
    +
    66  tvec3<T, P> const & Scale);
    +
    67 
    +
    70  template <typename T, precision P>
    +
    71  tmat3x3<T, P> diskInertia3(
    +
    72  T const & Mass,
    +
    73  T const & Radius);
    +
    74 
    +
    77  template <typename T, precision P>
    +
    78  tmat4x4<T, P> diskInertia4(
    +
    79  T const & Mass,
    +
    80  T const & Radius);
    +
    81 
    +
    84  template <typename T, precision P>
    +
    85  tmat3x3<T, P> ballInertia3(
    +
    86  T const & Mass,
    +
    87  T const & Radius);
    +
    88 
    +
    91  template <typename T, precision P>
    +
    92  tmat4x4<T, P> ballInertia4(
    +
    93  T const & Mass,
    +
    94  T const & Radius);
    +
    95 
    +
    98  template <typename T, precision P>
    +
    99  tmat3x3<T, P> sphereInertia3(
    +
    100  T const & Mass,
    +
    101  T const & Radius);
    +
    102 
    +
    105  template <typename T, precision P>
    +
    106  tmat4x4<T, P> sphereInertia4(
    +
    107  T const & Mass,
    +
    108  T const & Radius);
    +
    109  */
    +
    111 }// namespace glm
    +
    112 
    +
    113 #include "inertia.inl"
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00043.html b/doc/api/a00043.html index 66e956ed..aebb82d3 100644 --- a/doc/api/a00043.html +++ b/doc/api/a00043.html @@ -3,8 +3,8 @@ - -GLM: glm.hpp File Reference + +0.9.6: integer.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,38 +41,44 @@
    +
    -
    glm.hpp File Reference
    +
    gtc/integer.hpp File Reference

    Go to the source code of this file.

    + + + + + +

    +Functions

    template<typename genIUType >
    GLM_FUNC_DECL genIUType log2 (genIUType x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -
    Date
    2009-05-01 / 2011-05-16
    +

    GLM_GTC_integer

    +
    Date
    2014-11-17 / 2014-11-17
    Author
    Christophe Riccio
    -

    GLM Core (Dependence)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2005-01-14 / 2011-10-24
    -
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTC_integer (dependence)
    -

    Definition in file glm.hpp.

    +

    Definition in file gtc/integer.hpp.

    diff --git a/doc/api/a00043_source.html b/doc/api/a00043_source.html index a8a518be..70b8beb7 100644 --- a/doc/api/a00043_source.html +++ b/doc/api/a00043_source.html @@ -3,8 +3,8 @@ - -GLM: glm.hpp Source File + +0.9.6: integer.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,81 +41,45 @@
    -
    glm.hpp
    +
    gtc/integer.hpp
    Go to the documentation of this file.
    1 
    -
    78 #include "detail/_fixes.hpp"
    -
    79 
    -
    80 #ifndef GLM_INCLUDED
    -
    81 #define GLM_INCLUDED
    -
    82 
    -
    83 #include <cmath>
    -
    84 #include <climits>
    -
    85 #include <cfloat>
    -
    86 #include <limits>
    -
    87 #include <cassert>
    -
    88 #include "fwd.hpp"
    -
    89 
    -
    90 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_CORE_INCLUDED_DISPLAYED))
    -
    91 # define GLM_MESSAGE_CORE_INCLUDED_DISPLAYED
    -
    92 # pragma message("GLM: Core library included")
    -
    93 #endif//GLM_MESSAGE
    -
    94 
    -
    95 #include "vec2.hpp"
    -
    96 #include "vec3.hpp"
    -
    97 #include "vec4.hpp"
    -
    98 #include "mat2x2.hpp"
    -
    99 #include "mat2x3.hpp"
    -
    100 #include "mat2x4.hpp"
    -
    101 #include "mat3x2.hpp"
    -
    102 #include "mat3x3.hpp"
    -
    103 #include "mat3x4.hpp"
    -
    104 #include "mat4x2.hpp"
    -
    105 #include "mat4x3.hpp"
    -
    106 #include "mat4x4.hpp"
    -
    107 
    -
    108 #include "trigonometric.hpp"
    -
    109 #include "exponential.hpp"
    -
    110 #include "common.hpp"
    -
    111 #include "packing.hpp"
    -
    112 #include "geometric.hpp"
    -
    113 #include "matrix.hpp"
    -
    114 #include "vector_relational.hpp"
    -
    115 #include "integer.hpp"
    -
    116 
    -
    117 #endif//GLM_INCLUDED
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    OpenGL Mathematics (glm.g-truc.net)
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependencies
    +
    42 #include "../detail/setup.hpp"
    +
    43 #include "../detail/precision.hpp"
    +
    44 #include "../detail/func_integer.hpp"
    +
    45 #include "../detail/func_exponential.hpp"
    +
    46 #include <limits>
    +
    47 
    +
    48 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    49 # pragma message("GLM: GLM_GTC_integer extension included")
    +
    50 #endif
    +
    51 
    +
    52 namespace glm
    +
    53 {
    +
    56 
    +
    59  template <typename genIUType>
    +
    60  GLM_FUNC_DECL genIUType log2(genIUType x);
    +
    61 
    +
    63 } //namespace glm
    +
    64 
    +
    65 #include "integer.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genIUType log2(genIUType x)
    Returns the log2 of x.
    diff --git a/doc/api/a00044.html b/doc/api/a00044.html index ac2b3516..038b470f 100644 --- a/doc/api/a00044.html +++ b/doc/api/a00044.html @@ -3,8 +3,8 @@ - -GLM: gradient_paint.hpp File Reference + +0.9.6: integer.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,53 +41,64 @@
    -
    gradient_paint.hpp File Reference
    +
    gtx/integer.hpp File Reference

    Go to the source code of this file.

    - - - + + +

    -Namespaces

     glm
     

    +Typedefs

    typedef signed int sint
     
    - - - - - - + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    linearGradient (detail::tvec2< T, P > const &Point0, detail::tvec2< T, P > const &Point1, detail::tvec2< T, P > const &Position)
     
    template<typename T , precision P>
    radialGradient (detail::tvec2< T, P > const &Center, T const &Radius, detail::tvec2< T, P > const &Focal, detail::tvec2< T, P > const &Position)
     
    template<typename genType >
    GLM_FUNC_DECL genType factorial (genType const &x)
     
    GLM_FUNC_DECL unsigned int floor_log2 (unsigned int x)
     
    GLM_FUNC_DECL int mod (int x, int y)
     
    GLM_FUNC_DECL uint mod (uint x, uint y)
     
    GLM_FUNC_DECL uint nlz (uint x)
     
    GLM_FUNC_DECL int pow (int x, int y)
     
    GLM_FUNC_DECL uint pow (uint x, uint y)
     
    GLM_FUNC_DECL int sqrt (int x)
     
    GLM_FUNC_DECL uint sqrt (uint x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_gradient_paint

    -
    Date
    2009-03-06 / 2011-06-07
    +

    GLM_GTX_integer

    +
    Date
    2005-12-24 / 2011-10-13
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_optimum_pow (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file gradient_paint.hpp.

    +

    Definition in file gtx/integer.hpp.

    diff --git a/doc/api/a00044_source.html b/doc/api/a00044_source.html index f26b6a08..d163d532 100644 --- a/doc/api/a00044_source.html +++ b/doc/api/a00044_source.html @@ -3,8 +3,8 @@ - -GLM: gradient_paint.hpp Source File + +0.9.6: integer.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,55 +41,67 @@
    -
    gradient_paint.hpp
    +
    gtx/integer.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_gradient_paint
    -
    39 #define GLM_GTX_gradient_paint
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 #include "../gtx/optimum_pow.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_gradient_paint extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    56  template <typename T, precision P>
    - -
    58  detail::tvec2<T, P> const & Center,
    -
    59  T const & Radius,
    -
    60  detail::tvec2<T, P> const & Focal,
    -
    61  detail::tvec2<T, P> const & Position);
    -
    62 
    -
    65  template <typename T, precision P>
    - -
    67  detail::tvec2<T, P> const & Point0,
    -
    68  detail::tvec2<T, P> const & Point1,
    -
    69  detail::tvec2<T, P> const & Position);
    -
    70 
    -
    72 }// namespace glm
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 #include "../gtc/integer.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_integer extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  GLM_FUNC_DECL int pow(int x, int y);
    +
    56 
    +
    59  GLM_FUNC_DECL int sqrt(int x);
    +
    60 
    +
    63  GLM_FUNC_DECL unsigned int floor_log2(unsigned int x);
    +
    64 
    +
    67  GLM_FUNC_DECL int mod(int x, int y);
    +
    68 
    +
    71  template <typename genType>
    +
    72  GLM_FUNC_DECL genType factorial(genType const & x);
    73 
    -
    74 #include "gradient_paint.inl"
    -
    75 
    -
    76 #endif//GLM_GTX_gradient_paint
    -
    T radialGradient(detail::tvec2< T, P > const &Center, T const &Radius, detail::tvec2< T, P > const &Focal, detail::tvec2< T, P > const &Position)
    Return a color from a radial gradient.
    -
    T linearGradient(detail::tvec2< T, P > const &Point0, detail::tvec2< T, P > const &Point1, detail::tvec2< T, P > const &Position)
    Return a color from a linear gradient.
    +
    76  typedef signed int sint;
    +
    77 
    +
    80  GLM_FUNC_DECL uint pow(uint x, uint y);
    +
    81 
    +
    84  GLM_FUNC_DECL uint sqrt(uint x);
    +
    85 
    +
    88  GLM_FUNC_DECL uint mod(uint x, uint y);
    +
    89 
    +
    92  GLM_FUNC_DECL uint nlz(uint x);
    +
    93 
    +
    95 }//namespace glm
    +
    96 
    +
    97 #include "integer.inl"
    +
    GLM_FUNC_DECL uint sqrt(uint x)
    Returns the positive square root of x.
    +
    GLM_FUNC_DECL uint mod(uint x, uint y)
    Modulus.
    +
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:302
    +
    GLM_FUNC_DECL unsigned int floor_log2(unsigned int x)
    Returns the floor log2 of x.
    +
    GLM_FUNC_DECL uint nlz(uint x)
    Returns the number of leading zeros.
    +
    Definition: _noise.hpp:31
    +
    signed int sint
    32bit signed integer.
    Definition: gtx/integer.hpp:76
    +
    GLM_FUNC_DECL uint pow(uint x, uint y)
    Returns x raised to the y power.
    +
    GLM_FUNC_DECL genType factorial(genType const &x)
    Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension...
    diff --git a/doc/api/a00045.html b/doc/api/a00045.html index 350df17f..32c1b6b0 100644 --- a/doc/api/a00045.html +++ b/doc/api/a00045.html @@ -3,8 +3,8 @@ - -GLM: handed_coordinate_space.hpp File Reference + +0.9.6: integer.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,51 +41,32 @@
    -
    -
    handed_coordinate_space.hpp File Reference
    +
    integer.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - -

    -Functions

    template<typename T , precision P>
    bool leftHanded (detail::tvec3< T, P > const &tangent, detail::tvec3< T, P > const &binormal, detail::tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    bool rightHanded (detail::tvec3< T, P > const &tangent, detail::tvec3< T, P > const &binormal, detail::tvec3< T, P > const &normal)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_handed_coordinate_space

    -
    Date
    2005-12-21 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    -

    Definition in file handed_coordinate_space.hpp.

    +

    Definition in file integer.hpp.

    diff --git a/doc/api/a00045_source.html b/doc/api/a00045_source.html index 34418437..24fbdb54 100644 --- a/doc/api/a00045_source.html +++ b/doc/api/a00045_source.html @@ -3,8 +3,8 @@ - -GLM: handed_coordinate_space.hpp Source File + +0.9.6: integer.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,53 +41,25 @@
    -
    handed_coordinate_space.hpp
    +
    integer.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_handed_coordinate_space
    -
    39 #define GLM_GTX_handed_coordinate_space
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_handed_coordinate_space extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename T, precision P>
    -
    56  bool rightHanded(
    -
    57  detail::tvec3<T, P> const & tangent,
    -
    58  detail::tvec3<T, P> const & binormal,
    -
    59  detail::tvec3<T, P> const & normal);
    -
    60 
    -
    63  template <typename T, precision P>
    -
    64  bool leftHanded(
    -
    65  detail::tvec3<T, P> const & tangent,
    -
    66  detail::tvec3<T, P> const & binormal,
    -
    67  detail::tvec3<T, P> const & normal);
    -
    68 
    -
    70 }// namespace glm
    -
    71 
    -
    72 #include "handed_coordinate_space.inl"
    -
    73 
    -
    74 #endif//GLM_GTX_handed_coordinate_space
    -
    bool leftHanded(detail::tvec3< T, P > const &tangent, detail::tvec3< T, P > const &binormal, detail::tvec3< T, P > const &normal)
    Return if a trihedron left handed or not.
    -
    bool rightHanded(detail::tvec3< T, P > const &tangent, detail::tvec3< T, P > const &binormal, detail::tvec3< T, P > const &normal)
    Return if a trihedron right handed or not.
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/func_integer.hpp"
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00046.html b/doc/api/a00046.html new file mode 100644 index 00000000..482990a5 --- /dev/null +++ b/doc/api/a00046.html @@ -0,0 +1,99 @@ + + + + + + +0.9.6: intersect.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    intersect.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL bool intersectLineSphere (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectRayPlane (genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectRayTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_intersect

    +
    Date
    2007-04-03 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_closest_point (dependence)
    + +

    Definition in file intersect.hpp.

    +
    + + + + diff --git a/doc/api/a00046_source.html b/doc/api/a00046_source.html index 1ecd183f..dc5a6ddc 100644 --- a/doc/api/a00046_source.html +++ b/doc/api/a00046_source.html @@ -3,8 +3,8 @@ - -GLM: hint.hpp Source File + +0.9.6: intersect.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,33 +41,80 @@
    -
    hint.hpp
    +
    intersect.hpp
    -
    1 
    -
    29 #ifndef glm_core_type
    -
    30 #define glm_core_type
    -
    31 
    -
    32 namespace glm
    -
    33 {
    -
    34  // Use dont_care, nicest and fastest to optimize implementations.
    -
    35  class dont_care {};
    -
    36  class nicest {};
    -
    37  class fastest {};
    -
    38 }//namespace glm
    -
    39 
    -
    40 #endif//glm_core_type
    +Go to the documentation of this file.
    1 
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include "../gtx/closest_point.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    46 # pragma message("GLM: GLM_GTX_closest_point extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    57  template <typename genType>
    +
    58  GLM_FUNC_DECL bool intersectRayPlane(
    +
    59  genType const & orig, genType const & dir,
    +
    60  genType const & planeOrig, genType const & planeNormal,
    +
    61  typename genType::value_type & intersectionDistance);
    +
    62 
    +
    65  template <typename genType>
    +
    66  GLM_FUNC_DECL bool intersectRayTriangle(
    +
    67  genType const & orig, genType const & dir,
    +
    68  genType const & vert0, genType const & vert1, genType const & vert2,
    +
    69  genType & baryPosition);
    +
    70 
    +
    73  template <typename genType>
    +
    74  GLM_FUNC_DECL bool intersectLineTriangle(
    +
    75  genType const & orig, genType const & dir,
    +
    76  genType const & vert0, genType const & vert1, genType const & vert2,
    +
    77  genType & position);
    +
    78 
    +
    82  template <typename genType>
    +
    83  GLM_FUNC_DECL bool intersectRaySphere(
    +
    84  genType const & rayStarting, genType const & rayNormalizedDirection,
    +
    85  genType const & sphereCenter, typename genType::value_type const sphereRadiusSquered,
    +
    86  typename genType::value_type & intersectionDistance);
    +
    87 
    +
    90  template <typename genType>
    +
    91  GLM_FUNC_DECL bool intersectRaySphere(
    +
    92  genType const & rayStarting, genType const & rayNormalizedDirection,
    +
    93  genType const & sphereCenter, const typename genType::value_type sphereRadius,
    +
    94  genType & intersectionPosition, genType & intersectionNormal);
    +
    95 
    +
    98  template <typename genType>
    +
    99  GLM_FUNC_DECL bool intersectLineSphere(
    +
    100  genType const & point0, genType const & point1,
    +
    101  genType const & sphereCenter, typename genType::value_type sphereRadius,
    +
    102  genType & intersectionPosition1, genType & intersectionNormal1,
    +
    103  genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());
    +
    104 
    +
    106 }//namespace glm
    +
    107 
    +
    108 #include "intersect.inl"
    +
    GLM_FUNC_DECL bool intersectLineTriangle(genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
    Compute the intersection of a line and a triangle.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL bool intersectRayTriangle(genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
    Compute the intersection of a ray and a triangle.
    +
    GLM_FUNC_DECL bool intersectLineSphere(genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
    Compute the intersection of a line and a sphere.
    +
    GLM_FUNC_DECL bool intersectRayPlane(genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
    Compute the intersection of a ray and a triangle.
    +
    GLM_FUNC_DECL bool intersectRaySphere(genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
    Compute the intersection of a ray and a sphere.
    diff --git a/doc/api/a00047.html b/doc/api/a00047.html index fe93462e..546c5bed 100644 --- a/doc/api/a00047.html +++ b/doc/api/a00047.html @@ -3,8 +3,8 @@ - -GLM: inertia.hpp File Reference + +0.9.6: intrinsic_common.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,43 +41,38 @@
    -
    -
    inertia.hpp File Reference
    +
    intrinsic_common.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_inertia

    -
    Date
    2006-04-21 / 2011-06-07
    +

    GLM Core

    +
    Date
    2009-05-11 / 2011-06-15
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_extented_min_max (dependence)
    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2009-06-05 / 2011-06-15
    +
    Author
    Christophe Riccio
    -

    Definition in file inertia.hpp.

    +

    Definition in file intrinsic_common.hpp.

    diff --git a/doc/api/a00047_source.html b/doc/api/a00047_source.html index f56a9492..bb1047da 100644 --- a/doc/api/a00047_source.html +++ b/doc/api/a00047_source.html @@ -3,8 +3,8 @@ - -GLM: inertia.hpp Source File + +0.9.6: intrinsic_common.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,80 +41,82 @@
    -
    inertia.hpp
    +
    intrinsic_common.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_inertia
    -
    40 #define GLM_GTX_inertia
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_inertia extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    51  /*
    -
    54 
    -
    57  template <typename T, precision P>
    -
    58  detail::tmat3x3<T, P> boxInertia3(
    -
    59  T const & Mass,
    -
    60  detail::tvec3<T, P> const & Scale);
    -
    61 
    -
    64  template <typename T, precision P>
    -
    65  detail::tmat4x4<T, P> boxInertia4(
    -
    66  T const & Mass,
    -
    67  detail::tvec3<T, P> const & Scale);
    -
    68 
    -
    71  template <typename T, precision P>
    -
    72  detail::tmat3x3<T, P> diskInertia3(
    -
    73  T const & Mass,
    -
    74  T const & Radius);
    -
    75 
    -
    78  template <typename T, precision P>
    -
    79  detail::tmat4x4<T, P> diskInertia4(
    -
    80  T const & Mass,
    -
    81  T const & Radius);
    -
    82 
    -
    85  template <typename T, precision P>
    -
    86  detail::tmat3x3<T, P> ballInertia3(
    -
    87  T const & Mass,
    -
    88  T const & Radius);
    -
    89 
    -
    92  template <typename T, precision P>
    -
    93  detail::tmat4x4<T, P> ballInertia4(
    -
    94  T const & Mass,
    -
    95  T const & Radius);
    -
    96 
    -
    99  template <typename T, precision P>
    -
    100  detail::tmat3x3<T, P> sphereInertia3(
    -
    101  T const & Mass,
    -
    102  T const & Radius);
    -
    103 
    -
    106  template <typename T, precision P>
    -
    107  detail::tmat4x4<T, P> sphereInertia4(
    -
    108  T const & Mass,
    -
    109  T const & Radius);
    -
    110  */
    -
    112 }// namespace glm
    -
    113 
    -
    114 #include "inertia.inl"
    -
    115 
    -
    116 #endif//GLM_GTX_inertia
    +
    29 #pragma once
    +
    30 
    +
    31 #include "setup.hpp"
    +
    32 
    +
    33 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    34 # error "SSE2 instructions not supported or enabled"
    +
    35 #else
    +
    36 
    +
    37 namespace glm{
    +
    38 namespace detail
    +
    39 {
    +
    40  __m128 sse_abs_ps(__m128 x);
    +
    41 
    +
    42  __m128 sse_sgn_ps(__m128 x);
    +
    43 
    +
    44  //floor
    +
    45  __m128 sse_flr_ps(__m128 v);
    +
    46 
    +
    47  //trunc
    +
    48  __m128 sse_trc_ps(__m128 v);
    +
    49 
    +
    50  //round
    +
    51  __m128 sse_nd_ps(__m128 v);
    +
    52 
    +
    53  //roundEven
    +
    54  __m128 sse_rde_ps(__m128 v);
    +
    55 
    +
    56  __m128 sse_rnd_ps(__m128 x);
    +
    57 
    +
    58  __m128 sse_ceil_ps(__m128 v);
    +
    59 
    +
    60  __m128 sse_frc_ps(__m128 x);
    +
    61 
    +
    62  __m128 sse_mod_ps(__m128 x, __m128 y);
    +
    63 
    +
    64  __m128 sse_modf_ps(__m128 x, __m128i & i);
    +
    65 
    +
    66  //GLM_FUNC_QUALIFIER __m128 sse_min_ps(__m128 x, __m128 y)
    +
    67 
    +
    68  //GLM_FUNC_QUALIFIER __m128 sse_max_ps(__m128 x, __m128 y)
    +
    69 
    +
    70  __m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal);
    +
    71 
    +
    72  __m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a);
    +
    73 
    +
    74  __m128 sse_stp_ps(__m128 edge, __m128 x);
    +
    75 
    +
    76  __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x);
    +
    77 
    +
    78  __m128 sse_nan_ps(__m128 x);
    +
    79 
    +
    80  __m128 sse_inf_ps(__m128 x);
    +
    81 
    +
    82 }//namespace detail
    +
    83 }//namespace glm
    +
    84 
    +
    85 #include "intrinsic_common.inl"
    +
    86 
    +
    87 #endif//GLM_ARCH
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00048.html b/doc/api/a00048.html new file mode 100644 index 00000000..6b2f085f --- /dev/null +++ b/doc/api/a00048.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: intrinsic_exponential.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    intrinsic_exponential.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2009-05-11 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file intrinsic_exponential.hpp.

    +
    + + + + diff --git a/doc/api/a00048_source.html b/doc/api/a00048_source.html index 26150855..92e95637 100644 --- a/doc/api/a00048_source.html +++ b/doc/api/a00048_source.html @@ -3,8 +3,8 @@ - -GLM: int_10_10_10_2.hpp Source File + +0.9.6: intrinsic_exponential.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,44 +41,72 @@
    -
    int_10_10_10_2.hpp
    +
    intrinsic_exponential.hpp
    -
    1 
    -
    24 #ifndef GLM_GTX_int_10_10_10_2
    -
    25 #define GLM_GTX_int_10_10_10_2
    -
    26 
    -
    27 // Dependency:
    -
    28 #include "../glm.hpp"
    -
    29 #include "../gtx/raw_data.hpp"
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    30 
    -
    31 #if(defined(GLM_MESSAGES))
    -
    32 # pragma message("GLM: GLM_GTX_int_10_10_10_2 extension is deprecated, include GLM_GTC_packing (glm/gtc/packing.hpp) instead")
    -
    33 #endif
    -
    34 
    -
    35 namespace glm
    -
    36 {
    -
    38  GLM_DEPRECATED dword uint10_10_10_2_cast(glm::vec4 const & v);
    -
    39 
    -
    40 }//namespace glm
    -
    41 
    -
    42 #include "int_10_10_10_2.inl"
    -
    43 
    -
    44 #endif//GLM_GTX_int_10_10_10_2
    -
    detail::uint32 dword
    Type for dword numbers.
    Definition: raw_data.hpp:63
    -
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    -
    GLM_DEPRECATED dword uint10_10_10_2_cast(glm::vec4 const &v)
    Deprecated, use packUnorm3x10_1x2 instead.
    +
    31 #include "setup.hpp"
    +
    32 
    +
    33 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    34 # error "SSE2 instructions not supported or enabled"
    +
    35 #else
    +
    36 
    +
    37 namespace glm{
    +
    38 namespace detail
    +
    39 {
    +
    40 /*
    +
    41 GLM_FUNC_QUALIFIER __m128 sse_rsqrt_nr_ss(__m128 const x)
    +
    42 {
    +
    43  __m128 recip = _mm_rsqrt_ss( x ); // "estimate" opcode
    +
    44  const static __m128 three = { 3, 3, 3, 3 }; // aligned consts for fast load
    +
    45  const static __m128 half = { 0.5,0.5,0.5,0.5 };
    +
    46  __m128 halfrecip = _mm_mul_ss( half, recip );
    +
    47  __m128 threeminus_xrr = _mm_sub_ss( three, _mm_mul_ss( x, _mm_mul_ss ( recip, recip ) ) );
    +
    48  return _mm_mul_ss( halfrecip, threeminus_xrr );
    +
    49 }
    +
    50 
    +
    51 GLM_FUNC_QUALIFIER __m128 sse_normalize_fast_ps( float * RESTRICT vOut, float * RESTRICT vIn )
    +
    52 {
    +
    53  __m128 x = _mm_load_ss(&vIn[0]);
    +
    54  __m128 y = _mm_load_ss(&vIn[1]);
    +
    55  __m128 z = _mm_load_ss(&vIn[2]);
    +
    56 
    +
    57  const __m128 l = // compute x*x + y*y + z*z
    +
    58  _mm_add_ss(
    +
    59  _mm_add_ss( _mm_mul_ss(x,x),
    +
    60  _mm_mul_ss(y,y)
    +
    61  ),
    +
    62  _mm_mul_ss( z, z )
    +
    63  );
    +
    64 
    +
    65 
    +
    66  const __m128 rsqt = _mm_rsqrt_nr_ss( l );
    +
    67  _mm_store_ss( &vOut[0] , _mm_mul_ss( rsqt, x ) );
    +
    68  _mm_store_ss( &vOut[1] , _mm_mul_ss( rsqt, y ) );
    +
    69  _mm_store_ss( &vOut[2] , _mm_mul_ss( rsqt, z ) );
    +
    70 
    +
    71  return _mm_mul_ss( l , rsqt );
    +
    72 }
    +
    73 */
    +
    74 }//namespace detail
    +
    75 }//namespace glm
    +
    76 
    +
    77 #endif//GLM_ARCH
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00049.html b/doc/api/a00049.html index fc82dad3..485df174 100644 --- a/doc/api/a00049.html +++ b/doc/api/a00049.html @@ -3,8 +3,8 @@ - -GLM: integer.hpp File Reference + +0.9.6: intrinsic_geometric.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,73 +41,32 @@
    -
    -
    gtx/integer.hpp File Reference
    +
    intrinsic_geometric.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - -

    -Typedefs

    typedef signed int sint
     
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename genType >
    genType factorial (genType const &x)
     
    unsigned int floor_log2 (unsigned int x)
     
    template<typename genIUType >
    genIUType log2 (genIUType const &x)
     
    int mod (int x, int y)
     
    uint mod (uint x, uint y)
     
    uint nlz (uint x)
     
    int pow (int x, int y)
     
    uint pow (uint x, uint y)
     
    int sqrt (int x)
     
    uint sqrt (uint x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_integer

    -
    Date
    2005-12-24 / 2011-10-13
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +

    GLM Core

    +
    Date
    2009-05-08 / 2011-06-15
    +
    Author
    Christophe Riccio
    -

    Definition in file gtx/integer.hpp.

    +

    Definition in file intrinsic_geometric.hpp.

    diff --git a/doc/api/a00049_source.html b/doc/api/a00049_source.html index 6c5bb318..63f85fe4 100644 --- a/doc/api/a00049_source.html +++ b/doc/api/a00049_source.html @@ -3,8 +3,8 @@ - -GLM: integer.hpp Source File + +0.9.6: intrinsic_geometric.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,72 +41,70 @@
    -
    gtx/integer.hpp
    +
    intrinsic_geometric.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_integer
    -
    39 #define GLM_GTX_integer
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_integer extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  int pow(int x, int y);
    +
    29 #pragma once
    +
    30 
    +
    31 #include "setup.hpp"
    +
    32 
    +
    33 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    34 # error "SSE2 instructions not supported or enabled"
    +
    35 #else
    +
    36 
    +
    37 #include "intrinsic_common.hpp"
    +
    38 
    +
    39 namespace glm{
    +
    40 namespace detail
    +
    41 {
    +
    42  //length
    +
    43  __m128 sse_len_ps(__m128 x);
    +
    44 
    +
    45  //distance
    +
    46  __m128 sse_dst_ps(__m128 p0, __m128 p1);
    +
    47 
    +
    48  //dot
    +
    49  __m128 sse_dot_ps(__m128 v1, __m128 v2);
    +
    50 
    +
    51  // SSE1
    +
    52  __m128 sse_dot_ss(__m128 v1, __m128 v2);
    +
    53 
    +
    54  //cross
    +
    55  __m128 sse_xpd_ps(__m128 v1, __m128 v2);
    56 
    -
    59  int sqrt(int x);
    -
    60 
    -
    63  template <typename genIUType>
    -
    64  genIUType log2(genIUType const & x);
    +
    57  //normalize
    +
    58  __m128 sse_nrm_ps(__m128 v);
    +
    59 
    +
    60  //faceforward
    +
    61  __m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref);
    +
    62 
    +
    63  //reflect
    +
    64  __m128 sse_rfe_ps(__m128 I, __m128 N);
    65 
    -
    68  unsigned int floor_log2(unsigned int x);
    -
    69 
    -
    72  int mod(int x, int y);
    +
    66  //refract
    +
    67  __m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta);
    +
    68 
    +
    69 }//namespace detail
    +
    70 }//namespace glm
    +
    71 
    +
    72 #include "intrinsic_geometric.inl"
    73 
    -
    76  template <typename genType>
    -
    77  genType factorial(genType const & x);
    -
    78 
    -
    81  typedef signed int sint;
    -
    82 
    -
    85  uint pow(uint x, uint y);
    -
    86 
    -
    89  uint sqrt(uint x);
    -
    90 
    -
    93  uint mod(uint x, uint y);
    -
    94 
    -
    97  uint nlz(uint x);
    -
    98 
    -
    100 }//namespace glm
    -
    101 
    -
    102 #include "integer.inl"
    -
    103 
    -
    104 #endif//GLM_GTX_integer
    -
    GLM_FUNC_DECL genType sqrt(genType const &x)
    Returns the positive square root of x.
    -
    unsigned int floor_log2(unsigned int x)
    Returns the floor log2 of x.
    -
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:171
    -
    signed int sint
    32bit signed integer.
    Definition: gtx/integer.hpp:81
    -
    GLM_FUNC_DECL genType mod(genType const &x, genType const &y)
    Modulus.
    -
    GLM_FUNC_DECL genType log2(genType const &x)
    Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y...
    -
    genType factorial(genType const &x)
    Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension...
    -
    GLM_FUNC_DECL genType pow(genType const &base, genType const &exponent)
    Returns &#39;base&#39; raised to the power &#39;exponent&#39;.
    -
    uint nlz(uint x)
    Returns the number of leading zeros.
    +
    74 #endif//GLM_ARCH
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00050.html b/doc/api/a00050.html index 223e01e0..292f1f6e 100644 --- a/doc/api/a00050.html +++ b/doc/api/a00050.html @@ -3,8 +3,8 @@ - -GLM: integer.hpp File Reference + +0.9.6: intrinsic_integer.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,32 +41,32 @@
    -
    integer.hpp File Reference
    +
    intrinsic_integer.hpp File Reference

    Go to the source code of this file.

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    +

    GLM Core

    +
    Date
    2009-05-11 / 2011-06-15
    Author
    Christophe Riccio
    -

    Definition in file integer.hpp.

    +

    Definition in file intrinsic_integer.hpp.

    diff --git a/doc/api/a00050_source.html b/doc/api/a00050_source.html index b92d295c..392664ef 100644 --- a/doc/api/a00050_source.html +++ b/doc/api/a00050_source.html @@ -3,8 +3,8 @@ - -GLM: integer.hpp Source File + +0.9.6: intrinsic_integer.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,43 @@
    -
    integer.hpp
    +
    intrinsic_integer.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_INTEGER_INCLUDED
    -
    30 #define GLM_INTEGER_INCLUDED
    -
    31 
    -
    32 #include "detail/func_integer.hpp"
    -
    33 
    -
    34 #endif//GLM_INTEGER_INCLUDED
    +
    29 #pragma once
    +
    30 
    +
    31 #include "glm/glm.hpp"
    +
    32 
    +
    33 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    34 # error "SSE2 instructions not supported or enabled"
    +
    35 #else
    +
    36 
    +
    37 namespace glm{
    +
    38 namespace detail
    +
    39 {
    +
    40  __m128i _mm_bit_interleave_si128(__m128i x);
    +
    41  __m128i _mm_bit_interleave_si128(__m128i x, __m128i y);
    +
    42 
    +
    43 }//namespace detail
    +
    44 }//namespace glm
    +
    45 
    +
    46 #include "intrinsic_integer.inl"
    +
    47 
    +
    48 #endif//GLM_ARCH
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00051.html b/doc/api/a00051.html deleted file mode 100644 index 32f88c89..00000000 --- a/doc/api/a00051.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - -GLM: intersect.hpp File Reference - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    - -
    -
    intersect.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename genType >
    bool intersectLineSphere (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
     
    template<typename genType >
    bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
     
    template<typename genType >
    bool intersectRayPlane (genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
     
    template<typename genType >
    bool intersectRayTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
     
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_intersect

    -
    Date
    2007-04-03 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_closest_point (dependence)
    - -

    Definition in file intersect.hpp.

    -
    - - - - diff --git a/doc/api/a00051_source.html b/doc/api/a00051_source.html index df8fa596..632ee19b 100644 --- a/doc/api/a00051_source.html +++ b/doc/api/a00051_source.html @@ -3,8 +3,8 @@ - -GLM: intersect.hpp Source File + +0.9.6: intrinsic_matrix.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,82 +41,63 @@
    -
    intersect.hpp
    +
    intrinsic_matrix.hpp
    -Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_intersect
    -
    40 #define GLM_GTX_intersect
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 #include "../gtx/closest_point.hpp"
    +
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "setup.hpp"
    +
    32 
    +
    33 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    34 # error "SSE2 instructions not supported or enabled"
    +
    35 #else
    +
    36 
    +
    37 #include "intrinsic_geometric.hpp"
    +
    38 
    +
    39 namespace glm{
    +
    40 namespace detail
    +
    41 {
    +
    42  void sse_add_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
    +
    43 
    +
    44  void sse_sub_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_closest_point extension included")
    -
    48 #endif
    -
    49 
    -
    50 namespace glm
    -
    51 {
    -
    54 
    -
    58  template <typename genType>
    -
    59  bool intersectRayPlane(
    -
    60  genType const & orig, genType const & dir,
    -
    61  genType const & planeOrig, genType const & planeNormal,
    -
    62  typename genType::value_type & intersectionDistance);
    -
    63 
    -
    66  template <typename genType>
    - -
    68  genType const & orig, genType const & dir,
    -
    69  genType const & vert0, genType const & vert1, genType const & vert2,
    -
    70  genType & baryPosition);
    -
    71 
    -
    74  template <typename genType>
    - -
    76  genType const & orig, genType const & dir,
    -
    77  genType const & vert0, genType const & vert1, genType const & vert2,
    -
    78  genType & position);
    -
    79 
    -
    83  template <typename genType>
    -
    84  bool intersectRaySphere(
    -
    85  genType const & rayStarting, genType const & rayNormalizedDirection,
    -
    86  genType const & sphereCenter, typename genType::value_type const sphereRadiusSquered,
    -
    87  typename genType::value_type & intersectionDistance);
    -
    88 
    -
    91  template <typename genType>
    -
    92  bool intersectRaySphere(
    -
    93  genType const & rayStarting, genType const & rayNormalizedDirection,
    -
    94  genType const & sphereCenter, const typename genType::value_type sphereRadius,
    -
    95  genType & intersectionPosition, genType & intersectionNormal);
    -
    96 
    -
    99  template <typename genType>
    -
    100  bool intersectLineSphere(
    -
    101  genType const & point0, genType const & point1,
    -
    102  genType const & sphereCenter, typename genType::value_type sphereRadius,
    -
    103  genType & intersectionPosition1, genType & intersectionNormal1,
    -
    104  genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());
    -
    105 
    -
    107 }//namespace glm
    -
    108 
    -
    109 #include "intersect.inl"
    -
    110 
    -
    111 #endif//GLM_GTX_intersect
    -
    bool intersectLineTriangle(genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
    Compute the intersection of a line and a triangle.
    -
    bool intersectRayPlane(genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
    Compute the intersection of a ray and a triangle.
    -
    bool intersectRaySphere(genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)
    Compute the intersection distance of a ray and a sphere.
    -
    bool intersectLineSphere(genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
    Compute the intersection of a line and a sphere.
    -
    bool intersectRayTriangle(genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
    Compute the intersection of a ray and a triangle.
    +
    46  __m128 sse_mul_ps(__m128 m[4], __m128 v);
    +
    47 
    +
    48  __m128 sse_mul_ps(__m128 v, __m128 m[4]);
    +
    49 
    +
    50  void sse_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4]);
    +
    51 
    +
    52  void sse_transpose_ps(__m128 const in[4], __m128 out[4]);
    +
    53 
    +
    54  void sse_inverse_ps(__m128 const in[4], __m128 out[4]);
    +
    55 
    +
    56  void sse_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4]);
    +
    57 
    +
    58  __m128 sse_det_ps(__m128 const m[4]);
    +
    59 
    +
    60  __m128 sse_slow_det_ps(__m128 const m[4]);
    +
    61 
    +
    62 }//namespace detail
    +
    63 }//namespace glm
    +
    64 
    +
    65 #include "intrinsic_matrix.inl"
    +
    66 
    +
    67 #endif//GLM_ARCH
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00052.html b/doc/api/a00052.html new file mode 100644 index 00000000..c818da28 --- /dev/null +++ b/doc/api/a00052.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: intrinsic_trigonometric.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    intrinsic_trigonometric.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2009-06-09 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file intrinsic_trigonometric.hpp.

    +
    + + + + diff --git a/doc/api/a00052_source.html b/doc/api/a00052_source.html index c7a53107..af32bbdf 100644 --- a/doc/api/a00052_source.html +++ b/doc/api/a00052_source.html @@ -3,8 +3,8 @@ - -GLM: intrinsic_common.hpp Source File + +0.9.6: intrinsic_trigonometric.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,82 +41,41 @@
    -
    intrinsic_common.hpp
    +
    intrinsic_trigonometric.hpp
    -
    1 
    -
    29 #ifndef glm_detail_intrinsic_common
    -
    30 #define glm_detail_intrinsic_common
    -
    31 
    -
    32 #include "setup.hpp"
    -
    33 
    -
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    -
    35 # error "SSE2 instructions not supported or enabled"
    -
    36 #else
    -
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41  __m128 sse_abs_ps(__m128 x);
    -
    42 
    -
    43  __m128 sse_sgn_ps(__m128 x);
    -
    44 
    -
    45  //floor
    -
    46  __m128 sse_flr_ps(__m128 v);
    -
    47 
    -
    48  //trunc
    -
    49  __m128 sse_trc_ps(__m128 v);
    -
    50 
    -
    51  //round
    -
    52  __m128 sse_nd_ps(__m128 v);
    -
    53 
    -
    54  //roundEven
    -
    55  __m128 sse_rde_ps(__m128 v);
    -
    56 
    -
    57  __m128 sse_rnd_ps(__m128 x);
    -
    58 
    -
    59  __m128 sse_ceil_ps(__m128 v);
    -
    60 
    -
    61  __m128 sse_frc_ps(__m128 x);
    -
    62 
    -
    63  __m128 sse_mod_ps(__m128 x, __m128 y);
    -
    64 
    -
    65  __m128 sse_modf_ps(__m128 x, __m128i & i);
    -
    66 
    -
    67  //GLM_FUNC_QUALIFIER __m128 sse_min_ps(__m128 x, __m128 y)
    -
    68 
    -
    69  //GLM_FUNC_QUALIFIER __m128 sse_max_ps(__m128 x, __m128 y)
    -
    70 
    -
    71  __m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal);
    -
    72 
    -
    73  __m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a);
    -
    74 
    -
    75  __m128 sse_stp_ps(__m128 edge, __m128 x);
    -
    76 
    -
    77  __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x);
    -
    78 
    -
    79  __m128 sse_nan_ps(__m128 x);
    -
    80 
    -
    81  __m128 sse_inf_ps(__m128 x);
    -
    82 
    -
    83 }//namespace detail
    -
    84 }//namespace glm
    -
    85 
    -
    86 #include "intrinsic_common.inl"
    -
    87 
    -
    88 #endif//GLM_ARCH
    -
    89 #endif//glm_detail_intrinsic_common
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "setup.hpp"
    +
    32 
    +
    33 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    34 # error "SSE2 instructions not supported or enabled"
    +
    35 #else
    +
    36 
    +
    37 namespace glm{
    +
    38 namespace detail
    +
    39 {
    +
    40 
    +
    41 }//namespace detail
    +
    42 }//namespace glm
    +
    43 
    +
    44 #include "intrinsic_trigonometric.inl"
    +
    45 
    +
    46 #endif//GLM_ARCH
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00053.html b/doc/api/a00053.html new file mode 100644 index 00000000..2635f3e4 --- /dev/null +++ b/doc/api/a00053.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: intrinsic_vector_relational.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    intrinsic_vector_relational.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2009-06-09 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file intrinsic_vector_relational.hpp.

    +
    + + + + diff --git a/doc/api/a00053_source.html b/doc/api/a00053_source.html index 2f65e069..6d115b5a 100644 --- a/doc/api/a00053_source.html +++ b/doc/api/a00053_source.html @@ -3,8 +3,8 @@ - -GLM: intrinsic_exponential.hpp Source File + +0.9.6: intrinsic_vector_relational.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,72 +41,41 @@
    -
    intrinsic_exponential.hpp
    +
    intrinsic_vector_relational.hpp
    -
    1 
    -
    29 #ifndef glm_detail_intrinsic_exponential
    -
    30 #define glm_detail_intrinsic_exponential
    -
    31 
    -
    32 #include "setup.hpp"
    -
    33 
    -
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    -
    35 # error "SSE2 instructions not supported or enabled"
    -
    36 #else
    -
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41 /*
    -
    42 GLM_FUNC_QUALIFIER __m128 sse_rsqrt_nr_ss(__m128 const x)
    -
    43 {
    -
    44  __m128 recip = _mm_rsqrt_ss( x ); // "estimate" opcode
    -
    45  const static __m128 three = { 3, 3, 3, 3 }; // aligned consts for fast load
    -
    46  const static __m128 half = { 0.5,0.5,0.5,0.5 };
    -
    47  __m128 halfrecip = _mm_mul_ss( half, recip );
    -
    48  __m128 threeminus_xrr = _mm_sub_ss( three, _mm_mul_ss( x, _mm_mul_ss ( recip, recip ) ) );
    -
    49  return _mm_mul_ss( halfrecip, threeminus_xrr );
    -
    50 }
    -
    51 
    -
    52 GLM_FUNC_QUALIFIER __m128 sse_normalize_fast_ps( float * RESTRICT vOut, float * RESTRICT vIn )
    -
    53 {
    -
    54  __m128 x = _mm_load_ss(&vIn[0]);
    -
    55  __m128 y = _mm_load_ss(&vIn[1]);
    -
    56  __m128 z = _mm_load_ss(&vIn[2]);
    -
    57 
    -
    58  const __m128 l = // compute x*x + y*y + z*z
    -
    59  _mm_add_ss(
    -
    60  _mm_add_ss( _mm_mul_ss(x,x),
    -
    61  _mm_mul_ss(y,y)
    -
    62  ),
    -
    63  _mm_mul_ss( z, z )
    -
    64  );
    -
    65 
    -
    66 
    -
    67  const __m128 rsqt = _mm_rsqrt_nr_ss( l );
    -
    68  _mm_store_ss( &vOut[0] , _mm_mul_ss( rsqt, x ) );
    -
    69  _mm_store_ss( &vOut[1] , _mm_mul_ss( rsqt, y ) );
    -
    70  _mm_store_ss( &vOut[2] , _mm_mul_ss( rsqt, z ) );
    -
    71 
    -
    72  return _mm_mul_ss( l , rsqt );
    -
    73 }
    -
    74 */
    -
    75 }//namespace detail
    -
    76 }//namespace glm
    -
    77 
    -
    78 #endif//GLM_ARCH
    -
    79 #endif//glm_detail_intrinsic_exponential
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "setup.hpp"
    +
    32 
    +
    33 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    +
    34 # error "SSE2 instructions not supported or enabled"
    +
    35 #else
    +
    36 
    +
    37 namespace glm{
    +
    38 namespace detail
    +
    39 {
    +
    40 
    +
    41 }//namespace detail
    +
    42 }//namespace glm
    +
    43 
    +
    44 #include "intrinsic_vector_relational.inl"
    +
    45 
    +
    46 #endif//GLM_ARCH
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00054.html b/doc/api/a00054.html new file mode 100644 index 00000000..f76989f9 --- /dev/null +++ b/doc/api/a00054.html @@ -0,0 +1,75 @@ + + + + + + +0.9.6: io.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    io.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_io

    +
    Date
    2013-11-22
    +
    Author
    Jan P Springer (regni.nosp@m.rpsj.nosp@m.@gmai.nosp@m.l.co.nosp@m.m)
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTC_quaternion (dependence)
    + +

    Definition in file io.hpp.

    +
    + + + + diff --git a/doc/api/a00054_source.html b/doc/api/a00054_source.html index 3cfa1ee8..922e3039 100644 --- a/doc/api/a00054_source.html +++ b/doc/api/a00054_source.html @@ -3,8 +3,8 @@ - -GLM: intrinsic_geometric.hpp Source File + +0.9.6: io.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,69 +41,197 @@
    -
    intrinsic_geometric.hpp
    +
    io.hpp
    -
    1 
    -
    29 #ifndef glm_core_intrinsic_geometric
    -
    30 #define glm_core_intrinsic_geometric
    -
    31 
    -
    32 #include "setup.hpp"
    -
    33 
    -
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    -
    35 # error "SSE2 instructions not supported or enabled"
    -
    36 #else
    -
    37 
    -
    38 #include "intrinsic_common.hpp"
    -
    39 
    -
    40 namespace glm{
    -
    41 namespace detail
    -
    42 {
    -
    43  //length
    -
    44  __m128 sse_len_ps(__m128 x);
    -
    45 
    -
    46  //distance
    -
    47  __m128 sse_dst_ps(__m128 p0, __m128 p1);
    +Go to the documentation of this file.
    1 
    +
    43 #pragma once
    +
    44 
    +
    45 // Dependency:
    +
    46 #include "../glm.hpp"
    +
    47 #include "../gtx/quaternion.hpp"
    48 
    -
    49  //dot
    -
    50  __m128 sse_dot_ps(__m128 v1, __m128 v2);
    -
    51 
    -
    52  // SSE1
    -
    53  __m128 sse_dot_ss(__m128 v1, __m128 v2);
    -
    54 
    -
    55  //cross
    -
    56  __m128 sse_xpd_ps(__m128 v1, __m128 v2);
    -
    57 
    -
    58  //normalize
    -
    59  __m128 sse_nrm_ps(__m128 v);
    -
    60 
    -
    61  //faceforward
    -
    62  __m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref);
    -
    63 
    -
    64  //reflect
    -
    65  __m128 sse_rfe_ps(__m128 I, __m128 N);
    -
    66 
    -
    67  //refract
    -
    68  __m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta);
    -
    69 
    -
    70 }//namespace detail
    -
    71 }//namespace glm
    +
    49 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    +
    50 # pragma message("GLM: GLM_GTX_io extension included")
    +
    51 #endif
    +
    52 
    +
    53 #include <iosfwd> // std::basic_ostream<> (fwd)
    +
    54 #include <locale> // std::locale, std::locale::facet, std::locale::id
    +
    55 #include <utility> // std::pair<>
    +
    56 
    +
    57 namespace glm
    +
    58 {
    +
    61 
    +
    62  namespace io
    +
    63  {
    +
    64  enum order_type { column_major, row_major};
    +
    65 
    +
    66  template <typename CTy>
    +
    67  class format_punct : public std::locale::facet
    +
    68  {
    +
    69  typedef CTy char_type;
    +
    70 
    +
    71  public:
    72 
    -
    73 #include "intrinsic_geometric.inl"
    +
    73  static std::locale::id id;
    74 
    -
    75 #endif//GLM_ARCH
    -
    76 #endif//glm_core_intrinsic_geometric
    +
    75  bool formatted;
    +
    76  unsigned precision;
    +
    77  unsigned width;
    +
    78  char_type separator;
    +
    79  char_type delim_left;
    +
    80  char_type delim_right;
    +
    81  char_type space;
    +
    82  char_type newline;
    +
    83  order_type order;
    +
    84 
    +
    85  explicit format_punct(size_t a = 0);
    +
    86  explicit format_punct(format_punct const&);
    +
    87  };
    +
    88 
    +
    89  template <typename CTy, typename CTr = std::char_traits<CTy> >
    +
    90  class basic_state_saver {
    +
    91 
    +
    92  public:
    +
    93 
    +
    94  explicit basic_state_saver(std::basic_ios<CTy,CTr>&);
    +
    95  ~basic_state_saver();
    +
    96 
    +
    97  private:
    +
    98 
    +
    99  typedef ::std::basic_ios<CTy,CTr> state_type;
    +
    100  typedef typename state_type::char_type char_type;
    +
    101  typedef ::std::ios_base::fmtflags flags_type;
    +
    102  typedef ::std::streamsize streamsize_type;
    +
    103  typedef ::std::locale const locale_type;
    +
    104 
    +
    105  state_type& state_;
    +
    106  flags_type flags_;
    +
    107  streamsize_type precision_;
    +
    108  streamsize_type width_;
    +
    109  char_type fill_;
    +
    110  locale_type locale_;
    +
    111 
    +
    112  basic_state_saver& operator=(basic_state_saver const&);
    +
    113  };
    +
    114 
    +
    115  typedef basic_state_saver<char> state_saver;
    +
    116  typedef basic_state_saver<wchar_t> wstate_saver;
    +
    117 
    +
    118  template <typename CTy, typename CTr = std::char_traits<CTy> >
    +
    119  class basic_format_saver
    +
    120  {
    +
    121  public:
    +
    122 
    +
    123  explicit basic_format_saver(std::basic_ios<CTy,CTr>&);
    +
    124  ~basic_format_saver();
    +
    125 
    +
    126  private:
    +
    127 
    +
    128  basic_state_saver<CTy> const bss_;
    +
    129 
    +
    130  basic_format_saver& operator=(basic_format_saver const&);
    +
    131  };
    +
    132 
    +
    133  typedef basic_format_saver<char> format_saver;
    +
    134  typedef basic_format_saver<wchar_t> wformat_saver;
    +
    135 
    +
    136  struct precision
    +
    137  {
    +
    138  unsigned value;
    +
    139 
    +
    140  explicit precision(unsigned);
    +
    141  };
    +
    142 
    +
    143  struct width
    +
    144  {
    +
    145  unsigned value;
    +
    146 
    +
    147  explicit width(unsigned);
    +
    148  };
    +
    149 
    +
    150  template <typename CTy>
    +
    151  struct delimeter
    +
    152  {
    +
    153  CTy value[3];
    +
    154 
    +
    155  explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ',');
    +
    156  };
    +
    157 
    +
    158  struct order
    +
    159  {
    +
    160  order_type value;
    +
    161 
    +
    162  explicit order(order_type);
    +
    163  };
    +
    164 
    +
    165  // functions, inlined (inline)
    +
    166 
    +
    167  template <typename FTy, typename CTy, typename CTr>
    +
    168  FTy const& get_facet(std::basic_ios<CTy,CTr>&);
    +
    169  template <typename FTy, typename CTy, typename CTr>
    +
    170  std::basic_ios<CTy,CTr>& formatted(std::basic_ios<CTy,CTr>&);
    +
    171  template <typename FTy, typename CTy, typename CTr>
    +
    172  std::basic_ios<CTy,CTr>& unformattet(std::basic_ios<CTy,CTr>&);
    +
    173 
    +
    174  template <typename CTy, typename CTr>
    +
    175  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, precision const&);
    +
    176  template <typename CTy, typename CTr>
    +
    177  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, width const&);
    +
    178  template <typename CTy, typename CTr>
    +
    179  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, delimeter<CTy> const&);
    +
    180  template <typename CTy, typename CTr>
    +
    181  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, order const&);
    +
    182  }//namespace io
    +
    183 
    +
    184  template <typename CTy, typename CTr, typename T, precision P>
    +
    185  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tquat<T,P> const&);
    +
    186  template <typename CTy, typename CTr, typename T, precision P>
    +
    187  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec2<T,P> const&);
    +
    188  template <typename CTy, typename CTr, typename T, precision P>
    +
    189  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec3<T,P> const&);
    +
    190  template <typename CTy, typename CTr, typename T, precision P>
    +
    191  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec4<T,P> const&);
    +
    192  template <typename CTy, typename CTr, typename T, precision P>
    +
    193  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x2<T,P> const&);
    +
    194  template <typename CTy, typename CTr, typename T, precision P>
    +
    195  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x3<T,P> const&);
    +
    196  template <typename CTy, typename CTr, typename T, precision P>
    +
    197  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x4<T,P> const&);
    +
    198  template <typename CTy, typename CTr, typename T, precision P>
    +
    199  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x2<T,P> const&);
    +
    200  template <typename CTy, typename CTr, typename T, precision P>
    +
    201  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x3<T,P> const&);
    +
    202  template <typename CTy, typename CTr, typename T, precision P>
    +
    203  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x4<T,P> const&);
    +
    204  template <typename CTy, typename CTr, typename T, precision P>
    +
    205  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x2<T,P> const&);
    +
    206  template <typename CTy, typename CTr, typename T, precision P>
    +
    207  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x3<T,P> const&);
    +
    208  template <typename CTy, typename CTr, typename T, precision P>
    +
    209  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x4<T,P> const&);
    +
    210 
    +
    211  template <typename CTy, typename CTr, typename T, precision P>
    +
    212  GLM_FUNC_DECL std::basic_ostream<CTy,CTr> & operator<<(
    +
    213  std::basic_ostream<CTy,CTr> &,
    +
    214  std::pair<tmat4x4<T,P> const,
    +
    215  tmat4x4<T,P> const> const &);
    +
    216 
    +
    218 }//namespace glm
    +
    219 
    +
    220 #include "io.inl"
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00055.html b/doc/api/a00055.html new file mode 100644 index 00000000..52a52c7e --- /dev/null +++ b/doc/api/a00055.html @@ -0,0 +1,85 @@ + + + + + + +0.9.6: log_base.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    log_base.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType log (genType x, genType base)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sign (vecType< T, P > const &x, vecType< T, P > const &base)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_log_base

    +
    Date
    2008-10-24 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file log_base.hpp.

    +
    + + + + diff --git a/doc/api/a00055_source.html b/doc/api/a00055_source.html index 4eb3c5a2..8ed33583 100644 --- a/doc/api/a00055_source.html +++ b/doc/api/a00055_source.html @@ -3,8 +3,8 @@ - -GLM: intrinsic_integer.hpp Source File + +0.9.6: log_base.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,44 +41,49 @@
    -
    intrinsic_integer.hpp
    +
    log_base.hpp
    -
    1 
    -
    29 #ifndef glm_detail_intrinsic_integer
    -
    30 #define glm_detail_intrinsic_integer
    -
    31 
    -
    32 #include "glm/glm.hpp"
    -
    33 
    -
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    -
    35 # error "SSE2 instructions not supported or enabled"
    -
    36 #else
    -
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41  __m128i _mm_bit_interleave_si128(__m128i x);
    -
    42  __m128i _mm_bit_interleave_si128(__m128i x, __m128i y);
    -
    43 
    -
    44 }//namespace detail
    -
    45 }//namespace glm
    +Go to the documentation of this file.
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_log_base extension included")
    +
    45 #endif
    46 
    -
    47 #include "intrinsic_integer.inl"
    -
    48 
    -
    49 #endif//GLM_ARCH
    -
    50 #endif//glm_detail_intrinsic_integer
    -
    OpenGL Mathematics (glm.g-truc.net)
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename genType>
    +
    55  GLM_FUNC_DECL genType log(
    +
    56  genType x,
    +
    57  genType base);
    +
    58 
    +
    61  template <typename T, precision P, template <typename, precision> class vecType>
    +
    62  GLM_FUNC_DECL vecType<T, P> sign(
    +
    63  vecType<T, P> const & x,
    +
    64  vecType<T, P> const & base);
    +
    65 
    +
    67 }//namespace glm
    +
    68 
    +
    69 #include "log_base.inl"
    +
    GLM_FUNC_DECL genType log(genType x, genType base)
    Logarithm for any base.
    +
    GLM_FUNC_DECL vecType< T, P > sign(vecType< T, P > const &x, vecType< T, P > const &base)
    Logarithm for any base.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00056_source.html b/doc/api/a00056_source.html index 6168368e..cb813c8e 100644 --- a/doc/api/a00056_source.html +++ b/doc/api/a00056_source.html @@ -3,8 +3,8 @@ - -GLM: intrinsic_matrix.hpp Source File + +0.9.6: man.doxy Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,62 +41,2383 @@
    -
    intrinsic_matrix.hpp
    +
    man.doxy
    -
    1 
    -
    29 #ifndef glm_detail_intrinsic_matrix
    -
    30 #define glm_detail_intrinsic_matrix
    -
    31 
    -
    32 #include "setup.hpp"
    -
    33 
    -
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    -
    35 # error "SSE2 instructions not supported or enabled"
    -
    36 #else
    -
    37 
    -
    38 #include "intrinsic_geometric.hpp"
    -
    39 
    -
    40 namespace glm{
    -
    41 namespace detail
    -
    42 {
    -
    43  void sse_add_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
    -
    44 
    -
    45  void sse_sub_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
    +
    1 # Doxyfile 1.8.8
    +
    2 
    +
    3 # This file describes the settings to be used by the documentation system
    +
    4 # doxygen (www.doxygen.org) for a project.
    +
    5 #
    +
    6 # All text after a double hash (##) is considered a comment and is placed in
    +
    7 # front of the TAG it is preceding.
    +
    8 #
    +
    9 # All text after a single hash (#) is considered a comment and will be ignored.
    +
    10 # The format is:
    +
    11 # TAG = value [value, ...]
    +
    12 # For lists, items can also be appended using:
    +
    13 # TAG += value [value, ...]
    +
    14 # Values that contain spaces should be placed between quotes (\" \").
    +
    15 
    +
    16 #---------------------------------------------------------------------------
    +
    17 # Project related configuration options
    +
    18 #---------------------------------------------------------------------------
    +
    19 
    +
    20 # This tag specifies the encoding used for all characters in the config file
    +
    21 # that follow. The default is UTF-8 which is also the encoding used for all text
    +
    22 # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
    +
    23 # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
    +
    24 # for the list of possible encodings.
    +
    25 # The default value is: UTF-8.
    +
    26 
    +
    27 DOXYFILE_ENCODING = UTF-8
    +
    28 
    +
    29 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
    +
    30 # double-quotes, unless you are using Doxywizard) that should identify the
    +
    31 # project for which the documentation is generated. This name is used in the
    +
    32 # title of most generated pages and in a few other places.
    +
    33 # The default value is: My Project.
    +
    34 
    +
    35 PROJECT_NAME = 0.9.6
    +
    36 
    +
    37 # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
    +
    38 # could be handy for archiving the generated documentation or if some version
    +
    39 # control system is used.
    +
    40 
    +
    41 PROJECT_NUMBER =
    +
    42 
    +
    43 # Using the PROJECT_BRIEF tag one can provide an optional one line description
    +
    44 # for a project that appears at the top of each page and should give viewer a
    +
    45 # quick idea about the purpose of the project. Keep the description short.
    46 
    -
    47  __m128 sse_mul_ps(__m128 m[4], __m128 v);
    +
    47 PROJECT_BRIEF =
    48 
    -
    49  __m128 sse_mul_ps(__m128 v, __m128 m[4]);
    -
    50 
    -
    51  void sse_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4]);
    -
    52 
    -
    53  void sse_transpose_ps(__m128 const in[4], __m128 out[4]);
    -
    54 
    -
    55  void sse_inverse_ps(__m128 const in[4], __m128 out[4]);
    -
    56 
    -
    57  void sse_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4]);
    -
    58 
    -
    59  __m128 sse_det_ps(__m128 const m[4]);
    +
    49 # With the PROJECT_LOGO tag one can specify an logo or icon that is included in
    +
    50 # the documentation. The maximum height of the logo should not exceed 55 pixels
    +
    51 # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
    +
    52 # to the output directory.
    +
    53 
    +
    54 PROJECT_LOGO = E:/Source/G-Truc/glm/doc/logo.png
    +
    55 
    +
    56 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
    +
    57 # into which the generated documentation will be written. If a relative path is
    +
    58 # entered, it will be relative to the location where doxygen was started. If
    +
    59 # left blank the current directory will be used.
    60 
    -
    61  __m128 sse_slow_det_ps(__m128 const m[4]);
    +
    61 OUTPUT_DIRECTORY = .
    62 
    -
    63 }//namespace detail
    -
    64 }//namespace glm
    -
    65 
    -
    66 #include "intrinsic_matrix.inl"
    -
    67 
    -
    68 #endif//GLM_ARCH
    -
    69 #endif//glm_detail_intrinsic_matrix
    +
    63 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
    +
    64 # directories (in 2 levels) under the output directory of each output format and
    +
    65 # will distribute the generated files over these directories. Enabling this
    +
    66 # option can be useful when feeding doxygen a huge amount of source files, where
    +
    67 # putting all generated files in the same directory would otherwise causes
    +
    68 # performance problems for the file system.
    +
    69 # The default value is: NO.
    +
    70 
    +
    71 CREATE_SUBDIRS = NO
    +
    72 
    +
    73 # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
    +
    74 # characters to appear in the names of generated files. If set to NO, non-ASCII
    +
    75 # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
    +
    76 # U+3044.
    +
    77 # The default value is: NO.
    +
    78 
    +
    79 ALLOW_UNICODE_NAMES = NO
    +
    80 
    +
    81 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
    +
    82 # documentation generated by doxygen is written. Doxygen will use this
    +
    83 # information to generate all constant output in the proper language.
    +
    84 # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
    +
    85 # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
    +
    86 # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
    +
    87 # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
    +
    88 # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
    +
    89 # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
    +
    90 # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
    +
    91 # Ukrainian and Vietnamese.
    +
    92 # The default value is: English.
    +
    93 
    +
    94 OUTPUT_LANGUAGE = English
    +
    95 
    +
    96 # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
    +
    97 # descriptions after the members that are listed in the file and class
    +
    98 # documentation (similar to Javadoc). Set to NO to disable this.
    +
    99 # The default value is: YES.
    +
    100 
    +
    101 BRIEF_MEMBER_DESC = NO
    +
    102 
    +
    103 # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
    +
    104 # description of a member or function before the detailed description
    +
    105 #
    +
    106 # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
    +
    107 # brief descriptions will be completely suppressed.
    +
    108 # The default value is: YES.
    +
    109 
    +
    110 REPEAT_BRIEF = YES
    +
    111 
    +
    112 # This tag implements a quasi-intelligent brief description abbreviator that is
    +
    113 # used to form the text in various listings. Each string in this list, if found
    +
    114 # as the leading text of the brief description, will be stripped from the text
    +
    115 # and the result, after processing the whole list, is used as the annotated
    +
    116 # text. Otherwise, the brief description is used as-is. If left blank, the
    +
    117 # following values are used ($name is automatically replaced with the name of
    +
    118 # the entity):The $name class, The $name widget, The $name file, is, provides,
    +
    119 # specifies, contains, represents, a, an and the.
    +
    120 
    +
    121 ABBREVIATE_BRIEF = "The $name class " \
    +
    122  "The $name widget " \
    +
    123  "The $name file " \
    +
    124  is \
    +
    125  provides \
    +
    126  specifies \
    +
    127  contains \
    +
    128  represents \
    +
    129  a \
    +
    130  an \
    +
    131  the
    +
    132 
    +
    133 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
    +
    134 # doxygen will generate a detailed section even if there is only a brief
    +
    135 # description.
    +
    136 # The default value is: NO.
    +
    137 
    +
    138 ALWAYS_DETAILED_SEC = NO
    +
    139 
    +
    140 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
    +
    141 # inherited members of a class in the documentation of that class as if those
    +
    142 # members were ordinary class members. Constructors, destructors and assignment
    +
    143 # operators of the base classes will not be shown.
    +
    144 # The default value is: NO.
    +
    145 
    +
    146 INLINE_INHERITED_MEMB = NO
    +
    147 
    +
    148 # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
    +
    149 # before files name in the file list and in the header files. If set to NO the
    +
    150 # shortest path that makes the file name unique will be used
    +
    151 # The default value is: YES.
    +
    152 
    +
    153 FULL_PATH_NAMES = NO
    +
    154 
    +
    155 # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
    +
    156 # Stripping is only done if one of the specified strings matches the left-hand
    +
    157 # part of the path. The tag can be used to show relative paths in the file list.
    +
    158 # If left blank the directory from which doxygen is run is used as the path to
    +
    159 # strip.
    +
    160 #
    +
    161 # Note that you can specify absolute paths here, but also relative paths, which
    +
    162 # will be relative from the directory where doxygen is started.
    +
    163 # This tag requires that the tag FULL_PATH_NAMES is set to YES.
    +
    164 
    +
    165 STRIP_FROM_PATH = "C:/Documents and Settings/Groove/ "
    +
    166 
    +
    167 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
    +
    168 # path mentioned in the documentation of a class, which tells the reader which
    +
    169 # header file to include in order to use a class. If left blank only the name of
    +
    170 # the header file containing the class definition is used. Otherwise one should
    +
    171 # specify the list of include paths that are normally passed to the compiler
    +
    172 # using the -I flag.
    +
    173 
    +
    174 STRIP_FROM_INC_PATH =
    +
    175 
    +
    176 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
    +
    177 # less readable) file names. This can be useful is your file systems doesn't
    +
    178 # support long names like on DOS, Mac, or CD-ROM.
    +
    179 # The default value is: NO.
    +
    180 
    +
    181 SHORT_NAMES = YES
    +
    182 
    +
    183 # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
    +
    184 # first line (until the first dot) of a Javadoc-style comment as the brief
    +
    185 # description. If set to NO, the Javadoc-style will behave just like regular Qt-
    +
    186 # style comments (thus requiring an explicit @brief command for a brief
    +
    187 # description.)
    +
    188 # The default value is: NO.
    +
    189 
    +
    190 JAVADOC_AUTOBRIEF = YES
    +
    191 
    +
    192 # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
    +
    193 # line (until the first dot) of a Qt-style comment as the brief description. If
    +
    194 # set to NO, the Qt-style will behave just like regular Qt-style comments (thus
    +
    195 # requiring an explicit \brief command for a brief description.)
    +
    196 # The default value is: NO.
    +
    197 
    +
    198 QT_AUTOBRIEF = NO
    +
    199 
    +
    200 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
    +
    201 # multi-line C++ special comment block (i.e. a block of
    +
    202 # a brief description. This used to be the default behavior. The new default is
    +
    203 # to treat a multi-line C++ comment block as a detailed description. Set this
    +
    204 # tag to YES if you prefer the old behavior instead.
    +
    205 #
    +
    206 # Note that setting this tag to YES also means that rational rose comments are
    +
    207 # not recognized any more.
    +
    208 # The default value is: NO.
    +
    209 
    +
    210 MULTILINE_CPP_IS_BRIEF = NO
    +
    211 
    +
    212 # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
    +
    213 # documentation from any documented member that it re-implements.
    +
    214 # The default value is: YES.
    +
    215 
    +
    216 INHERIT_DOCS = YES
    +
    217 
    +
    218 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
    +
    219 # new page for each member. If set to NO, the documentation of a member will be
    +
    220 # part of the file/class/namespace that contains it.
    +
    221 # The default value is: NO.
    +
    222 
    +
    223 SEPARATE_MEMBER_PAGES = NO
    +
    224 
    +
    225 # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
    +
    226 # uses this value to replace tabs by spaces in code fragments.
    +
    227 # Minimum value: 1, maximum value: 16, default value: 4.
    +
    228 
    +
    229 TAB_SIZE = 8
    +
    230 
    +
    231 # This tag can be used to specify a number of aliases that act as commands in
    +
    232 # the documentation. An alias has the form:
    +
    233 # name=value
    +
    234 # For example adding
    +
    235 # "sideeffect=@par Side Effects:\n"
    +
    236 # will allow you to put the command \sideeffect (or @sideeffect) in the
    +
    237 # documentation, which will result in a user-defined paragraph with heading
    +
    238 # "Side Effects:". You can put \n's in the value part of an alias to insert
    +
    239 # newlines.
    +
    240 
    +
    241 ALIASES =
    +
    242 
    +
    243 # This tag can be used to specify a number of word-keyword mappings (TCL only).
    +
    244 # A mapping has the form "name=value". For example adding "class=itcl::class"
    +
    245 # will allow you to use the command class in the itcl::class meaning.
    +
    246 
    +
    247 TCL_SUBST =
    +
    248 
    +
    249 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
    +
    250 # only. Doxygen will then generate output that is more tailored for C. For
    +
    251 # instance, some of the names that are used will be different. The list of all
    +
    252 # members will be omitted, etc.
    +
    253 # The default value is: NO.
    +
    254 
    +
    255 OPTIMIZE_OUTPUT_FOR_C = NO
    +
    256 
    +
    257 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
    +
    258 # Python sources only. Doxygen will then generate output that is more tailored
    +
    259 # for that language. For instance, namespaces will be presented as packages,
    +
    260 # qualified scopes will look different, etc.
    +
    261 # The default value is: NO.
    +
    262 
    +
    263 OPTIMIZE_OUTPUT_JAVA = NO
    +
    264 
    +
    265 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
    +
    266 # sources. Doxygen will then generate output that is tailored for Fortran.
    +
    267 # The default value is: NO.
    +
    268 
    +
    269 OPTIMIZE_FOR_FORTRAN = NO
    +
    270 
    +
    271 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
    +
    272 # sources. Doxygen will then generate output that is tailored for VHDL.
    +
    273 # The default value is: NO.
    +
    274 
    +
    275 OPTIMIZE_OUTPUT_VHDL = NO
    +
    276 
    +
    277 # Doxygen selects the parser to use depending on the extension of the files it
    +
    278 # parses. With this tag you can assign which parser to use for a given
    +
    279 # extension. Doxygen has a built-in mapping, but you can override or extend it
    +
    280 # using this tag. The format is ext=language, where ext is a file extension, and
    +
    281 # language is one of the parsers supported by doxygen: IDL, Java, Javascript,
    +
    282 # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
    +
    283 # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
    +
    284 # Fortran. In the later case the parser tries to guess whether the code is fixed
    +
    285 # or free formatted code, this is the default for Fortran type files), VHDL. For
    +
    286 # instance to make doxygen treat .inc files as Fortran files (default is PHP),
    +
    287 # and .f files as C (default is Fortran), use: inc=Fortran f=C.
    +
    288 #
    +
    289 # Note For files without extension you can use no_extension as a placeholder.
    +
    290 #
    +
    291 # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
    +
    292 # the files are not read by doxygen.
    +
    293 
    +
    294 EXTENSION_MAPPING =
    +
    295 
    +
    296 # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
    +
    297 # according to the Markdown format, which allows for more readable
    +
    298 # documentation. See http://daringfireball.net/projects/markdown/ for details.
    +
    299 # The output of markdown processing is further processed by doxygen, so you can
    +
    300 # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
    +
    301 # case of backward compatibilities issues.
    +
    302 # The default value is: YES.
    +
    303 
    +
    304 MARKDOWN_SUPPORT = YES
    +
    305 
    +
    306 # When enabled doxygen tries to link words that correspond to documented
    +
    307 # classes, or namespaces to their corresponding documentation. Such a link can
    +
    308 # be prevented in individual cases by by putting a % sign in front of the word
    +
    309 # or globally by setting AUTOLINK_SUPPORT to NO.
    +
    310 # The default value is: YES.
    +
    311 
    +
    312 AUTOLINK_SUPPORT = YES
    +
    313 
    +
    314 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
    +
    315 # to include (a tag file for) the STL sources as input, then you should set this
    +
    316 # tag to YES in order to let doxygen match functions declarations and
    +
    317 # definitions whose arguments contain STL classes (e.g. func(std::string);
    +
    318 # versus func(std::string) {}). This also make the inheritance and collaboration
    +
    319 # diagrams that involve STL classes more complete and accurate.
    +
    320 # The default value is: NO.
    +
    321 
    +
    322 BUILTIN_STL_SUPPORT = NO
    +
    323 
    +
    324 # If you use Microsoft's C++/CLI language, you should set this option to YES to
    +
    325 # enable parsing support.
    +
    326 # The default value is: NO.
    +
    327 
    +
    328 CPP_CLI_SUPPORT = NO
    +
    329 
    +
    330 # Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
    +
    331 # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
    +
    332 # will parse them like normal C++ but will assume all classes use public instead
    +
    333 # of private inheritance when no explicit protection keyword is present.
    +
    334 # The default value is: NO.
    +
    335 
    +
    336 SIP_SUPPORT = NO
    +
    337 
    +
    338 # For Microsoft's IDL there are propget and propput attributes to indicate
    +
    339 # getter and setter methods for a property. Setting this option to YES will make
    +
    340 # doxygen to replace the get and set methods by a property in the documentation.
    +
    341 # This will only work if the methods are indeed getting or setting a simple
    +
    342 # type. If this is not the case, or you want to show the methods anyway, you
    +
    343 # should set this option to NO.
    +
    344 # The default value is: YES.
    +
    345 
    +
    346 IDL_PROPERTY_SUPPORT = YES
    +
    347 
    +
    348 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
    +
    349 # tag is set to YES, then doxygen will reuse the documentation of the first
    +
    350 # member in the group (if any) for the other members of the group. By default
    +
    351 # all members of a group must be documented explicitly.
    +
    352 # The default value is: NO.
    +
    353 
    +
    354 DISTRIBUTE_GROUP_DOC = NO
    +
    355 
    +
    356 # Set the SUBGROUPING tag to YES to allow class member groups of the same type
    +
    357 # (for instance a group of public functions) to be put as a subgroup of that
    +
    358 # type (e.g. under the Public Functions section). Set it to NO to prevent
    +
    359 # subgrouping. Alternatively, this can be done per class using the
    +
    360 # \nosubgrouping command.
    +
    361 # The default value is: YES.
    +
    362 
    +
    363 SUBGROUPING = NO
    +
    364 
    +
    365 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
    +
    366 # are shown inside the group in which they are included (e.g. using \ingroup)
    +
    367 # instead of on a separate page (for HTML and Man pages) or section (for LaTeX
    +
    368 # and RTF).
    +
    369 #
    +
    370 # Note that this feature does not work in combination with
    +
    371 # SEPARATE_MEMBER_PAGES.
    +
    372 # The default value is: NO.
    +
    373 
    +
    374 INLINE_GROUPED_CLASSES = NO
    +
    375 
    +
    376 # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
    +
    377 # with only public data fields or simple typedef fields will be shown inline in
    +
    378 # the documentation of the scope in which they are defined (i.e. file,
    +
    379 # namespace, or group documentation), provided this scope is documented. If set
    +
    380 # to NO, structs, classes, and unions are shown on a separate page (for HTML and
    +
    381 # Man pages) or section (for LaTeX and RTF).
    +
    382 # The default value is: NO.
    +
    383 
    +
    384 INLINE_SIMPLE_STRUCTS = NO
    +
    385 
    +
    386 # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
    +
    387 # enum is documented as struct, union, or enum with the name of the typedef. So
    +
    388 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
    +
    389 # with name TypeT. When disabled the typedef will appear as a member of a file,
    +
    390 # namespace, or class. And the struct will be named TypeS. This can typically be
    +
    391 # useful for C code in case the coding convention dictates that all compound
    +
    392 # types are typedef'ed and only the typedef is referenced, never the tag name.
    +
    393 # The default value is: NO.
    +
    394 
    +
    395 TYPEDEF_HIDES_STRUCT = NO
    +
    396 
    +
    397 # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
    +
    398 # cache is used to resolve symbols given their name and scope. Since this can be
    +
    399 # an expensive process and often the same symbol appears multiple times in the
    +
    400 # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
    +
    401 # doxygen will become slower. If the cache is too large, memory is wasted. The
    +
    402 # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
    +
    403 # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
    +
    404 # symbols. At the end of a run doxygen will report the cache usage and suggest
    +
    405 # the optimal cache size from a speed point of view.
    +
    406 # Minimum value: 0, maximum value: 9, default value: 0.
    +
    407 
    +
    408 LOOKUP_CACHE_SIZE = 0
    +
    409 
    +
    410 #---------------------------------------------------------------------------
    +
    411 # Build related configuration options
    +
    412 #---------------------------------------------------------------------------
    +
    413 
    +
    414 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
    +
    415 # documentation are documented, even if no documentation was available. Private
    +
    416 # class members and static file members will be hidden unless the
    +
    417 # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
    +
    418 # Note: This will also disable the warnings about undocumented members that are
    +
    419 # normally produced when WARNINGS is set to YES.
    +
    420 # The default value is: NO.
    +
    421 
    +
    422 EXTRACT_ALL = NO
    +
    423 
    +
    424 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
    +
    425 # be included in the documentation.
    +
    426 # The default value is: NO.
    +
    427 
    +
    428 EXTRACT_PRIVATE = NO
    +
    429 
    +
    430 # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
    +
    431 # scope will be included in the documentation.
    +
    432 # The default value is: NO.
    +
    433 
    +
    434 EXTRACT_PACKAGE = NO
    +
    435 
    +
    436 # If the EXTRACT_STATIC tag is set to YES all static members of a file will be
    +
    437 # included in the documentation.
    +
    438 # The default value is: NO.
    +
    439 
    +
    440 EXTRACT_STATIC = YES
    +
    441 
    +
    442 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
    +
    443 # locally in source files will be included in the documentation. If set to NO
    +
    444 # only classes defined in header files are included. Does not have any effect
    +
    445 # for Java sources.
    +
    446 # The default value is: YES.
    +
    447 
    +
    448 EXTRACT_LOCAL_CLASSES = NO
    +
    449 
    +
    450 # This flag is only useful for Objective-C code. When set to YES local methods,
    +
    451 # which are defined in the implementation section but not in the interface are
    +
    452 # included in the documentation. If set to NO only methods in the interface are
    +
    453 # included.
    +
    454 # The default value is: NO.
    +
    455 
    +
    456 EXTRACT_LOCAL_METHODS = NO
    +
    457 
    +
    458 # If this flag is set to YES, the members of anonymous namespaces will be
    +
    459 # extracted and appear in the documentation as a namespace called
    +
    460 # 'anonymous_namespace{file}', where file will be replaced with the base name of
    +
    461 # the file that contains the anonymous namespace. By default anonymous namespace
    +
    462 # are hidden.
    +
    463 # The default value is: NO.
    +
    464 
    +
    465 EXTRACT_ANON_NSPACES = NO
    +
    466 
    +
    467 # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
    +
    468 # undocumented members inside documented classes or files. If set to NO these
    +
    469 # members will be included in the various overviews, but no documentation
    +
    470 # section is generated. This option has no effect if EXTRACT_ALL is enabled.
    +
    471 # The default value is: NO.
    +
    472 
    +
    473 HIDE_UNDOC_MEMBERS = YES
    +
    474 
    +
    475 # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
    +
    476 # undocumented classes that are normally visible in the class hierarchy. If set
    +
    477 # to NO these classes will be included in the various overviews. This option has
    +
    478 # no effect if EXTRACT_ALL is enabled.
    +
    479 # The default value is: NO.
    +
    480 
    +
    481 HIDE_UNDOC_CLASSES = YES
    +
    482 
    +
    483 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
    +
    484 # (class|struct|union) declarations. If set to NO these declarations will be
    +
    485 # included in the documentation.
    +
    486 # The default value is: NO.
    +
    487 
    +
    488 HIDE_FRIEND_COMPOUNDS = YES
    +
    489 
    +
    490 # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
    +
    491 # documentation blocks found inside the body of a function. If set to NO these
    +
    492 # blocks will be appended to the function's detailed documentation block.
    +
    493 # The default value is: NO.
    +
    494 
    +
    495 HIDE_IN_BODY_DOCS = YES
    +
    496 
    +
    497 # The INTERNAL_DOCS tag determines if documentation that is typed after a
    +
    498 # \internal command is included. If the tag is set to NO then the documentation
    +
    499 # will be excluded. Set it to YES to include the internal documentation.
    +
    500 # The default value is: NO.
    +
    501 
    +
    502 INTERNAL_DOCS = NO
    +
    503 
    +
    504 # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
    +
    505 # names in lower-case letters. If set to YES upper-case letters are also
    +
    506 # allowed. This is useful if you have classes or files whose names only differ
    +
    507 # in case and if your file system supports case sensitive file names. Windows
    +
    508 # and Mac users are advised to set this option to NO.
    +
    509 # The default value is: system dependent.
    +
    510 
    +
    511 CASE_SENSE_NAMES = YES
    +
    512 
    +
    513 # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
    +
    514 # their full class and namespace scopes in the documentation. If set to YES the
    +
    515 # scope will be hidden.
    +
    516 # The default value is: NO.
    +
    517 
    +
    518 HIDE_SCOPE_NAMES = YES
    +
    519 
    +
    520 # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
    +
    521 # the files that are included by a file in the documentation of that file.
    +
    522 # The default value is: YES.
    +
    523 
    +
    524 SHOW_INCLUDE_FILES = NO
    +
    525 
    +
    526 # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
    +
    527 # grouped member an include statement to the documentation, telling the reader
    +
    528 # which file to include in order to use the member.
    +
    529 # The default value is: NO.
    +
    530 
    +
    531 SHOW_GROUPED_MEMB_INC = NO
    +
    532 
    +
    533 # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
    +
    534 # files with double quotes in the documentation rather than with sharp brackets.
    +
    535 # The default value is: NO.
    +
    536 
    +
    537 FORCE_LOCAL_INCLUDES = NO
    +
    538 
    +
    539 # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
    +
    540 # documentation for inline members.
    +
    541 # The default value is: YES.
    +
    542 
    +
    543 INLINE_INFO = NO
    +
    544 
    +
    545 # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
    +
    546 # (detailed) documentation of file and class members alphabetically by member
    +
    547 # name. If set to NO the members will appear in declaration order.
    +
    548 # The default value is: YES.
    +
    549 
    +
    550 SORT_MEMBER_DOCS = YES
    +
    551 
    +
    552 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
    +
    553 # descriptions of file, namespace and class members alphabetically by member
    +
    554 # name. If set to NO the members will appear in declaration order. Note that
    +
    555 # this will also influence the order of the classes in the class list.
    +
    556 # The default value is: NO.
    +
    557 
    +
    558 SORT_BRIEF_DOCS = YES
    +
    559 
    +
    560 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
    +
    561 # (brief and detailed) documentation of class members so that constructors and
    +
    562 # destructors are listed first. If set to NO the constructors will appear in the
    +
    563 # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
    +
    564 # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
    +
    565 # member documentation.
    +
    566 # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
    +
    567 # detailed member documentation.
    +
    568 # The default value is: NO.
    +
    569 
    +
    570 SORT_MEMBERS_CTORS_1ST = NO
    +
    571 
    +
    572 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
    +
    573 # of group names into alphabetical order. If set to NO the group names will
    +
    574 # appear in their defined order.
    +
    575 # The default value is: NO.
    +
    576 
    +
    577 SORT_GROUP_NAMES = NO
    +
    578 
    +
    579 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
    +
    580 # fully-qualified names, including namespaces. If set to NO, the class list will
    +
    581 # be sorted only by class name, not including the namespace part.
    +
    582 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
    +
    583 # Note: This option applies only to the class list, not to the alphabetical
    +
    584 # list.
    +
    585 # The default value is: NO.
    +
    586 
    +
    587 SORT_BY_SCOPE_NAME = YES
    +
    588 
    +
    589 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
    +
    590 # type resolution of all parameters of a function it will reject a match between
    +
    591 # the prototype and the implementation of a member function even if there is
    +
    592 # only one candidate or it is obvious which candidate to choose by doing a
    +
    593 # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
    +
    594 # accept a match between prototype and implementation in such cases.
    +
    595 # The default value is: NO.
    +
    596 
    +
    597 STRICT_PROTO_MATCHING = NO
    +
    598 
    +
    599 # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
    +
    600 # todo list. This list is created by putting \todo commands in the
    +
    601 # documentation.
    +
    602 # The default value is: YES.
    +
    603 
    +
    604 GENERATE_TODOLIST = YES
    +
    605 
    +
    606 # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
    +
    607 # test list. This list is created by putting \test commands in the
    +
    608 # documentation.
    +
    609 # The default value is: YES.
    +
    610 
    +
    611 GENERATE_TESTLIST = YES
    +
    612 
    +
    613 # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
    +
    614 # list. This list is created by putting \bug commands in the documentation.
    +
    615 # The default value is: YES.
    +
    616 
    +
    617 GENERATE_BUGLIST = YES
    +
    618 
    +
    619 # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
    +
    620 # the deprecated list. This list is created by putting \deprecated commands in
    +
    621 # the documentation.
    +
    622 # The default value is: YES.
    +
    623 
    +
    624 GENERATE_DEPRECATEDLIST= YES
    +
    625 
    +
    626 # The ENABLED_SECTIONS tag can be used to enable conditional documentation
    +
    627 # sections, marked by \if <section_label> ... \endif and \cond <section_label>
    +
    628 # ... \endcond blocks.
    +
    629 
    +
    630 ENABLED_SECTIONS =
    +
    631 
    +
    632 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
    +
    633 # initial value of a variable or macro / define can have for it to appear in the
    +
    634 # documentation. If the initializer consists of more lines than specified here
    +
    635 # it will be hidden. Use a value of 0 to hide initializers completely. The
    +
    636 # appearance of the value of individual variables and macros / defines can be
    +
    637 # controlled using \showinitializer or \hideinitializer command in the
    +
    638 # documentation regardless of this setting.
    +
    639 # Minimum value: 0, maximum value: 10000, default value: 30.
    +
    640 
    +
    641 MAX_INITIALIZER_LINES = 30
    +
    642 
    +
    643 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
    +
    644 # the bottom of the documentation of classes and structs. If set to YES the list
    +
    645 # will mention the files that were used to generate the documentation.
    +
    646 # The default value is: YES.
    +
    647 
    +
    648 SHOW_USED_FILES = NO
    +
    649 
    +
    650 # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
    +
    651 # will remove the Files entry from the Quick Index and from the Folder Tree View
    +
    652 # (if specified).
    +
    653 # The default value is: YES.
    +
    654 
    +
    655 SHOW_FILES = YES
    +
    656 
    +
    657 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
    +
    658 # page. This will remove the Namespaces entry from the Quick Index and from the
    +
    659 # Folder Tree View (if specified).
    +
    660 # The default value is: YES.
    +
    661 
    +
    662 SHOW_NAMESPACES = YES
    +
    663 
    +
    664 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
    +
    665 # doxygen should invoke to get the current version for each file (typically from
    +
    666 # the version control system). Doxygen will invoke the program by executing (via
    +
    667 # popen()) the command command input-file, where command is the value of the
    +
    668 # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
    +
    669 # by doxygen. Whatever the program writes to standard output is used as the file
    +
    670 # version. For an example see the documentation.
    +
    671 
    +
    672 FILE_VERSION_FILTER =
    +
    673 
    +
    674 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
    +
    675 # by doxygen. The layout file controls the global structure of the generated
    +
    676 # output files in an output format independent way. To create the layout file
    +
    677 # that represents doxygen's defaults, run doxygen with the -l option. You can
    +
    678 # optionally specify a file name after the option, if omitted DoxygenLayout.xml
    +
    679 # will be used as the name of the layout file.
    +
    680 #
    +
    681 # Note that if you run doxygen from a directory containing a file called
    +
    682 # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
    +
    683 # tag is left empty.
    +
    684 
    +
    685 LAYOUT_FILE =
    +
    686 
    +
    687 # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
    +
    688 # the reference definitions. This must be a list of .bib files. The .bib
    +
    689 # extension is automatically appended if omitted. This requires the bibtex tool
    +
    690 # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
    +
    691 # For LaTeX the style of the bibliography can be controlled using
    +
    692 # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
    +
    693 # search path. See also \cite for info how to create references.
    +
    694 
    +
    695 CITE_BIB_FILES =
    +
    696 
    +
    697 #---------------------------------------------------------------------------
    +
    698 # Configuration options related to warning and progress messages
    +
    699 #---------------------------------------------------------------------------
    +
    700 
    +
    701 # The QUIET tag can be used to turn on/off the messages that are generated to
    +
    702 # standard output by doxygen. If QUIET is set to YES this implies that the
    +
    703 # messages are off.
    +
    704 # The default value is: NO.
    +
    705 
    +
    706 QUIET = NO
    +
    707 
    +
    708 # The WARNINGS tag can be used to turn on/off the warning messages that are
    +
    709 # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
    +
    710 # this implies that the warnings are on.
    +
    711 #
    +
    712 # Tip: Turn warnings on while writing the documentation.
    +
    713 # The default value is: YES.
    +
    714 
    +
    715 WARNINGS = YES
    +
    716 
    +
    717 # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
    +
    718 # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
    +
    719 # will automatically be disabled.
    +
    720 # The default value is: YES.
    +
    721 
    +
    722 WARN_IF_UNDOCUMENTED = YES
    +
    723 
    +
    724 # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
    +
    725 # potential errors in the documentation, such as not documenting some parameters
    +
    726 # in a documented function, or documenting parameters that don't exist or using
    +
    727 # markup commands wrongly.
    +
    728 # The default value is: YES.
    +
    729 
    +
    730 WARN_IF_DOC_ERROR = YES
    +
    731 
    +
    732 # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
    +
    733 # are documented, but have no documentation for their parameters or return
    +
    734 # value. If set to NO doxygen will only warn about wrong or incomplete parameter
    +
    735 # documentation, but not about the absence of documentation.
    +
    736 # The default value is: NO.
    +
    737 
    +
    738 WARN_NO_PARAMDOC = NO
    +
    739 
    +
    740 # The WARN_FORMAT tag determines the format of the warning messages that doxygen
    +
    741 # can produce. The string should contain the $file, $line, and $text tags, which
    +
    742 # will be replaced by the file and line number from which the warning originated
    +
    743 # and the warning text. Optionally the format may contain $version, which will
    +
    744 # be replaced by the version of the file (if it could be obtained via
    +
    745 # FILE_VERSION_FILTER)
    +
    746 # The default value is: $file:$line: $text.
    +
    747 
    +
    748 WARN_FORMAT = "$file:$line: $text"
    +
    749 
    +
    750 # The WARN_LOGFILE tag can be used to specify a file to which warning and error
    +
    751 # messages should be written. If left blank the output is written to standard
    +
    752 # error (stderr).
    +
    753 
    +
    754 WARN_LOGFILE =
    +
    755 
    +
    756 #---------------------------------------------------------------------------
    +
    757 # Configuration options related to the input files
    +
    758 #---------------------------------------------------------------------------
    +
    759 
    +
    760 # The INPUT tag is used to specify the files and/or directories that contain
    +
    761 # documented source files. You may enter file names like myfile.cpp or
    +
    762 # directories like /usr/src/myproject. Separate the files or directories with
    +
    763 # spaces.
    +
    764 # Note: If this tag is empty the current directory is searched.
    +
    765 
    +
    766 INPUT = ../glm \
    +
    767  .
    +
    768 
    +
    769 # This tag can be used to specify the character encoding of the source files
    +
    770 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
    +
    771 # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
    +
    772 # documentation (see: http://www.gnu.org/software/libiconv) for the list of
    +
    773 # possible encodings.
    +
    774 # The default value is: UTF-8.
    +
    775 
    +
    776 INPUT_ENCODING = UTF-8
    +
    777 
    +
    778 # If the value of the INPUT tag contains directories, you can use the
    +
    779 # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
    +
    780 # *.h) to filter out the source-files in the directories. If left blank the
    +
    781 # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
    +
    782 # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
    +
    783 # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
    +
    784 # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
    +
    785 # *.qsf, *.as and *.js.
    +
    786 
    +
    787 FILE_PATTERNS = *.hpp \
    +
    788  *.doxy
    +
    789 
    +
    790 # The RECURSIVE tag can be used to specify whether or not subdirectories should
    +
    791 # be searched for input files as well.
    +
    792 # The default value is: NO.
    +
    793 
    +
    794 RECURSIVE = YES
    +
    795 
    +
    796 # The EXCLUDE tag can be used to specify files and/or directories that should be
    +
    797 # excluded from the INPUT source files. This way you can easily exclude a
    +
    798 # subdirectory from a directory tree whose root is specified with the INPUT tag.
    +
    799 #
    +
    800 # Note that relative paths are relative to the directory from which doxygen is
    +
    801 # run.
    +
    802 
    +
    803 EXCLUDE =
    +
    804 
    +
    805 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
    +
    806 # directories that are symbolic links (a Unix file system feature) are excluded
    +
    807 # from the input.
    +
    808 # The default value is: NO.
    +
    809 
    +
    810 EXCLUDE_SYMLINKS = NO
    +
    811 
    +
    812 # If the value of the INPUT tag contains directories, you can use the
    +
    813 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
    +
    814 # certain files from those directories.
    +
    815 #
    +
    816 # Note that the wildcards are matched against the file with absolute path, so to
    +
    817 # exclude all test directories for example use the pattern */test/*
    +
    818 
    +
    819 EXCLUDE_PATTERNS =
    +
    820 
    +
    821 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
    +
    822 # (namespaces, classes, functions, etc.) that should be excluded from the
    +
    823 # output. The symbol name can be a fully qualified name, a word, or if the
    +
    824 # wildcard * is used, a substring. Examples: ANamespace, AClass,
    +
    825 # AClass::ANamespace, ANamespace::*Test
    +
    826 #
    +
    827 # Note that the wildcards are matched against the file with absolute path, so to
    +
    828 # exclude all test directories use the pattern */test/*
    +
    829 
    +
    830 EXCLUDE_SYMBOLS =
    +
    831 
    +
    832 # The EXAMPLE_PATH tag can be used to specify one or more files or directories
    +
    833 # that contain example code fragments that are included (see the \include
    +
    834 # command).
    +
    835 
    +
    836 EXAMPLE_PATH =
    +
    837 
    +
    838 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
    +
    839 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
    +
    840 # *.h) to filter out the source-files in the directories. If left blank all
    +
    841 # files are included.
    +
    842 
    +
    843 EXAMPLE_PATTERNS = *
    +
    844 
    +
    845 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
    +
    846 # searched for input files to be used with the \include or \dontinclude commands
    +
    847 # irrespective of the value of the RECURSIVE tag.
    +
    848 # The default value is: NO.
    +
    849 
    +
    850 EXAMPLE_RECURSIVE = NO
    +
    851 
    +
    852 # The IMAGE_PATH tag can be used to specify one or more files or directories
    +
    853 # that contain images that are to be included in the documentation (see the
    +
    854 # \image command).
    +
    855 
    +
    856 IMAGE_PATH =
    +
    857 
    +
    858 # The INPUT_FILTER tag can be used to specify a program that doxygen should
    +
    859 # invoke to filter for each input file. Doxygen will invoke the filter program
    +
    860 # by executing (via popen()) the command:
    +
    861 #
    +
    862 # <filter> <input-file>
    +
    863 #
    +
    864 # where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
    +
    865 # name of an input file. Doxygen will then use the output that the filter
    +
    866 # program writes to standard output. If FILTER_PATTERNS is specified, this tag
    +
    867 # will be ignored.
    +
    868 #
    +
    869 # Note that the filter must not add or remove lines; it is applied before the
    +
    870 # code is scanned, but not when the output code is generated. If lines are added
    +
    871 # or removed, the anchors will not be placed correctly.
    +
    872 
    +
    873 INPUT_FILTER =
    +
    874 
    +
    875 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
    +
    876 # basis. Doxygen will compare the file name with each pattern and apply the
    +
    877 # filter if there is a match. The filters are a list of the form: pattern=filter
    +
    878 # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
    +
    879 # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
    +
    880 # patterns match the file name, INPUT_FILTER is applied.
    +
    881 
    +
    882 FILTER_PATTERNS =
    +
    883 
    +
    884 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
    +
    885 # INPUT_FILTER ) will also be used to filter the input files that are used for
    +
    886 # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
    +
    887 # The default value is: NO.
    +
    888 
    +
    889 FILTER_SOURCE_FILES = NO
    +
    890 
    +
    891 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
    +
    892 # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
    +
    893 # it is also possible to disable source filtering for a specific pattern using
    +
    894 # *.ext= (so without naming a filter).
    +
    895 # This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
    +
    896 
    +
    897 FILTER_SOURCE_PATTERNS =
    +
    898 
    +
    899 # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
    +
    900 # is part of the input, its contents will be placed on the main page
    +
    901 # (index.html). This can be useful if you have a project on for instance GitHub
    +
    902 # and want to reuse the introduction page also for the doxygen output.
    +
    903 
    +
    904 USE_MDFILE_AS_MAINPAGE =
    +
    905 
    +
    906 #---------------------------------------------------------------------------
    +
    907 # Configuration options related to source browsing
    +
    908 #---------------------------------------------------------------------------
    +
    909 
    +
    910 # If the SOURCE_BROWSER tag is set to YES then a list of source files will be
    +
    911 # generated. Documented entities will be cross-referenced with these sources.
    +
    912 #
    +
    913 # Note: To get rid of all source code in the generated output, make sure that
    +
    914 # also VERBATIM_HEADERS is set to NO.
    +
    915 # The default value is: NO.
    +
    916 
    +
    917 SOURCE_BROWSER = YES
    +
    918 
    +
    919 # Setting the INLINE_SOURCES tag to YES will include the body of functions,
    +
    920 # classes and enums directly into the documentation.
    +
    921 # The default value is: NO.
    +
    922 
    +
    923 INLINE_SOURCES = NO
    +
    924 
    +
    925 # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
    +
    926 # special comment blocks from generated source code fragments. Normal C, C++ and
    +
    927 # Fortran comments will always remain visible.
    +
    928 # The default value is: YES.
    +
    929 
    +
    930 STRIP_CODE_COMMENTS = YES
    +
    931 
    +
    932 # If the REFERENCED_BY_RELATION tag is set to YES then for each documented
    +
    933 # function all documented functions referencing it will be listed.
    +
    934 # The default value is: NO.
    +
    935 
    +
    936 REFERENCED_BY_RELATION = YES
    +
    937 
    +
    938 # If the REFERENCES_RELATION tag is set to YES then for each documented function
    +
    939 # all documented entities called/used by that function will be listed.
    +
    940 # The default value is: NO.
    +
    941 
    +
    942 REFERENCES_RELATION = YES
    +
    943 
    +
    944 # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
    +
    945 # to YES, then the hyperlinks from functions in REFERENCES_RELATION and
    +
    946 # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
    +
    947 # link to the documentation.
    +
    948 # The default value is: YES.
    +
    949 
    +
    950 REFERENCES_LINK_SOURCE = YES
    +
    951 
    +
    952 # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
    +
    953 # source code will show a tooltip with additional information such as prototype,
    +
    954 # brief description and links to the definition and documentation. Since this
    +
    955 # will make the HTML file larger and loading of large files a bit slower, you
    +
    956 # can opt to disable this feature.
    +
    957 # The default value is: YES.
    +
    958 # This tag requires that the tag SOURCE_BROWSER is set to YES.
    +
    959 
    +
    960 SOURCE_TOOLTIPS = YES
    +
    961 
    +
    962 # If the USE_HTAGS tag is set to YES then the references to source code will
    +
    963 # point to the HTML generated by the htags(1) tool instead of doxygen built-in
    +
    964 # source browser. The htags tool is part of GNU's global source tagging system
    +
    965 # (see http://www.gnu.org/software/global/global.html). You will need version
    +
    966 # 4.8.6 or higher.
    +
    967 #
    +
    968 # To use it do the following:
    +
    969 # - Install the latest version of global
    +
    970 # - Enable SOURCE_BROWSER and USE_HTAGS in the config file
    +
    971 # - Make sure the INPUT points to the root of the source tree
    +
    972 # - Run doxygen as normal
    +
    973 #
    +
    974 # Doxygen will invoke htags (and that will in turn invoke gtags), so these
    +
    975 # tools must be available from the command line (i.e. in the search path).
    +
    976 #
    +
    977 # The result: instead of the source browser generated by doxygen, the links to
    +
    978 # source code will now point to the output of htags.
    +
    979 # The default value is: NO.
    +
    980 # This tag requires that the tag SOURCE_BROWSER is set to YES.
    +
    981 
    +
    982 USE_HTAGS = NO
    +
    983 
    +
    984 # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
    +
    985 # verbatim copy of the header file for each class for which an include is
    +
    986 # specified. Set to NO to disable this.
    +
    987 # See also: Section \class.
    +
    988 # The default value is: YES.
    +
    989 
    +
    990 VERBATIM_HEADERS = YES
    +
    991 
    +
    992 # If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
    +
    993 # clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
    +
    994 # cost of reduced performance. This can be particularly helpful with template
    +
    995 # rich C++ code for which doxygen's built-in parser lacks the necessary type
    +
    996 # information.
    +
    997 # Note: The availability of this option depends on whether or not doxygen was
    +
    998 # compiled with the --with-libclang option.
    +
    999 # The default value is: NO.
    +
    1000 
    +
    1001 CLANG_ASSISTED_PARSING = NO
    +
    1002 
    +
    1003 # If clang assisted parsing is enabled you can provide the compiler with command
    +
    1004 # line options that you would normally use when invoking the compiler. Note that
    +
    1005 # the include paths will already be set by doxygen for the files and directories
    +
    1006 # specified with INPUT and INCLUDE_PATH.
    +
    1007 # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
    +
    1008 
    +
    1009 CLANG_OPTIONS =
    +
    1010 
    +
    1011 #---------------------------------------------------------------------------
    +
    1012 # Configuration options related to the alphabetical class index
    +
    1013 #---------------------------------------------------------------------------
    +
    1014 
    +
    1015 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
    +
    1016 # compounds will be generated. Enable this if the project contains a lot of
    +
    1017 # classes, structs, unions or interfaces.
    +
    1018 # The default value is: YES.
    +
    1019 
    +
    1020 ALPHABETICAL_INDEX = NO
    +
    1021 
    +
    1022 # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
    +
    1023 # which the alphabetical index list will be split.
    +
    1024 # Minimum value: 1, maximum value: 20, default value: 5.
    +
    1025 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
    +
    1026 
    +
    1027 COLS_IN_ALPHA_INDEX = 5
    +
    1028 
    +
    1029 # In case all classes in a project start with a common prefix, all classes will
    +
    1030 # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
    +
    1031 # can be used to specify a prefix (or a list of prefixes) that should be ignored
    +
    1032 # while generating the index headers.
    +
    1033 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
    +
    1034 
    +
    1035 IGNORE_PREFIX =
    +
    1036 
    +
    1037 #---------------------------------------------------------------------------
    +
    1038 # Configuration options related to the HTML output
    +
    1039 #---------------------------------------------------------------------------
    +
    1040 
    +
    1041 # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
    +
    1042 # The default value is: YES.
    +
    1043 
    +
    1044 GENERATE_HTML = YES
    +
    1045 
    +
    1046 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
    +
    1047 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    +
    1048 # it.
    +
    1049 # The default directory is: html.
    +
    1050 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1051 
    +
    1052 HTML_OUTPUT = html
    +
    1053 
    +
    1054 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
    +
    1055 # generated HTML page (for example: .htm, .php, .asp).
    +
    1056 # The default value is: .html.
    +
    1057 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1058 
    +
    1059 HTML_FILE_EXTENSION = .html
    +
    1060 
    +
    1061 # The HTML_HEADER tag can be used to specify a user-defined HTML header file for
    +
    1062 # each generated HTML page. If the tag is left blank doxygen will generate a
    +
    1063 # standard header.
    +
    1064 #
    +
    1065 # To get valid HTML the header file that includes any scripts and style sheets
    +
    1066 # that doxygen needs, which is dependent on the configuration options used (e.g.
    +
    1067 # the setting GENERATE_TREEVIEW). It is highly recommended to start with a
    +
    1068 # default header using
    +
    1069 # doxygen -w html new_header.html new_footer.html new_stylesheet.css
    +
    1070 # YourConfigFile
    +
    1071 # and then modify the file new_header.html. See also section "Doxygen usage"
    +
    1072 # for information on how to generate the default header that doxygen normally
    +
    1073 # uses.
    +
    1074 # Note: The header is subject to change so you typically have to regenerate the
    +
    1075 # default header when upgrading to a newer version of doxygen. For a description
    +
    1076 # of the possible markers and block names see the documentation.
    +
    1077 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1078 
    +
    1079 HTML_HEADER =
    +
    1080 
    +
    1081 # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
    +
    1082 # generated HTML page. If the tag is left blank doxygen will generate a standard
    +
    1083 # footer. See HTML_HEADER for more information on how to generate a default
    +
    1084 # footer and what special commands can be used inside the footer. See also
    +
    1085 # section "Doxygen usage" for information on how to generate the default footer
    +
    1086 # that doxygen normally uses.
    +
    1087 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1088 
    +
    1089 HTML_FOOTER =
    +
    1090 
    +
    1091 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
    +
    1092 # sheet that is used by each HTML page. It can be used to fine-tune the look of
    +
    1093 # the HTML output. If left blank doxygen will generate a default style sheet.
    +
    1094 # See also section "Doxygen usage" for information on how to generate the style
    +
    1095 # sheet that doxygen normally uses.
    +
    1096 # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
    +
    1097 # it is more robust and this tag (HTML_STYLESHEET) will in the future become
    +
    1098 # obsolete.
    +
    1099 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1100 
    +
    1101 HTML_STYLESHEET =
    +
    1102 
    +
    1103 # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
    +
    1104 # cascading style sheets that are included after the standard style sheets
    +
    1105 # created by doxygen. Using this option one can overrule certain style aspects.
    +
    1106 # This is preferred over using HTML_STYLESHEET since it does not replace the
    +
    1107 # standard style sheet and is therefor more robust against future updates.
    +
    1108 # Doxygen will copy the style sheet files to the output directory.
    +
    1109 # Note: The order of the extra stylesheet files is of importance (e.g. the last
    +
    1110 # stylesheet in the list overrules the setting of the previous ones in the
    +
    1111 # list). For an example see the documentation.
    +
    1112 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1113 
    +
    1114 HTML_EXTRA_STYLESHEET =
    +
    1115 
    +
    1116 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
    +
    1117 # other source files which should be copied to the HTML output directory. Note
    +
    1118 # that these files will be copied to the base HTML output directory. Use the
    +
    1119 # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
    +
    1120 # files. In the HTML_STYLESHEET file, use the file name only. Also note that the
    +
    1121 # files will be copied as-is; there are no commands or markers available.
    +
    1122 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1123 
    +
    1124 HTML_EXTRA_FILES =
    +
    1125 
    +
    1126 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
    +
    1127 # will adjust the colors in the stylesheet and background images according to
    +
    1128 # this color. Hue is specified as an angle on a colorwheel, see
    +
    1129 # http://en.wikipedia.org/wiki/Hue for more information. For instance the value
    +
    1130 # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
    +
    1131 # purple, and 360 is red again.
    +
    1132 # Minimum value: 0, maximum value: 359, default value: 220.
    +
    1133 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1134 
    +
    1135 HTML_COLORSTYLE_HUE = 220
    +
    1136 
    +
    1137 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
    +
    1138 # in the HTML output. For a value of 0 the output will use grayscales only. A
    +
    1139 # value of 255 will produce the most vivid colors.
    +
    1140 # Minimum value: 0, maximum value: 255, default value: 100.
    +
    1141 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1142 
    +
    1143 HTML_COLORSTYLE_SAT = 100
    +
    1144 
    +
    1145 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
    +
    1146 # luminance component of the colors in the HTML output. Values below 100
    +
    1147 # gradually make the output lighter, whereas values above 100 make the output
    +
    1148 # darker. The value divided by 100 is the actual gamma applied, so 80 represents
    +
    1149 # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
    +
    1150 # change the gamma.
    +
    1151 # Minimum value: 40, maximum value: 240, default value: 80.
    +
    1152 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1153 
    +
    1154 HTML_COLORSTYLE_GAMMA = 80
    +
    1155 
    +
    1156 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
    +
    1157 # page will contain the date and time when the page was generated. Setting this
    +
    1158 # to NO can help when comparing the output of multiple runs.
    +
    1159 # The default value is: YES.
    +
    1160 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1161 
    +
    1162 HTML_TIMESTAMP = NO
    +
    1163 
    +
    1164 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
    +
    1165 # documentation will contain sections that can be hidden and shown after the
    +
    1166 # page has loaded.
    +
    1167 # The default value is: NO.
    +
    1168 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1169 
    +
    1170 HTML_DYNAMIC_SECTIONS = NO
    +
    1171 
    +
    1172 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
    +
    1173 # shown in the various tree structured indices initially; the user can expand
    +
    1174 # and collapse entries dynamically later on. Doxygen will expand the tree to
    +
    1175 # such a level that at most the specified number of entries are visible (unless
    +
    1176 # a fully collapsed tree already exceeds this amount). So setting the number of
    +
    1177 # entries 1 will produce a full collapsed tree by default. 0 is a special value
    +
    1178 # representing an infinite number of entries and will result in a full expanded
    +
    1179 # tree by default.
    +
    1180 # Minimum value: 0, maximum value: 9999, default value: 100.
    +
    1181 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1182 
    +
    1183 HTML_INDEX_NUM_ENTRIES = 100
    +
    1184 
    +
    1185 # If the GENERATE_DOCSET tag is set to YES, additional index files will be
    +
    1186 # generated that can be used as input for Apple's Xcode 3 integrated development
    +
    1187 # environment (see: http://developer.apple.com/tools/xcode/), introduced with
    +
    1188 # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
    +
    1189 # Makefile in the HTML output directory. Running make will produce the docset in
    +
    1190 # that directory and running make install will install the docset in
    +
    1191 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
    +
    1192 # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
    +
    1193 # for more information.
    +
    1194 # The default value is: NO.
    +
    1195 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1196 
    +
    1197 GENERATE_DOCSET = NO
    +
    1198 
    +
    1199 # This tag determines the name of the docset feed. A documentation feed provides
    +
    1200 # an umbrella under which multiple documentation sets from a single provider
    +
    1201 # (such as a company or product suite) can be grouped.
    +
    1202 # The default value is: Doxygen generated docs.
    +
    1203 # This tag requires that the tag GENERATE_DOCSET is set to YES.
    +
    1204 
    +
    1205 DOCSET_FEEDNAME = "Doxygen generated docs"
    +
    1206 
    +
    1207 # This tag specifies a string that should uniquely identify the documentation
    +
    1208 # set bundle. This should be a reverse domain-name style string, e.g.
    +
    1209 # com.mycompany.MyDocSet. Doxygen will append .docset to the name.
    +
    1210 # The default value is: org.doxygen.Project.
    +
    1211 # This tag requires that the tag GENERATE_DOCSET is set to YES.
    +
    1212 
    +
    1213 DOCSET_BUNDLE_ID = org.doxygen.Project
    +
    1214 
    +
    1215 # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
    +
    1216 # the documentation publisher. This should be a reverse domain-name style
    +
    1217 # string, e.g. com.mycompany.MyDocSet.documentation.
    +
    1218 # The default value is: org.doxygen.Publisher.
    +
    1219 # This tag requires that the tag GENERATE_DOCSET is set to YES.
    +
    1220 
    +
    1221 DOCSET_PUBLISHER_ID = org.doxygen.Publisher
    +
    1222 
    +
    1223 # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
    +
    1224 # The default value is: Publisher.
    +
    1225 # This tag requires that the tag GENERATE_DOCSET is set to YES.
    +
    1226 
    +
    1227 DOCSET_PUBLISHER_NAME = Publisher
    +
    1228 
    +
    1229 # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
    +
    1230 # additional HTML index files: index.hhp, index.hhc, and index.hhk. The
    +
    1231 # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
    +
    1232 # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
    +
    1233 # Windows.
    +
    1234 #
    +
    1235 # The HTML Help Workshop contains a compiler that can convert all HTML output
    +
    1236 # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
    +
    1237 # files are now used as the Windows 98 help format, and will replace the old
    +
    1238 # Windows help format (.hlp) on all Windows platforms in the future. Compressed
    +
    1239 # HTML files also contain an index, a table of contents, and you can search for
    +
    1240 # words in the documentation. The HTML workshop also contains a viewer for
    +
    1241 # compressed HTML files.
    +
    1242 # The default value is: NO.
    +
    1243 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1244 
    +
    1245 GENERATE_HTMLHELP = NO
    +
    1246 
    +
    1247 # The CHM_FILE tag can be used to specify the file name of the resulting .chm
    +
    1248 # file. You can add a path in front of the file if the result should not be
    +
    1249 # written to the html output directory.
    +
    1250 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    +
    1251 
    +
    1252 CHM_FILE =
    +
    1253 
    +
    1254 # The HHC_LOCATION tag can be used to specify the location (absolute path
    +
    1255 # including file name) of the HTML help compiler ( hhc.exe). If non-empty
    +
    1256 # doxygen will try to run the HTML help compiler on the generated index.hhp.
    +
    1257 # The file has to be specified with full path.
    +
    1258 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    +
    1259 
    +
    1260 HHC_LOCATION =
    +
    1261 
    +
    1262 # The GENERATE_CHI flag controls if a separate .chi index file is generated (
    +
    1263 # YES) or that it should be included in the master .chm file ( NO).
    +
    1264 # The default value is: NO.
    +
    1265 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    +
    1266 
    +
    1267 GENERATE_CHI = NO
    +
    1268 
    +
    1269 # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
    +
    1270 # and project file content.
    +
    1271 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    +
    1272 
    +
    1273 CHM_INDEX_ENCODING =
    +
    1274 
    +
    1275 # The BINARY_TOC flag controls whether a binary table of contents is generated (
    +
    1276 # YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
    +
    1277 # enables the Previous and Next buttons.
    +
    1278 # The default value is: NO.
    +
    1279 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    +
    1280 
    +
    1281 BINARY_TOC = NO
    +
    1282 
    +
    1283 # The TOC_EXPAND flag can be set to YES to add extra items for group members to
    +
    1284 # the table of contents of the HTML help documentation and to the tree view.
    +
    1285 # The default value is: NO.
    +
    1286 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    +
    1287 
    +
    1288 TOC_EXPAND = NO
    +
    1289 
    +
    1290 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
    +
    1291 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
    +
    1292 # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
    +
    1293 # (.qch) of the generated HTML documentation.
    +
    1294 # The default value is: NO.
    +
    1295 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1296 
    +
    1297 GENERATE_QHP = NO
    +
    1298 
    +
    1299 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
    +
    1300 # the file name of the resulting .qch file. The path specified is relative to
    +
    1301 # the HTML output folder.
    +
    1302 # This tag requires that the tag GENERATE_QHP is set to YES.
    +
    1303 
    +
    1304 QCH_FILE =
    +
    1305 
    +
    1306 # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
    +
    1307 # Project output. For more information please see Qt Help Project / Namespace
    +
    1308 # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
    +
    1309 # The default value is: org.doxygen.Project.
    +
    1310 # This tag requires that the tag GENERATE_QHP is set to YES.
    +
    1311 
    +
    1312 QHP_NAMESPACE = org.doxygen.Project
    +
    1313 
    +
    1314 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
    +
    1315 # Help Project output. For more information please see Qt Help Project / Virtual
    +
    1316 # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
    +
    1317 # folders).
    +
    1318 # The default value is: doc.
    +
    1319 # This tag requires that the tag GENERATE_QHP is set to YES.
    +
    1320 
    +
    1321 QHP_VIRTUAL_FOLDER = doc
    +
    1322 
    +
    1323 # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
    +
    1324 # filter to add. For more information please see Qt Help Project / Custom
    +
    1325 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
    +
    1326 # filters).
    +
    1327 # This tag requires that the tag GENERATE_QHP is set to YES.
    +
    1328 
    +
    1329 QHP_CUST_FILTER_NAME =
    +
    1330 
    +
    1331 # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
    +
    1332 # custom filter to add. For more information please see Qt Help Project / Custom
    +
    1333 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
    +
    1334 # filters).
    +
    1335 # This tag requires that the tag GENERATE_QHP is set to YES.
    +
    1336 
    +
    1337 QHP_CUST_FILTER_ATTRS =
    +
    1338 
    +
    1339 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
    +
    1340 # project's filter section matches. Qt Help Project / Filter Attributes (see:
    +
    1341 # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
    +
    1342 # This tag requires that the tag GENERATE_QHP is set to YES.
    +
    1343 
    +
    1344 QHP_SECT_FILTER_ATTRS =
    +
    1345 
    +
    1346 # The QHG_LOCATION tag can be used to specify the location of Qt's
    +
    1347 # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
    +
    1348 # generated .qhp file.
    +
    1349 # This tag requires that the tag GENERATE_QHP is set to YES.
    +
    1350 
    +
    1351 QHG_LOCATION =
    +
    1352 
    +
    1353 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
    +
    1354 # generated, together with the HTML files, they form an Eclipse help plugin. To
    +
    1355 # install this plugin and make it available under the help contents menu in
    +
    1356 # Eclipse, the contents of the directory containing the HTML and XML files needs
    +
    1357 # to be copied into the plugins directory of eclipse. The name of the directory
    +
    1358 # within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
    +
    1359 # After copying Eclipse needs to be restarted before the help appears.
    +
    1360 # The default value is: NO.
    +
    1361 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1362 
    +
    1363 GENERATE_ECLIPSEHELP = NO
    +
    1364 
    +
    1365 # A unique identifier for the Eclipse help plugin. When installing the plugin
    +
    1366 # the directory name containing the HTML and XML files should also have this
    +
    1367 # name. Each documentation set should have its own identifier.
    +
    1368 # The default value is: org.doxygen.Project.
    +
    1369 # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
    +
    1370 
    +
    1371 ECLIPSE_DOC_ID = org.doxygen.Project
    +
    1372 
    +
    1373 # If you want full control over the layout of the generated HTML pages it might
    +
    1374 # be necessary to disable the index and replace it with your own. The
    +
    1375 # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
    +
    1376 # of each HTML page. A value of NO enables the index and the value YES disables
    +
    1377 # it. Since the tabs in the index contain the same information as the navigation
    +
    1378 # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
    +
    1379 # The default value is: NO.
    +
    1380 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1381 
    +
    1382 DISABLE_INDEX = NO
    +
    1383 
    +
    1384 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
    +
    1385 # structure should be generated to display hierarchical information. If the tag
    +
    1386 # value is set to YES, a side panel will be generated containing a tree-like
    +
    1387 # index structure (just like the one that is generated for HTML Help). For this
    +
    1388 # to work a browser that supports JavaScript, DHTML, CSS and frames is required
    +
    1389 # (i.e. any modern browser). Windows users are probably better off using the
    +
    1390 # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
    +
    1391 # further fine-tune the look of the index. As an example, the default style
    +
    1392 # sheet generated by doxygen has an example that shows how to put an image at
    +
    1393 # the root of the tree instead of the PROJECT_NAME. Since the tree basically has
    +
    1394 # the same information as the tab index, you could consider setting
    +
    1395 # DISABLE_INDEX to YES when enabling this option.
    +
    1396 # The default value is: NO.
    +
    1397 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1398 
    +
    1399 GENERATE_TREEVIEW = NO
    +
    1400 
    +
    1401 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
    +
    1402 # doxygen will group on one line in the generated HTML documentation.
    +
    1403 #
    +
    1404 # Note that a value of 0 will completely suppress the enum values from appearing
    +
    1405 # in the overview section.
    +
    1406 # Minimum value: 0, maximum value: 20, default value: 4.
    +
    1407 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1408 
    +
    1409 ENUM_VALUES_PER_LINE = 4
    +
    1410 
    +
    1411 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
    +
    1412 # to set the initial width (in pixels) of the frame in which the tree is shown.
    +
    1413 # Minimum value: 0, maximum value: 1500, default value: 250.
    +
    1414 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1415 
    +
    1416 TREEVIEW_WIDTH = 250
    +
    1417 
    +
    1418 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
    +
    1419 # external symbols imported via tag files in a separate window.
    +
    1420 # The default value is: NO.
    +
    1421 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1422 
    +
    1423 EXT_LINKS_IN_WINDOW = NO
    +
    1424 
    +
    1425 # Use this tag to change the font size of LaTeX formulas included as images in
    +
    1426 # the HTML documentation. When you change the font size after a successful
    +
    1427 # doxygen run you need to manually remove any form_*.png images from the HTML
    +
    1428 # output directory to force them to be regenerated.
    +
    1429 # Minimum value: 8, maximum value: 50, default value: 10.
    +
    1430 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1431 
    +
    1432 FORMULA_FONTSIZE = 10
    +
    1433 
    +
    1434 # Use the FORMULA_TRANPARENT tag to determine whether or not the images
    +
    1435 # generated for formulas are transparent PNGs. Transparent PNGs are not
    +
    1436 # supported properly for IE 6.0, but are supported on all modern browsers.
    +
    1437 #
    +
    1438 # Note that when changing this option you need to delete any form_*.png files in
    +
    1439 # the HTML output directory before the changes have effect.
    +
    1440 # The default value is: YES.
    +
    1441 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1442 
    +
    1443 FORMULA_TRANSPARENT = YES
    +
    1444 
    +
    1445 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
    +
    1446 # http://www.mathjax.org) which uses client side Javascript for the rendering
    +
    1447 # instead of using prerendered bitmaps. Use this if you do not have LaTeX
    +
    1448 # installed or if you want to formulas look prettier in the HTML output. When
    +
    1449 # enabled you may also need to install MathJax separately and configure the path
    +
    1450 # to it using the MATHJAX_RELPATH option.
    +
    1451 # The default value is: NO.
    +
    1452 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1453 
    +
    1454 USE_MATHJAX = NO
    +
    1455 
    +
    1456 # When MathJax is enabled you can set the default output format to be used for
    +
    1457 # the MathJax output. See the MathJax site (see:
    +
    1458 # http://docs.mathjax.org/en/latest/output.html) for more details.
    +
    1459 # Possible values are: HTML-CSS (which is slower, but has the best
    +
    1460 # compatibility), NativeMML (i.e. MathML) and SVG.
    +
    1461 # The default value is: HTML-CSS.
    +
    1462 # This tag requires that the tag USE_MATHJAX is set to YES.
    +
    1463 
    +
    1464 MATHJAX_FORMAT = HTML-CSS
    +
    1465 
    +
    1466 # When MathJax is enabled you need to specify the location relative to the HTML
    +
    1467 # output directory using the MATHJAX_RELPATH option. The destination directory
    +
    1468 # should contain the MathJax.js script. For instance, if the mathjax directory
    +
    1469 # is located at the same level as the HTML output directory, then
    +
    1470 # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
    +
    1471 # Content Delivery Network so you can quickly see the result without installing
    +
    1472 # MathJax. However, it is strongly recommended to install a local copy of
    +
    1473 # MathJax from http://www.mathjax.org before deployment.
    +
    1474 # The default value is: http://cdn.mathjax.org/mathjax/latest.
    +
    1475 # This tag requires that the tag USE_MATHJAX is set to YES.
    +
    1476 
    +
    1477 MATHJAX_RELPATH = http://www.mathjax.org/mathjax
    +
    1478 
    +
    1479 # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
    +
    1480 # extension names that should be enabled during MathJax rendering. For example
    +
    1481 # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
    +
    1482 # This tag requires that the tag USE_MATHJAX is set to YES.
    +
    1483 
    +
    1484 MATHJAX_EXTENSIONS =
    +
    1485 
    +
    1486 # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
    +
    1487 # of code that will be used on startup of the MathJax code. See the MathJax site
    +
    1488 # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
    +
    1489 # example see the documentation.
    +
    1490 # This tag requires that the tag USE_MATHJAX is set to YES.
    +
    1491 
    +
    1492 MATHJAX_CODEFILE =
    +
    1493 
    +
    1494 # When the SEARCHENGINE tag is enabled doxygen will generate a search box for
    +
    1495 # the HTML output. The underlying search engine uses javascript and DHTML and
    +
    1496 # should work on any modern browser. Note that when using HTML help
    +
    1497 # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
    +
    1498 # there is already a search function so this one should typically be disabled.
    +
    1499 # For large projects the javascript based search engine can be slow, then
    +
    1500 # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
    +
    1501 # search using the keyboard; to jump to the search box use <access key> + S
    +
    1502 # (what the <access key> is depends on the OS and browser, but it is typically
    +
    1503 # <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
    +
    1504 # key> to jump into the search results window, the results can be navigated
    +
    1505 # using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
    +
    1506 # the search. The filter options can be selected when the cursor is inside the
    +
    1507 # search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
    +
    1508 # to select a filter and <Enter> or <escape> to activate or cancel the filter
    +
    1509 # option.
    +
    1510 # The default value is: YES.
    +
    1511 # This tag requires that the tag GENERATE_HTML is set to YES.
    +
    1512 
    +
    1513 SEARCHENGINE = NO
    +
    1514 
    +
    1515 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
    +
    1516 # implemented using a web server instead of a web client using Javascript. There
    +
    1517 # are two flavors of web server based searching depending on the EXTERNAL_SEARCH
    +
    1518 # setting. When disabled, doxygen will generate a PHP script for searching and
    +
    1519 # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
    +
    1520 # and searching needs to be provided by external tools. See the section
    +
    1521 # "External Indexing and Searching" for details.
    +
    1522 # The default value is: NO.
    +
    1523 # This tag requires that the tag SEARCHENGINE is set to YES.
    +
    1524 
    +
    1525 SERVER_BASED_SEARCH = NO
    +
    1526 
    +
    1527 # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
    +
    1528 # script for searching. Instead the search results are written to an XML file
    +
    1529 # which needs to be processed by an external indexer. Doxygen will invoke an
    +
    1530 # external search engine pointed to by the SEARCHENGINE_URL option to obtain the
    +
    1531 # search results.
    +
    1532 #
    +
    1533 # Doxygen ships with an example indexer ( doxyindexer) and search engine
    +
    1534 # (doxysearch.cgi) which are based on the open source search engine library
    +
    1535 # Xapian (see: http://xapian.org/).
    +
    1536 #
    +
    1537 # See the section "External Indexing and Searching" for details.
    +
    1538 # The default value is: NO.
    +
    1539 # This tag requires that the tag SEARCHENGINE is set to YES.
    +
    1540 
    +
    1541 EXTERNAL_SEARCH = NO
    +
    1542 
    +
    1543 # The SEARCHENGINE_URL should point to a search engine hosted by a web server
    +
    1544 # which will return the search results when EXTERNAL_SEARCH is enabled.
    +
    1545 #
    +
    1546 # Doxygen ships with an example indexer ( doxyindexer) and search engine
    +
    1547 # (doxysearch.cgi) which are based on the open source search engine library
    +
    1548 # Xapian (see: http://xapian.org/). See the section "External Indexing and
    +
    1549 # Searching" for details.
    +
    1550 # This tag requires that the tag SEARCHENGINE is set to YES.
    +
    1551 
    +
    1552 SEARCHENGINE_URL =
    +
    1553 
    +
    1554 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
    +
    1555 # search data is written to a file for indexing by an external tool. With the
    +
    1556 # SEARCHDATA_FILE tag the name of this file can be specified.
    +
    1557 # The default file is: searchdata.xml.
    +
    1558 # This tag requires that the tag SEARCHENGINE is set to YES.
    +
    1559 
    +
    1560 SEARCHDATA_FILE = searchdata.xml
    +
    1561 
    +
    1562 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
    +
    1563 # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
    +
    1564 # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
    +
    1565 # projects and redirect the results back to the right project.
    +
    1566 # This tag requires that the tag SEARCHENGINE is set to YES.
    +
    1567 
    +
    1568 EXTERNAL_SEARCH_ID =
    +
    1569 
    +
    1570 # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
    +
    1571 # projects other than the one defined by this configuration file, but that are
    +
    1572 # all added to the same external search index. Each project needs to have a
    +
    1573 # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
    +
    1574 # to a relative location where the documentation can be found. The format is:
    +
    1575 # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
    +
    1576 # This tag requires that the tag SEARCHENGINE is set to YES.
    +
    1577 
    +
    1578 EXTRA_SEARCH_MAPPINGS =
    +
    1579 
    +
    1580 #---------------------------------------------------------------------------
    +
    1581 # Configuration options related to the LaTeX output
    +
    1582 #---------------------------------------------------------------------------
    +
    1583 
    +
    1584 # If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
    +
    1585 # The default value is: YES.
    +
    1586 
    +
    1587 GENERATE_LATEX = NO
    +
    1588 
    +
    1589 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
    +
    1590 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    +
    1591 # it.
    +
    1592 # The default directory is: latex.
    +
    1593 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1594 
    +
    1595 LATEX_OUTPUT = latex
    +
    1596 
    +
    1597 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
    +
    1598 # invoked.
    +
    1599 #
    +
    1600 # Note that when enabling USE_PDFLATEX this option is only used for generating
    +
    1601 # bitmaps for formulas in the HTML output, but not in the Makefile that is
    +
    1602 # written to the output directory.
    +
    1603 # The default file is: latex.
    +
    1604 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1605 
    +
    1606 LATEX_CMD_NAME = latex
    +
    1607 
    +
    1608 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
    +
    1609 # index for LaTeX.
    +
    1610 # The default file is: makeindex.
    +
    1611 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1612 
    +
    1613 MAKEINDEX_CMD_NAME = makeindex
    +
    1614 
    +
    1615 # If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
    +
    1616 # documents. This may be useful for small projects and may help to save some
    +
    1617 # trees in general.
    +
    1618 # The default value is: NO.
    +
    1619 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1620 
    +
    1621 COMPACT_LATEX = NO
    +
    1622 
    +
    1623 # The PAPER_TYPE tag can be used to set the paper type that is used by the
    +
    1624 # printer.
    +
    1625 # Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
    +
    1626 # 14 inches) and executive (7.25 x 10.5 inches).
    +
    1627 # The default value is: a4.
    +
    1628 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1629 
    +
    1630 PAPER_TYPE = a4wide
    +
    1631 
    +
    1632 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
    +
    1633 # that should be included in the LaTeX output. To get the times font for
    +
    1634 # instance you can specify
    +
    1635 # EXTRA_PACKAGES=times
    +
    1636 # If left blank no extra packages will be included.
    +
    1637 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1638 
    +
    1639 EXTRA_PACKAGES =
    +
    1640 
    +
    1641 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
    +
    1642 # generated LaTeX document. The header should contain everything until the first
    +
    1643 # chapter. If it is left blank doxygen will generate a standard header. See
    +
    1644 # section "Doxygen usage" for information on how to let doxygen write the
    +
    1645 # default header to a separate file.
    +
    1646 #
    +
    1647 # Note: Only use a user-defined header if you know what you are doing! The
    +
    1648 # following commands have a special meaning inside the header: $title,
    +
    1649 # $datetime, $date, $doxygenversion, $projectname, $projectnumber,
    +
    1650 # $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
    +
    1651 # for the replacement values of the other commands the user is refered to
    +
    1652 # HTML_HEADER.
    +
    1653 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1654 
    +
    1655 LATEX_HEADER =
    +
    1656 
    +
    1657 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
    +
    1658 # generated LaTeX document. The footer should contain everything after the last
    +
    1659 # chapter. If it is left blank doxygen will generate a standard footer. See
    +
    1660 # LATEX_HEADER for more information on how to generate a default footer and what
    +
    1661 # special commands can be used inside the footer.
    +
    1662 #
    +
    1663 # Note: Only use a user-defined footer if you know what you are doing!
    +
    1664 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1665 
    +
    1666 LATEX_FOOTER =
    +
    1667 
    +
    1668 # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
    +
    1669 # other source files which should be copied to the LATEX_OUTPUT output
    +
    1670 # directory. Note that the files will be copied as-is; there are no commands or
    +
    1671 # markers available.
    +
    1672 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1673 
    +
    1674 LATEX_EXTRA_FILES =
    +
    1675 
    +
    1676 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
    +
    1677 # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
    +
    1678 # contain links (just like the HTML output) instead of page references. This
    +
    1679 # makes the output suitable for online browsing using a PDF viewer.
    +
    1680 # The default value is: YES.
    +
    1681 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1682 
    +
    1683 PDF_HYPERLINKS = NO
    +
    1684 
    +
    1685 # If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
    +
    1686 # the PDF file directly from the LaTeX files. Set this option to YES to get a
    +
    1687 # higher quality PDF documentation.
    +
    1688 # The default value is: YES.
    +
    1689 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1690 
    +
    1691 USE_PDFLATEX = YES
    +
    1692 
    +
    1693 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
    +
    1694 # command to the generated LaTeX files. This will instruct LaTeX to keep running
    +
    1695 # if errors occur, instead of asking the user for help. This option is also used
    +
    1696 # when generating formulas in HTML.
    +
    1697 # The default value is: NO.
    +
    1698 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1699 
    +
    1700 LATEX_BATCHMODE = NO
    +
    1701 
    +
    1702 # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
    +
    1703 # index chapters (such as File Index, Compound Index, etc.) in the output.
    +
    1704 # The default value is: NO.
    +
    1705 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1706 
    +
    1707 LATEX_HIDE_INDICES = NO
    +
    1708 
    +
    1709 # If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
    +
    1710 # code with syntax highlighting in the LaTeX output.
    +
    1711 #
    +
    1712 # Note that which sources are shown also depends on other settings such as
    +
    1713 # SOURCE_BROWSER.
    +
    1714 # The default value is: NO.
    +
    1715 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1716 
    +
    1717 LATEX_SOURCE_CODE = NO
    +
    1718 
    +
    1719 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
    +
    1720 # bibliography, e.g. plainnat, or ieeetr. See
    +
    1721 # http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
    +
    1722 # The default value is: plain.
    +
    1723 # This tag requires that the tag GENERATE_LATEX is set to YES.
    +
    1724 
    +
    1725 LATEX_BIB_STYLE = plain
    +
    1726 
    +
    1727 #---------------------------------------------------------------------------
    +
    1728 # Configuration options related to the RTF output
    +
    1729 #---------------------------------------------------------------------------
    +
    1730 
    +
    1731 # If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
    +
    1732 # RTF output is optimized for Word 97 and may not look too pretty with other RTF
    +
    1733 # readers/editors.
    +
    1734 # The default value is: NO.
    +
    1735 
    +
    1736 GENERATE_RTF = NO
    +
    1737 
    +
    1738 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
    +
    1739 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    +
    1740 # it.
    +
    1741 # The default directory is: rtf.
    +
    1742 # This tag requires that the tag GENERATE_RTF is set to YES.
    +
    1743 
    +
    1744 RTF_OUTPUT = glm.rtf
    +
    1745 
    +
    1746 # If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
    +
    1747 # documents. This may be useful for small projects and may help to save some
    +
    1748 # trees in general.
    +
    1749 # The default value is: NO.
    +
    1750 # This tag requires that the tag GENERATE_RTF is set to YES.
    +
    1751 
    +
    1752 COMPACT_RTF = NO
    +
    1753 
    +
    1754 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
    +
    1755 # contain hyperlink fields. The RTF file will contain links (just like the HTML
    +
    1756 # output) instead of page references. This makes the output suitable for online
    +
    1757 # browsing using Word or some other Word compatible readers that support those
    +
    1758 # fields.
    +
    1759 #
    +
    1760 # Note: WordPad (write) and others do not support links.
    +
    1761 # The default value is: NO.
    +
    1762 # This tag requires that the tag GENERATE_RTF is set to YES.
    +
    1763 
    +
    1764 RTF_HYPERLINKS = YES
    +
    1765 
    +
    1766 # Load stylesheet definitions from file. Syntax is similar to doxygen's config
    +
    1767 # file, i.e. a series of assignments. You only have to provide replacements,
    +
    1768 # missing definitions are set to their default value.
    +
    1769 #
    +
    1770 # See also section "Doxygen usage" for information on how to generate the
    +
    1771 # default style sheet that doxygen normally uses.
    +
    1772 # This tag requires that the tag GENERATE_RTF is set to YES.
    +
    1773 
    +
    1774 RTF_STYLESHEET_FILE =
    +
    1775 
    +
    1776 # Set optional variables used in the generation of an RTF document. Syntax is
    +
    1777 # similar to doxygen's config file. A template extensions file can be generated
    +
    1778 # using doxygen -e rtf extensionFile.
    +
    1779 # This tag requires that the tag GENERATE_RTF is set to YES.
    +
    1780 
    +
    1781 RTF_EXTENSIONS_FILE =
    +
    1782 
    +
    1783 #---------------------------------------------------------------------------
    +
    1784 # Configuration options related to the man page output
    +
    1785 #---------------------------------------------------------------------------
    +
    1786 
    +
    1787 # If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
    +
    1788 # classes and files.
    +
    1789 # The default value is: NO.
    +
    1790 
    +
    1791 GENERATE_MAN = NO
    +
    1792 
    +
    1793 # The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
    +
    1794 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    +
    1795 # it. A directory man3 will be created inside the directory specified by
    +
    1796 # MAN_OUTPUT.
    +
    1797 # The default directory is: man.
    +
    1798 # This tag requires that the tag GENERATE_MAN is set to YES.
    +
    1799 
    +
    1800 MAN_OUTPUT = man
    +
    1801 
    +
    1802 # The MAN_EXTENSION tag determines the extension that is added to the generated
    +
    1803 # man pages. In case the manual section does not start with a number, the number
    +
    1804 # 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
    +
    1805 # optional.
    +
    1806 # The default value is: .3.
    +
    1807 # This tag requires that the tag GENERATE_MAN is set to YES.
    +
    1808 
    +
    1809 MAN_EXTENSION = .3
    +
    1810 
    +
    1811 # The MAN_SUBDIR tag determines the name of the directory created within
    +
    1812 # MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
    +
    1813 # MAN_EXTENSION with the initial . removed.
    +
    1814 # This tag requires that the tag GENERATE_MAN is set to YES.
    +
    1815 
    +
    1816 MAN_SUBDIR =
    +
    1817 
    +
    1818 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
    +
    1819 # will generate one additional man file for each entity documented in the real
    +
    1820 # man page(s). These additional files only source the real man page, but without
    +
    1821 # them the man command would be unable to find the correct page.
    +
    1822 # The default value is: NO.
    +
    1823 # This tag requires that the tag GENERATE_MAN is set to YES.
    +
    1824 
    +
    1825 MAN_LINKS = NO
    +
    1826 
    +
    1827 #---------------------------------------------------------------------------
    +
    1828 # Configuration options related to the XML output
    +
    1829 #---------------------------------------------------------------------------
    +
    1830 
    +
    1831 # If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
    +
    1832 # captures the structure of the code including all documentation.
    +
    1833 # The default value is: NO.
    +
    1834 
    +
    1835 GENERATE_XML = NO
    +
    1836 
    +
    1837 # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
    +
    1838 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    +
    1839 # it.
    +
    1840 # The default directory is: xml.
    +
    1841 # This tag requires that the tag GENERATE_XML is set to YES.
    +
    1842 
    +
    1843 XML_OUTPUT = xml
    +
    1844 
    +
    1845 # If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
    +
    1846 # listings (including syntax highlighting and cross-referencing information) to
    +
    1847 # the XML output. Note that enabling this will significantly increase the size
    +
    1848 # of the XML output.
    +
    1849 # The default value is: YES.
    +
    1850 # This tag requires that the tag GENERATE_XML is set to YES.
    +
    1851 
    +
    1852 XML_PROGRAMLISTING = YES
    +
    1853 
    +
    1854 #---------------------------------------------------------------------------
    +
    1855 # Configuration options related to the DOCBOOK output
    +
    1856 #---------------------------------------------------------------------------
    +
    1857 
    +
    1858 # If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
    +
    1859 # that can be used to generate PDF.
    +
    1860 # The default value is: NO.
    +
    1861 
    +
    1862 GENERATE_DOCBOOK = NO
    +
    1863 
    +
    1864 # The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
    +
    1865 # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
    +
    1866 # front of it.
    +
    1867 # The default directory is: docbook.
    +
    1868 # This tag requires that the tag GENERATE_DOCBOOK is set to YES.
    +
    1869 
    +
    1870 DOCBOOK_OUTPUT = docbook
    +
    1871 
    +
    1872 # If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
    +
    1873 # program listings (including syntax highlighting and cross-referencing
    +
    1874 # information) to the DOCBOOK output. Note that enabling this will significantly
    +
    1875 # increase the size of the DOCBOOK output.
    +
    1876 # The default value is: NO.
    +
    1877 # This tag requires that the tag GENERATE_DOCBOOK is set to YES.
    +
    1878 
    +
    1879 DOCBOOK_PROGRAMLISTING = NO
    +
    1880 
    +
    1881 #---------------------------------------------------------------------------
    +
    1882 # Configuration options for the AutoGen Definitions output
    +
    1883 #---------------------------------------------------------------------------
    +
    1884 
    +
    1885 # If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
    +
    1886 # Definitions (see http://autogen.sf.net) file that captures the structure of
    +
    1887 # the code including all documentation. Note that this feature is still
    +
    1888 # experimental and incomplete at the moment.
    +
    1889 # The default value is: NO.
    +
    1890 
    +
    1891 GENERATE_AUTOGEN_DEF = NO
    +
    1892 
    +
    1893 #---------------------------------------------------------------------------
    +
    1894 # Configuration options related to the Perl module output
    +
    1895 #---------------------------------------------------------------------------
    +
    1896 
    +
    1897 # If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
    +
    1898 # file that captures the structure of the code including all documentation.
    +
    1899 #
    +
    1900 # Note that this feature is still experimental and incomplete at the moment.
    +
    1901 # The default value is: NO.
    +
    1902 
    +
    1903 GENERATE_PERLMOD = NO
    +
    1904 
    +
    1905 # If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
    +
    1906 # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
    +
    1907 # output from the Perl module output.
    +
    1908 # The default value is: NO.
    +
    1909 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
    +
    1910 
    +
    1911 PERLMOD_LATEX = NO
    +
    1912 
    +
    1913 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
    +
    1914 # formatted so it can be parsed by a human reader. This is useful if you want to
    +
    1915 # understand what is going on. On the other hand, if this tag is set to NO the
    +
    1916 # size of the Perl module output will be much smaller and Perl will parse it
    +
    1917 # just the same.
    +
    1918 # The default value is: YES.
    +
    1919 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
    +
    1920 
    +
    1921 PERLMOD_PRETTY = YES
    +
    1922 
    +
    1923 # The names of the make variables in the generated doxyrules.make file are
    +
    1924 # prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
    +
    1925 # so different doxyrules.make files included by the same Makefile don't
    +
    1926 # overwrite each other's variables.
    +
    1927 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
    +
    1928 
    +
    1929 PERLMOD_MAKEVAR_PREFIX =
    +
    1930 
    +
    1931 #---------------------------------------------------------------------------
    +
    1932 # Configuration options related to the preprocessor
    +
    1933 #---------------------------------------------------------------------------
    +
    1934 
    +
    1935 # If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
    +
    1936 # C-preprocessor directives found in the sources and include files.
    +
    1937 # The default value is: YES.
    +
    1938 
    +
    1939 ENABLE_PREPROCESSING = YES
    +
    1940 
    +
    1941 # If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
    +
    1942 # in the source code. If set to NO only conditional compilation will be
    +
    1943 # performed. Macro expansion can be done in a controlled way by setting
    +
    1944 # EXPAND_ONLY_PREDEF to YES.
    +
    1945 # The default value is: NO.
    +
    1946 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    +
    1947 
    +
    1948 MACRO_EXPANSION = NO
    +
    1949 
    +
    1950 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
    +
    1951 # the macro expansion is limited to the macros specified with the PREDEFINED and
    +
    1952 # EXPAND_AS_DEFINED tags.
    +
    1953 # The default value is: NO.
    +
    1954 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    +
    1955 
    +
    1956 EXPAND_ONLY_PREDEF = NO
    +
    1957 
    +
    1958 # If the SEARCH_INCLUDES tag is set to YES the includes files in the
    +
    1959 # INCLUDE_PATH will be searched if a #include is found.
    +
    1960 # The default value is: YES.
    +
    1961 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    +
    1962 
    +
    1963 SEARCH_INCLUDES = YES
    +
    1964 
    +
    1965 # The INCLUDE_PATH tag can be used to specify one or more directories that
    +
    1966 # contain include files that are not input files but should be processed by the
    +
    1967 # preprocessor.
    +
    1968 # This tag requires that the tag SEARCH_INCLUDES is set to YES.
    +
    1969 
    +
    1970 INCLUDE_PATH =
    +
    1971 
    +
    1972 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
    +
    1973 # patterns (like *.h and *.hpp) to filter out the header-files in the
    +
    1974 # directories. If left blank, the patterns specified with FILE_PATTERNS will be
    +
    1975 # used.
    +
    1976 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    +
    1977 
    +
    1978 INCLUDE_FILE_PATTERNS =
    +
    1979 
    +
    1980 # The PREDEFINED tag can be used to specify one or more macro names that are
    +
    1981 # defined before the preprocessor is started (similar to the -D option of e.g.
    +
    1982 # gcc). The argument of the tag is a list of macros of the form: name or
    +
    1983 # name=definition (no spaces). If the definition and the "=" are omitted, "=1"
    +
    1984 # is assumed. To prevent a macro definition from being undefined via #undef or
    +
    1985 # recursively expanded use the := operator instead of the = operator.
    +
    1986 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    +
    1987 
    +
    1988 PREDEFINED =
    +
    1989 
    +
    1990 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
    +
    1991 # tag can be used to specify a list of macro names that should be expanded. The
    +
    1992 # macro definition that is found in the sources will be used. Use the PREDEFINED
    +
    1993 # tag if you want to use a different macro definition that overrules the
    +
    1994 # definition found in the source code.
    +
    1995 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    +
    1996 
    +
    1997 EXPAND_AS_DEFINED =
    +
    1998 
    +
    1999 # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
    +
    2000 # remove all references to function-like macros that are alone on a line, have
    +
    2001 # an all uppercase name, and do not end with a semicolon. Such function macros
    +
    2002 # are typically used for boiler-plate code, and will confuse the parser if not
    +
    2003 # removed.
    +
    2004 # The default value is: YES.
    +
    2005 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    +
    2006 
    +
    2007 SKIP_FUNCTION_MACROS = YES
    +
    2008 
    +
    2009 #---------------------------------------------------------------------------
    +
    2010 # Configuration options related to external references
    +
    2011 #---------------------------------------------------------------------------
    +
    2012 
    +
    2013 # The TAGFILES tag can be used to specify one or more tag files. For each tag
    +
    2014 # file the location of the external documentation should be added. The format of
    +
    2015 # a tag file without this location is as follows:
    +
    2016 # TAGFILES = file1 file2 ...
    +
    2017 # Adding location for the tag files is done as follows:
    +
    2018 # TAGFILES = file1=loc1 "file2 = loc2" ...
    +
    2019 # where loc1 and loc2 can be relative or absolute paths or URLs. See the
    +
    2020 # section "Linking to external documentation" for more information about the use
    +
    2021 # of tag files.
    +
    2022 # Note: Each tag file must have a unique name (where the name does NOT include
    +
    2023 # the path). If a tag file is not located in the directory in which doxygen is
    +
    2024 # run, you must also specify the path to the tagfile here.
    +
    2025 
    +
    2026 TAGFILES =
    +
    2027 
    +
    2028 # When a file name is specified after GENERATE_TAGFILE, doxygen will create a
    +
    2029 # tag file that is based on the input files it reads. See section "Linking to
    +
    2030 # external documentation" for more information about the usage of tag files.
    +
    2031 
    +
    2032 GENERATE_TAGFILE =
    +
    2033 
    +
    2034 # If the ALLEXTERNALS tag is set to YES all external class will be listed in the
    +
    2035 # class index. If set to NO only the inherited external classes will be listed.
    +
    2036 # The default value is: NO.
    +
    2037 
    +
    2038 ALLEXTERNALS = NO
    +
    2039 
    +
    2040 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
    +
    2041 # the modules index. If set to NO, only the current project's groups will be
    +
    2042 # listed.
    +
    2043 # The default value is: YES.
    +
    2044 
    +
    2045 EXTERNAL_GROUPS = YES
    +
    2046 
    +
    2047 # If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
    +
    2048 # the related pages index. If set to NO, only the current project's pages will
    +
    2049 # be listed.
    +
    2050 # The default value is: YES.
    +
    2051 
    +
    2052 EXTERNAL_PAGES = YES
    +
    2053 
    +
    2054 # The PERL_PATH should be the absolute path and name of the perl script
    +
    2055 # interpreter (i.e. the result of 'which perl').
    +
    2056 # The default file (with absolute path) is: /usr/bin/perl.
    +
    2057 
    +
    2058 PERL_PATH = /usr/bin/perl
    +
    2059 
    +
    2060 #---------------------------------------------------------------------------
    +
    2061 # Configuration options related to the dot tool
    +
    2062 #---------------------------------------------------------------------------
    +
    2063 
    +
    2064 # If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
    +
    2065 # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
    +
    2066 # NO turns the diagrams off. Note that this option also works with HAVE_DOT
    +
    2067 # disabled, but it is recommended to install and use dot, since it yields more
    +
    2068 # powerful graphs.
    +
    2069 # The default value is: YES.
    +
    2070 
    +
    2071 CLASS_DIAGRAMS = YES
    +
    2072 
    +
    2073 # You can define message sequence charts within doxygen comments using the \msc
    +
    2074 # command. Doxygen will then run the mscgen tool (see:
    +
    2075 # http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
    +
    2076 # documentation. The MSCGEN_PATH tag allows you to specify the directory where
    +
    2077 # the mscgen tool resides. If left empty the tool is assumed to be found in the
    +
    2078 # default search path.
    +
    2079 
    +
    2080 MSCGEN_PATH =
    +
    2081 
    +
    2082 # You can include diagrams made with dia in doxygen documentation. Doxygen will
    +
    2083 # then run dia to produce the diagram and insert it in the documentation. The
    +
    2084 # DIA_PATH tag allows you to specify the directory where the dia binary resides.
    +
    2085 # If left empty dia is assumed to be found in the default search path.
    +
    2086 
    +
    2087 DIA_PATH =
    +
    2088 
    +
    2089 # If set to YES, the inheritance and collaboration graphs will hide inheritance
    +
    2090 # and usage relations if the target is undocumented or is not a class.
    +
    2091 # The default value is: YES.
    +
    2092 
    +
    2093 HIDE_UNDOC_RELATIONS = YES
    +
    2094 
    +
    2095 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
    +
    2096 # available from the path. This tool is part of Graphviz (see:
    +
    2097 # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
    +
    2098 # Bell Labs. The other options in this section have no effect if this option is
    +
    2099 # set to NO
    +
    2100 # The default value is: NO.
    +
    2101 
    +
    2102 HAVE_DOT = NO
    +
    2103 
    +
    2104 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
    +
    2105 # to run in parallel. When set to 0 doxygen will base this on the number of
    +
    2106 # processors available in the system. You can set it explicitly to a value
    +
    2107 # larger than 0 to get control over the balance between CPU load and processing
    +
    2108 # speed.
    +
    2109 # Minimum value: 0, maximum value: 32, default value: 0.
    +
    2110 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2111 
    +
    2112 DOT_NUM_THREADS = 0
    +
    2113 
    +
    2114 # When you want a differently looking font in the dot files that doxygen
    +
    2115 # generates you can specify the font name using DOT_FONTNAME. You need to make
    +
    2116 # sure dot is able to find the font, which can be done by putting it in a
    +
    2117 # standard location or by setting the DOTFONTPATH environment variable or by
    +
    2118 # setting DOT_FONTPATH to the directory containing the font.
    +
    2119 # The default value is: Helvetica.
    +
    2120 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2121 
    +
    2122 DOT_FONTNAME =
    +
    2123 
    +
    2124 # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
    +
    2125 # dot graphs.
    +
    2126 # Minimum value: 4, maximum value: 24, default value: 10.
    +
    2127 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2128 
    +
    2129 DOT_FONTSIZE = 10
    +
    2130 
    +
    2131 # By default doxygen will tell dot to use the default font as specified with
    +
    2132 # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
    +
    2133 # the path where dot can find it using this tag.
    +
    2134 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2135 
    +
    2136 DOT_FONTPATH =
    +
    2137 
    +
    2138 # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
    +
    2139 # each documented class showing the direct and indirect inheritance relations.
    +
    2140 # Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
    +
    2141 # The default value is: YES.
    +
    2142 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2143 
    +
    2144 CLASS_GRAPH = YES
    +
    2145 
    +
    2146 # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
    +
    2147 # graph for each documented class showing the direct and indirect implementation
    +
    2148 # dependencies (inheritance, containment, and class references variables) of the
    +
    2149 # class with other documented classes.
    +
    2150 # The default value is: YES.
    +
    2151 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2152 
    +
    2153 COLLABORATION_GRAPH = YES
    +
    2154 
    +
    2155 # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
    +
    2156 # groups, showing the direct groups dependencies.
    +
    2157 # The default value is: YES.
    +
    2158 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2159 
    +
    2160 GROUP_GRAPHS = YES
    +
    2161 
    +
    2162 # If the UML_LOOK tag is set to YES doxygen will generate inheritance and
    +
    2163 # collaboration diagrams in a style similar to the OMG's Unified Modeling
    +
    2164 # Language.
    +
    2165 # The default value is: NO.
    +
    2166 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2167 
    +
    2168 UML_LOOK = NO
    +
    2169 
    +
    2170 # If the UML_LOOK tag is enabled, the fields and methods are shown inside the
    +
    2171 # class node. If there are many fields or methods and many nodes the graph may
    +
    2172 # become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
    +
    2173 # number of items for each type to make the size more manageable. Set this to 0
    +
    2174 # for no limit. Note that the threshold may be exceeded by 50% before the limit
    +
    2175 # is enforced. So when you set the threshold to 10, up to 15 fields may appear,
    +
    2176 # but if the number exceeds 15, the total amount of fields shown is limited to
    +
    2177 # 10.
    +
    2178 # Minimum value: 0, maximum value: 100, default value: 10.
    +
    2179 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2180 
    +
    2181 UML_LIMIT_NUM_FIELDS = 10
    +
    2182 
    +
    2183 # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
    +
    2184 # collaboration graphs will show the relations between templates and their
    +
    2185 # instances.
    +
    2186 # The default value is: NO.
    +
    2187 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2188 
    +
    2189 TEMPLATE_RELATIONS = NO
    +
    2190 
    +
    2191 # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
    +
    2192 # YES then doxygen will generate a graph for each documented file showing the
    +
    2193 # direct and indirect include dependencies of the file with other documented
    +
    2194 # files.
    +
    2195 # The default value is: YES.
    +
    2196 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2197 
    +
    2198 INCLUDE_GRAPH = YES
    +
    2199 
    +
    2200 # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
    +
    2201 # set to YES then doxygen will generate a graph for each documented file showing
    +
    2202 # the direct and indirect include dependencies of the file with other documented
    +
    2203 # files.
    +
    2204 # The default value is: YES.
    +
    2205 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2206 
    +
    2207 INCLUDED_BY_GRAPH = YES
    +
    2208 
    +
    2209 # If the CALL_GRAPH tag is set to YES then doxygen will generate a call
    +
    2210 # dependency graph for every global function or class method.
    +
    2211 #
    +
    2212 # Note that enabling this option will significantly increase the time of a run.
    +
    2213 # So in most cases it will be better to enable call graphs for selected
    +
    2214 # functions only using the \callgraph command.
    +
    2215 # The default value is: NO.
    +
    2216 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2217 
    +
    2218 CALL_GRAPH = YES
    +
    2219 
    +
    2220 # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
    +
    2221 # dependency graph for every global function or class method.
    +
    2222 #
    +
    2223 # Note that enabling this option will significantly increase the time of a run.
    +
    2224 # So in most cases it will be better to enable caller graphs for selected
    +
    2225 # functions only using the \callergraph command.
    +
    2226 # The default value is: NO.
    +
    2227 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2228 
    +
    2229 CALLER_GRAPH = YES
    +
    2230 
    +
    2231 # If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
    +
    2232 # hierarchy of all classes instead of a textual one.
    +
    2233 # The default value is: YES.
    +
    2234 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2235 
    +
    2236 GRAPHICAL_HIERARCHY = YES
    +
    2237 
    +
    2238 # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
    +
    2239 # dependencies a directory has on other directories in a graphical way. The
    +
    2240 # dependency relations are determined by the #include relations between the
    +
    2241 # files in the directories.
    +
    2242 # The default value is: YES.
    +
    2243 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2244 
    +
    2245 DIRECTORY_GRAPH = YES
    +
    2246 
    +
    2247 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
    +
    2248 # generated by dot.
    +
    2249 # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
    +
    2250 # to make the SVG files visible in IE 9+ (other browsers do not have this
    +
    2251 # requirement).
    +
    2252 # Possible values are: png, jpg, gif and svg.
    +
    2253 # The default value is: png.
    +
    2254 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2255 
    +
    2256 DOT_IMAGE_FORMAT = png
    +
    2257 
    +
    2258 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
    +
    2259 # enable generation of interactive SVG images that allow zooming and panning.
    +
    2260 #
    +
    2261 # Note that this requires a modern browser other than Internet Explorer. Tested
    +
    2262 # and working are Firefox, Chrome, Safari, and Opera.
    +
    2263 # Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
    +
    2264 # the SVG files visible. Older versions of IE do not have SVG support.
    +
    2265 # The default value is: NO.
    +
    2266 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2267 
    +
    2268 INTERACTIVE_SVG = NO
    +
    2269 
    +
    2270 # The DOT_PATH tag can be used to specify the path where the dot tool can be
    +
    2271 # found. If left blank, it is assumed the dot tool can be found in the path.
    +
    2272 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2273 
    +
    2274 DOT_PATH =
    +
    2275 
    +
    2276 # The DOTFILE_DIRS tag can be used to specify one or more directories that
    +
    2277 # contain dot files that are included in the documentation (see the \dotfile
    +
    2278 # command).
    +
    2279 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2280 
    +
    2281 DOTFILE_DIRS =
    +
    2282 
    +
    2283 # The MSCFILE_DIRS tag can be used to specify one or more directories that
    +
    2284 # contain msc files that are included in the documentation (see the \mscfile
    +
    2285 # command).
    +
    2286 
    +
    2287 MSCFILE_DIRS =
    +
    2288 
    +
    2289 # The DIAFILE_DIRS tag can be used to specify one or more directories that
    +
    2290 # contain dia files that are included in the documentation (see the \diafile
    +
    2291 # command).
    +
    2292 
    +
    2293 DIAFILE_DIRS =
    +
    2294 
    +
    2295 # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
    +
    2296 # path where java can find the plantuml.jar file. If left blank, it is assumed
    +
    2297 # PlantUML is not used or called during a preprocessing step. Doxygen will
    +
    2298 # generate a warning when it encounters a \startuml command in this case and
    +
    2299 # will not generate output for the diagram.
    +
    2300 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2301 
    +
    2302 PLANTUML_JAR_PATH =
    +
    2303 
    +
    2304 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
    +
    2305 # that will be shown in the graph. If the number of nodes in a graph becomes
    +
    2306 # larger than this value, doxygen will truncate the graph, which is visualized
    +
    2307 # by representing a node as a red box. Note that doxygen if the number of direct
    +
    2308 # children of the root node in a graph is already larger than
    +
    2309 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
    +
    2310 # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
    +
    2311 # Minimum value: 0, maximum value: 10000, default value: 50.
    +
    2312 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2313 
    +
    2314 DOT_GRAPH_MAX_NODES = 50
    +
    2315 
    +
    2316 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
    +
    2317 # generated by dot. A depth value of 3 means that only nodes reachable from the
    +
    2318 # root by following a path via at most 3 edges will be shown. Nodes that lay
    +
    2319 # further from the root node will be omitted. Note that setting this option to 1
    +
    2320 # or 2 may greatly reduce the computation time needed for large code bases. Also
    +
    2321 # note that the size of a graph can be further restricted by
    +
    2322 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
    +
    2323 # Minimum value: 0, maximum value: 1000, default value: 0.
    +
    2324 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2325 
    +
    2326 MAX_DOT_GRAPH_DEPTH = 1000
    +
    2327 
    +
    2328 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
    +
    2329 # background. This is disabled by default, because dot on Windows does not seem
    +
    2330 # to support this out of the box.
    +
    2331 #
    +
    2332 # Warning: Depending on the platform used, enabling this option may lead to
    +
    2333 # badly anti-aliased labels on the edges of a graph (i.e. they become hard to
    +
    2334 # read).
    +
    2335 # The default value is: NO.
    +
    2336 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2337 
    +
    2338 DOT_TRANSPARENT = NO
    +
    2339 
    +
    2340 # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
    +
    2341 # files in one run (i.e. multiple -o and -T options on the command line). This
    +
    2342 # makes dot run faster, but since only newer versions of dot (>1.8.10) support
    +
    2343 # this, this feature is disabled by default.
    +
    2344 # The default value is: NO.
    +
    2345 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2346 
    +
    2347 DOT_MULTI_TARGETS = NO
    +
    2348 
    +
    2349 # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
    +
    2350 # explaining the meaning of the various boxes and arrows in the dot generated
    +
    2351 # graphs.
    +
    2352 # The default value is: YES.
    +
    2353 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2354 
    +
    2355 GENERATE_LEGEND = YES
    +
    2356 
    +
    2357 # If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
    +
    2358 # files that are used to generate the various graphs.
    +
    2359 # The default value is: YES.
    +
    2360 # This tag requires that the tag HAVE_DOT is set to YES.
    +
    2361 
    +
    2362 DOT_CLEANUP = YES
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00057.html b/doc/api/a00057.html new file mode 100644 index 00000000..75f3a641 --- /dev/null +++ b/doc/api/a00057.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: mat2x2.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    mat2x2.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    + +

    Definition in file mat2x2.hpp.

    +
    + + + + diff --git a/doc/api/a00057_source.html b/doc/api/a00057_source.html index 2c774b08..a7414c07 100644 --- a/doc/api/a00057_source.html +++ b/doc/api/a00057_source.html @@ -3,8 +3,8 @@ - -GLM: intrinsic_trigonometric.hpp Source File + +0.9.6: mat2x2.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,41 +41,48 @@
    -
    intrinsic_trigonometric.hpp
    +
    mat2x2.hpp
    -
    1 
    -
    29 #ifndef glm_detail_intrinsic_trigonometric
    -
    30 #define glm_detail_intrinsic_trigonometric
    -
    31 
    -
    32 #include "setup.hpp"
    -
    33 
    -
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    -
    35 # error "SSE2 instructions not supported or enabled"
    -
    36 #else
    -
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41 
    -
    42 }//namespace detail
    -
    43 }//namespace glm
    -
    44 
    -
    45 #include "intrinsic_trigonometric.inl"
    -
    46 
    -
    47 #endif//GLM_ARCH
    -
    48 #endif//glm_detail_intrinsic_trigonometric
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_mat2x2.hpp"
    +
    32 
    +
    33 namespace glm
    +
    34 {
    +
    40  typedef tmat2x2<float, lowp> lowp_mat2;
    +
    41 
    +
    47  typedef tmat2x2<float, mediump> mediump_mat2;
    +
    48 
    +
    54  typedef tmat2x2<float, highp> highp_mat2;
    +
    55 
    +
    61  typedef tmat2x2<float, lowp> lowp_mat2x2;
    +
    62 
    +
    68  typedef tmat2x2<float, mediump> mediump_mat2x2;
    +
    69 
    +
    75  typedef tmat2x2<float, highp> highp_mat2x2;
    +
    76 
    +
    77 }//namespace glm
    +
    tmat2x2< float, mediump > mediump_mat2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:68
    +
    tmat2x2< float, lowp > lowp_mat2x2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:82
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tmat2x2< float, highp > highp_mat2x2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:96
    +
    tmat2x2< float, mediump > mediump_mat2x2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:89
    +
    Definition: _noise.hpp:31
    +
    tmat2x2< float, lowp > lowp_mat2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:61
    +
    tmat2x2< float, highp > highp_mat2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:75
    diff --git a/doc/api/a00058.html b/doc/api/a00058.html new file mode 100644 index 00000000..b7a63ed6 --- /dev/null +++ b/doc/api/a00058.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: mat2x3.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    mat2x3.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    + +

    Definition in file mat2x3.hpp.

    +
    + + + + diff --git a/doc/api/a00058_source.html b/doc/api/a00058_source.html index 664447a7..c2d61da3 100644 --- a/doc/api/a00058_source.html +++ b/doc/api/a00058_source.html @@ -3,8 +3,8 @@ - -GLM: intrinsic_vector_relational.hpp Source File + +0.9.6: mat2x3.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,41 +41,40 @@
    -
    intrinsic_vector_relational.hpp
    +
    mat2x3.hpp
    -
    1 
    -
    29 #ifndef glm_detail_intrinsic_vector_relational
    -
    30 #define glm_detail_intrinsic_vector_relational
    -
    31 
    -
    32 #include "setup.hpp"
    -
    33 
    -
    34 #if(!(GLM_ARCH & GLM_ARCH_SSE2))
    -
    35 # error "SSE2 instructions not supported or enabled"
    -
    36 #else
    -
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_mat2x3.hpp"
    +
    32 
    +
    33 namespace glm
    +
    34 {
    +
    40  typedef tmat2x3<float, lowp> lowp_mat2x3;
    41 
    -
    42 }//namespace detail
    -
    43 }//namespace glm
    -
    44 
    -
    45 #include "intrinsic_vector_relational.inl"
    -
    46 
    -
    47 #endif//GLM_ARCH
    -
    48 #endif//glm_detail_intrinsic_vector_relational
    +
    47  typedef tmat2x3<float, mediump> mediump_mat2x3;
    +
    48 
    +
    54  typedef tmat2x3<float, highp> highp_mat2x3;
    +
    55 
    +
    56 }//namespace glm
    +
    57 
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tmat2x3< float, highp > highp_mat2x3
    2 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:122
    +
    tmat2x3< float, lowp > lowp_mat2x3
    2 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:108
    +
    tmat2x3< float, mediump > mediump_mat2x3
    2 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:115
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00059.html b/doc/api/a00059.html index e7283997..3ebc81df 100644 --- a/doc/api/a00059.html +++ b/doc/api/a00059.html @@ -3,8 +3,8 @@ - -GLM: io.hpp File Reference + +0.9.6: mat2x4.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,43 +41,32 @@
    -
    -
    io.hpp File Reference
    +
    mat2x4.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_io

    -
    Date
    2013-11-22
    -
    Author
    Jan P Springer (regni.nosp@m.rpsj.nosp@m.@gmai.nosp@m.l.co.nosp@m.m)
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_quaternion (dependence)
    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    -

    Definition in file io.hpp.

    +

    Definition in file mat2x4.hpp.

    diff --git a/doc/api/a00059_source.html b/doc/api/a00059_source.html index 7dab7195..33da3bb6 100644 --- a/doc/api/a00059_source.html +++ b/doc/api/a00059_source.html @@ -3,8 +3,8 @@ - -GLM: io.hpp Source File + +0.9.6: mat2x4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,130 +41,39 @@
    -
    io.hpp
    +
    mat2x4.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_io
    -
    40 #define GLM_GTX_io
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../detail/setup.hpp"
    -
    44 #include "../gtc/quaternion.hpp"
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_io extension included")
    -
    48 #endif
    -
    49 
    -
    50 #include <iosfwd> // std::basic_ostream<> (fwd)
    -
    51 #include <utility> // std::pair<>
    -
    52 
    -
    53 namespace glm
    -
    54 {
    -
    57 
    -
    58  namespace io
    -
    59  {
    -
    60 
    -
    61  class precision_guard {
    -
    62 
    -
    63  public:
    -
    64 
    -
    65  GLM_FUNC_DECL explicit precision_guard();
    -
    66  GLM_FUNC_DECL ~precision_guard();
    -
    67 
    -
    68  private:
    -
    69 
    -
    70  unsigned precision_;
    -
    71  unsigned value_width_;
    -
    72 
    -
    73  };
    -
    74 
    -
    75  class format_guard
    -
    76  {
    -
    77  public:
    -
    78  enum order_t { column_major, row_major, };
    -
    79 
    -
    80  GLM_FUNC_DECL explicit format_guard();
    -
    81  GLM_FUNC_DECL ~format_guard();
    -
    82 
    -
    83  private:
    -
    84 
    -
    85  order_t order_;
    -
    86  char cr_;
    -
    87  };
    -
    88 
    -
    89  // decimal places (dflt: 3)
    -
    90  GLM_FUNC_DECL unsigned& precision();
    -
    91 
    -
    92  // sign + value + '.' + decimals (dflt: 1 + 4 + 1 + precision())
    -
    93  GLM_FUNC_DECL unsigned& value_width();
    -
    94 
    -
    95  // matrix output order (dflt: row_major)
    -
    96  GLM_FUNC_DECL format_guard::order_t& order();
    -
    97 
    -
    98  // carriage/return char (dflt: '\n')
    -
    99  GLM_FUNC_DECL char& cr();
    -
    100 
    -
    101  // matrix output order -> column_major
    -
    102  GLM_FUNC_DECL std::ios_base& column_major(std::ios_base&);
    -
    103 
    -
    104  // matrix output order -> row_major
    -
    105  GLM_FUNC_DECL std::ios_base& row_major (std::ios_base&);
    -
    106 
    -
    107  // carriage/return char -> '\n'
    -
    108  GLM_FUNC_DECL std::ios_base& formatted (std::ios_base&);
    -
    109 
    -
    110  // carriage/return char -> ' '
    -
    111  GLM_FUNC_DECL std::ios_base& unformatted (std::ios_base&);
    -
    112 
    -
    113  }//namespace io
    -
    114 
    -
    115  namespace detail
    -
    116  {
    -
    117  template <typename CTy, typename CTr, typename T, precision P>
    -
    118  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tquat<T,P> const&);
    -
    119  template <typename CTy, typename CTr, typename T, precision P>
    -
    120  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec2<T,P> const&);
    -
    121  template <typename CTy, typename CTr, typename T, precision P>
    -
    122  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec3<T,P> const&);
    -
    123  template <typename CTy, typename CTr, typename T, precision P>
    -
    124  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec4<T,P> const&);
    -
    125  template <typename CTy, typename CTr, typename T, precision P>
    -
    126  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x2<T,P> const&);
    -
    127  template <typename CTy, typename CTr, typename T, precision P>
    -
    128  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x3<T,P> const&);
    -
    129  template <typename CTy, typename CTr, typename T, precision P>
    -
    130  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x4<T,P> const&);
    -
    131  template <typename CTy, typename CTr, typename T, precision P>
    -
    132  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x2<T,P> const&);
    -
    133  template <typename CTy, typename CTr, typename T, precision P>
    -
    134  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x3<T,P> const&);
    -
    135  template <typename CTy, typename CTr, typename T, precision P>
    -
    136  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x4<T,P> const&);
    -
    137  template <typename CTy, typename CTr, typename T, precision P>
    -
    138  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x2<T,P> const&);
    -
    139  template <typename CTy, typename CTr, typename T, precision P>
    -
    140  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x3<T,P> const&);
    -
    141  template <typename CTy, typename CTr, typename T, precision P>
    -
    142  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x4<T,P> const&);
    -
    143 
    -
    145 }//namespace detail
    -
    146 }//namespace glm
    -
    147 
    -
    148 #include "io.inl"
    -
    149 
    -
    150 #endif//GLM_GTX_io
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_mat2x4.hpp"
    +
    32 
    +
    33 namespace glm
    +
    34 {
    +
    40  typedef tmat2x4<float, lowp> lowp_mat2x4;
    +
    41 
    +
    47  typedef tmat2x4<float, mediump> mediump_mat2x4;
    +
    48 
    +
    54  typedef tmat2x4<float, highp> highp_mat2x4;
    +
    55 
    +
    56 }//namespace glm
    +
    tmat2x4< float, lowp > lowp_mat2x4
    2 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:134
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tmat2x4< float, highp > highp_mat2x4
    2 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:148
    +
    Definition: _noise.hpp:31
    +
    tmat2x4< float, mediump > mediump_mat2x4
    2 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:141
    diff --git a/doc/api/a00060.html b/doc/api/a00060.html index f0698738..7d74f2c6 100644 --- a/doc/api/a00060.html +++ b/doc/api/a00060.html @@ -3,8 +3,8 @@ - -GLM: log_base.hpp File Reference + +0.9.6: mat3x2.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,48 +41,32 @@
    -
    -
    log_base.hpp File Reference
    +
    mat3x2.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - -

    -Functions

    template<typename genType >
    genType log (genType const &x, genType const &base)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_log_base

    -
    Date
    2008-10-24 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    -

    Definition in file log_base.hpp.

    +

    Definition in file mat3x2.hpp.

    diff --git a/doc/api/a00060_source.html b/doc/api/a00060_source.html index 75b7b0fe..c03796a1 100644 --- a/doc/api/a00060_source.html +++ b/doc/api/a00060_source.html @@ -3,8 +3,8 @@ - -GLM: log_base.hpp Source File + +0.9.6: mat3x2.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,45 +41,39 @@
    -
    log_base.hpp
    +
    mat3x2.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_log_base
    -
    39 #define GLM_GTX_log_base
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_log_base extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename genType>
    -
    56  genType log(
    -
    57  genType const & x,
    -
    58  genType const & base);
    -
    59 
    -
    61 }//namespace glm
    -
    62 
    -
    63 #include "log_base.inl"
    -
    64 
    -
    65 #endif//GLM_GTX_log_base
    -
    GLM_FUNC_DECL genType log(genType const &x)
    Returns the natural logarithm of x, i.e., returns the value y which satisfies the equation x = e^y...
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_mat3x2.hpp"
    +
    32 
    +
    33 namespace glm
    +
    34 {
    +
    40  typedef tmat3x2<float, lowp> lowp_mat3x2;
    +
    41 
    +
    47  typedef tmat3x2<float, mediump> mediump_mat3x2;
    +
    48 
    +
    54  typedef tmat3x2<float, highp> highp_mat3x2;
    +
    55 
    +
    56 }//namespace
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tmat3x2< float, lowp > lowp_mat3x2
    3 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:160
    +
    Definition: _noise.hpp:31
    +
    tmat3x2< float, mediump > mediump_mat3x2
    3 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:167
    +
    tmat3x2< float, highp > highp_mat3x2
    3 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:174
    diff --git a/doc/api/a00061.html b/doc/api/a00061.html new file mode 100644 index 00000000..4b0c83a1 --- /dev/null +++ b/doc/api/a00061.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: mat3x3.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    mat3x3.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    + +

    Definition in file mat3x3.hpp.

    +
    + + + + diff --git a/doc/api/a00061_source.html b/doc/api/a00061_source.html index 9c9af58c..aa674154 100644 --- a/doc/api/a00061_source.html +++ b/doc/api/a00061_source.html @@ -3,8 +3,8 @@ - -GLM: man.doxy Source File + +0.9.6: mat3x3.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,2331 +41,48 @@
    -
    man.doxy
    +
    mat3x3.hpp
    -
    1 # Doxyfile 1.8.5
    -
    2 
    -
    3 # This file describes the settings to be used by the documentation system
    -
    4 # doxygen (www.doxygen.org) for a project.
    -
    5 #
    -
    6 # All text after a double hash (##) is considered a comment and is placed in
    -
    7 # front of the TAG it is preceding.
    -
    8 #
    -
    9 # All text after a single hash (#) is considered a comment and will be ignored.
    -
    10 # The format is:
    -
    11 # TAG = value [value, ...]
    -
    12 # For lists, items can also be appended using:
    -
    13 # TAG += value [value, ...]
    -
    14 # Values that contain spaces should be placed between quotes (\" \").
    -
    15 
    -
    16 #---------------------------------------------------------------------------
    -
    17 # Project related configuration options
    -
    18 #---------------------------------------------------------------------------
    -
    19 
    -
    20 # This tag specifies the encoding used for all characters in the config file
    -
    21 # that follow. The default is UTF-8 which is also the encoding used for all text
    -
    22 # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
    -
    23 # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
    -
    24 # for the list of possible encodings.
    -
    25 # The default value is: UTF-8.
    -
    26 
    -
    27 DOXYFILE_ENCODING = UTF-8
    -
    28 
    -
    29 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
    -
    30 # double-quotes, unless you are using Doxywizard) that should identify the
    -
    31 # project for which the documentation is generated. This name is used in the
    -
    32 # title of most generated pages and in a few other places.
    -
    33 # The default value is: My Project.
    -
    34 
    -
    35 PROJECT_NAME = GLM
    -
    36 
    -
    37 # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
    -
    38 # could be handy for archiving the generated documentation or if some version
    -
    39 # control system is used.
    -
    40 
    -
    41 PROJECT_NUMBER = 0.9.5
    -
    42 
    -
    43 # Using the PROJECT_BRIEF tag one can provide an optional one line description
    -
    44 # for a project that appears at the top of each page and should give viewer a
    -
    45 # quick idea about the purpose of the project. Keep the description short.
    -
    46 
    -
    47 PROJECT_BRIEF =
    -
    48 
    -
    49 # With the PROJECT_LOGO tag one can specify an logo or icon that is included in
    -
    50 # the documentation. The maximum height of the logo should not exceed 55 pixels
    -
    51 # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
    -
    52 # to the output directory.
    -
    53 
    -
    54 PROJECT_LOGO = G:/Repository/glm/doc/logo.png
    -
    55 
    -
    56 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
    -
    57 # into which the generated documentation will be written. If a relative path is
    -
    58 # entered, it will be relative to the location where doxygen was started. If
    -
    59 # left blank the current directory will be used.
    -
    60 
    -
    61 OUTPUT_DIRECTORY = .
    -
    62 
    -
    63 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
    -
    64 # directories (in 2 levels) under the output directory of each output format and
    -
    65 # will distribute the generated files over these directories. Enabling this
    -
    66 # option can be useful when feeding doxygen a huge amount of source files, where
    -
    67 # putting all generated files in the same directory would otherwise causes
    -
    68 # performance problems for the file system.
    -
    69 # The default value is: NO.
    -
    70 
    -
    71 CREATE_SUBDIRS = NO
    -
    72 
    -
    73 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
    -
    74 # documentation generated by doxygen is written. Doxygen will use this
    -
    75 # information to generate all constant output in the proper language.
    -
    76 # Possible values are: Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-
    -
    77 # Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, Farsi,
    -
    78 # Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en,
    -
    79 # Korean, Korean-en, Latvian, Norwegian, Macedonian, Persian, Polish,
    -
    80 # Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish,
    -
    81 # Turkish, Ukrainian and Vietnamese.
    -
    82 # The default value is: English.
    -
    83 
    -
    84 OUTPUT_LANGUAGE = English
    -
    85 
    -
    86 # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
    -
    87 # descriptions after the members that are listed in the file and class
    -
    88 # documentation (similar to Javadoc). Set to NO to disable this.
    -
    89 # The default value is: YES.
    -
    90 
    -
    91 BRIEF_MEMBER_DESC = NO
    -
    92 
    -
    93 # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
    -
    94 # description of a member or function before the detailed description
    -
    95 #
    -
    96 # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
    -
    97 # brief descriptions will be completely suppressed.
    -
    98 # The default value is: YES.
    -
    99 
    -
    100 REPEAT_BRIEF = YES
    -
    101 
    -
    102 # This tag implements a quasi-intelligent brief description abbreviator that is
    -
    103 # used to form the text in various listings. Each string in this list, if found
    -
    104 # as the leading text of the brief description, will be stripped from the text
    -
    105 # and the result, after processing the whole list, is used as the annotated
    -
    106 # text. Otherwise, the brief description is used as-is. If left blank, the
    -
    107 # following values are used ($name is automatically replaced with the name of
    -
    108 # the entity):The $name class, The $name widget, The $name file, is, provides,
    -
    109 # specifies, contains, represents, a, an and the.
    -
    110 
    -
    111 ABBREVIATE_BRIEF = "The $name class " \
    -
    112  "The $name widget " \
    -
    113  "The $name file " \
    -
    114  is \
    -
    115  provides \
    -
    116  specifies \
    -
    117  contains \
    -
    118  represents \
    -
    119  a \
    -
    120  an \
    -
    121  the
    -
    122 
    -
    123 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
    -
    124 # doxygen will generate a detailed section even if there is only a brief
    -
    125 # description.
    -
    126 # The default value is: NO.
    -
    127 
    -
    128 ALWAYS_DETAILED_SEC = NO
    -
    129 
    -
    130 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
    -
    131 # inherited members of a class in the documentation of that class as if those
    -
    132 # members were ordinary class members. Constructors, destructors and assignment
    -
    133 # operators of the base classes will not be shown.
    -
    134 # The default value is: NO.
    -
    135 
    -
    136 INLINE_INHERITED_MEMB = NO
    -
    137 
    -
    138 # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
    -
    139 # before files name in the file list and in the header files. If set to NO the
    -
    140 # shortest path that makes the file name unique will be used
    -
    141 # The default value is: YES.
    -
    142 
    -
    143 FULL_PATH_NAMES = NO
    -
    144 
    -
    145 # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
    -
    146 # Stripping is only done if one of the specified strings matches the left-hand
    -
    147 # part of the path. The tag can be used to show relative paths in the file list.
    -
    148 # If left blank the directory from which doxygen is run is used as the path to
    -
    149 # strip.
    -
    150 #
    -
    151 # Note that you can specify absolute paths here, but also relative paths, which
    -
    152 # will be relative from the directory where doxygen is started.
    -
    153 # This tag requires that the tag FULL_PATH_NAMES is set to YES.
    -
    154 
    -
    155 STRIP_FROM_PATH = "C:/Documents and Settings/Groove/ "
    -
    156 
    -
    157 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
    -
    158 # path mentioned in the documentation of a class, which tells the reader which
    -
    159 # header file to include in order to use a class. If left blank only the name of
    -
    160 # the header file containing the class definition is used. Otherwise one should
    -
    161 # specify the list of include paths that are normally passed to the compiler
    -
    162 # using the -I flag.
    -
    163 
    -
    164 STRIP_FROM_INC_PATH =
    -
    165 
    -
    166 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
    -
    167 # less readable) file names. This can be useful is your file systems doesn't
    -
    168 # support long names like on DOS, Mac, or CD-ROM.
    -
    169 # The default value is: NO.
    -
    170 
    -
    171 SHORT_NAMES = YES
    -
    172 
    -
    173 # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
    -
    174 # first line (until the first dot) of a Javadoc-style comment as the brief
    -
    175 # description. If set to NO, the Javadoc-style will behave just like regular Qt-
    -
    176 # style comments (thus requiring an explicit @brief command for a brief
    -
    177 # description.)
    -
    178 # The default value is: NO.
    -
    179 
    -
    180 JAVADOC_AUTOBRIEF = YES
    -
    181 
    -
    182 # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
    -
    183 # line (until the first dot) of a Qt-style comment as the brief description. If
    -
    184 # set to NO, the Qt-style will behave just like regular Qt-style comments (thus
    -
    185 # requiring an explicit \brief command for a brief description.)
    -
    186 # The default value is: NO.
    -
    187 
    -
    188 QT_AUTOBRIEF = NO
    -
    189 
    -
    190 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
    -
    191 # multi-line C++ special comment block (i.e. a block of
    -
    192 # a brief description. This used to be the default behavior. The new default is
    -
    193 # to treat a multi-line C++ comment block as a detailed description. Set this
    -
    194 # tag to YES if you prefer the old behavior instead.
    -
    195 #
    -
    196 # Note that setting this tag to YES also means that rational rose comments are
    -
    197 # not recognized any more.
    -
    198 # The default value is: NO.
    -
    199 
    -
    200 MULTILINE_CPP_IS_BRIEF = NO
    -
    201 
    -
    202 # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
    -
    203 # documentation from any documented member that it re-implements.
    -
    204 # The default value is: YES.
    -
    205 
    -
    206 INHERIT_DOCS = YES
    -
    207 
    -
    208 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
    -
    209 # new page for each member. If set to NO, the documentation of a member will be
    -
    210 # part of the file/class/namespace that contains it.
    -
    211 # The default value is: NO.
    -
    212 
    -
    213 SEPARATE_MEMBER_PAGES = NO
    -
    214 
    -
    215 # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
    -
    216 # uses this value to replace tabs by spaces in code fragments.
    -
    217 # Minimum value: 1, maximum value: 16, default value: 4.
    -
    218 
    -
    219 TAB_SIZE = 8
    -
    220 
    -
    221 # This tag can be used to specify a number of aliases that act as commands in
    -
    222 # the documentation. An alias has the form:
    -
    223 # name=value
    -
    224 # For example adding
    -
    225 # "sideeffect=@par Side Effects:\n"
    -
    226 # will allow you to put the command \sideeffect (or @sideeffect) in the
    -
    227 # documentation, which will result in a user-defined paragraph with heading
    -
    228 # "Side Effects:". You can put \n's in the value part of an alias to insert
    -
    229 # newlines.
    -
    230 
    -
    231 ALIASES =
    -
    232 
    -
    233 # This tag can be used to specify a number of word-keyword mappings (TCL only).
    -
    234 # A mapping has the form "name=value". For example adding "class=itcl::class"
    -
    235 # will allow you to use the command class in the itcl::class meaning.
    -
    236 
    -
    237 TCL_SUBST =
    -
    238 
    -
    239 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
    -
    240 # only. Doxygen will then generate output that is more tailored for C. For
    -
    241 # instance, some of the names that are used will be different. The list of all
    -
    242 # members will be omitted, etc.
    -
    243 # The default value is: NO.
    -
    244 
    -
    245 OPTIMIZE_OUTPUT_FOR_C = NO
    -
    246 
    -
    247 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
    -
    248 # Python sources only. Doxygen will then generate output that is more tailored
    -
    249 # for that language. For instance, namespaces will be presented as packages,
    -
    250 # qualified scopes will look different, etc.
    -
    251 # The default value is: NO.
    -
    252 
    -
    253 OPTIMIZE_OUTPUT_JAVA = NO
    -
    254 
    -
    255 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
    -
    256 # sources. Doxygen will then generate output that is tailored for Fortran.
    -
    257 # The default value is: NO.
    -
    258 
    -
    259 OPTIMIZE_FOR_FORTRAN = NO
    -
    260 
    -
    261 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
    -
    262 # sources. Doxygen will then generate output that is tailored for VHDL.
    -
    263 # The default value is: NO.
    -
    264 
    -
    265 OPTIMIZE_OUTPUT_VHDL = NO
    -
    266 
    -
    267 # Doxygen selects the parser to use depending on the extension of the files it
    -
    268 # parses. With this tag you can assign which parser to use for a given
    -
    269 # extension. Doxygen has a built-in mapping, but you can override or extend it
    -
    270 # using this tag. The format is ext=language, where ext is a file extension, and
    -
    271 # language is one of the parsers supported by doxygen: IDL, Java, Javascript,
    -
    272 # C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
    -
    273 # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
    -
    274 # (default is Fortran), use: inc=Fortran f=C.
    -
    275 #
    -
    276 # Note For files without extension you can use no_extension as a placeholder.
    -
    277 #
    -
    278 # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
    -
    279 # the files are not read by doxygen.
    -
    280 
    -
    281 EXTENSION_MAPPING =
    -
    282 
    -
    283 # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
    -
    284 # according to the Markdown format, which allows for more readable
    -
    285 # documentation. See http://daringfireball.net/projects/markdown/ for details.
    -
    286 # The output of markdown processing is further processed by doxygen, so you can
    -
    287 # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
    -
    288 # case of backward compatibilities issues.
    -
    289 # The default value is: YES.
    -
    290 
    -
    291 MARKDOWN_SUPPORT = YES
    -
    292 
    -
    293 # When enabled doxygen tries to link words that correspond to documented
    -
    294 # classes, or namespaces to their corresponding documentation. Such a link can
    -
    295 # be prevented in individual cases by by putting a % sign in front of the word
    -
    296 # or globally by setting AUTOLINK_SUPPORT to NO.
    -
    297 # The default value is: YES.
    -
    298 
    -
    299 AUTOLINK_SUPPORT = YES
    -
    300 
    -
    301 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
    -
    302 # to include (a tag file for) the STL sources as input, then you should set this
    -
    303 # tag to YES in order to let doxygen match functions declarations and
    -
    304 # definitions whose arguments contain STL classes (e.g. func(std::string);
    -
    305 # versus func(std::string) {}). This also make the inheritance and collaboration
    -
    306 # diagrams that involve STL classes more complete and accurate.
    -
    307 # The default value is: NO.
    -
    308 
    -
    309 BUILTIN_STL_SUPPORT = NO
    -
    310 
    -
    311 # If you use Microsoft's C++/CLI language, you should set this option to YES to
    -
    312 # enable parsing support.
    -
    313 # The default value is: NO.
    -
    314 
    -
    315 CPP_CLI_SUPPORT = NO
    -
    316 
    -
    317 # Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
    -
    318 # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
    -
    319 # will parse them like normal C++ but will assume all classes use public instead
    -
    320 # of private inheritance when no explicit protection keyword is present.
    -
    321 # The default value is: NO.
    -
    322 
    -
    323 SIP_SUPPORT = NO
    -
    324 
    -
    325 # For Microsoft's IDL there are propget and propput attributes to indicate
    -
    326 # getter and setter methods for a property. Setting this option to YES will make
    -
    327 # doxygen to replace the get and set methods by a property in the documentation.
    -
    328 # This will only work if the methods are indeed getting or setting a simple
    -
    329 # type. If this is not the case, or you want to show the methods anyway, you
    -
    330 # should set this option to NO.
    -
    331 # The default value is: YES.
    -
    332 
    -
    333 IDL_PROPERTY_SUPPORT = YES
    -
    334 
    -
    335 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
    -
    336 # tag is set to YES, then doxygen will reuse the documentation of the first
    -
    337 # member in the group (if any) for the other members of the group. By default
    -
    338 # all members of a group must be documented explicitly.
    -
    339 # The default value is: NO.
    -
    340 
    -
    341 DISTRIBUTE_GROUP_DOC = NO
    -
    342 
    -
    343 # Set the SUBGROUPING tag to YES to allow class member groups of the same type
    -
    344 # (for instance a group of public functions) to be put as a subgroup of that
    -
    345 # type (e.g. under the Public Functions section). Set it to NO to prevent
    -
    346 # subgrouping. Alternatively, this can be done per class using the
    -
    347 # \nosubgrouping command.
    -
    348 # The default value is: YES.
    -
    349 
    -
    350 SUBGROUPING = NO
    -
    351 
    -
    352 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
    -
    353 # are shown inside the group in which they are included (e.g. using \ingroup)
    -
    354 # instead of on a separate page (for HTML and Man pages) or section (for LaTeX
    -
    355 # and RTF).
    -
    356 #
    -
    357 # Note that this feature does not work in combination with
    -
    358 # SEPARATE_MEMBER_PAGES.
    -
    359 # The default value is: NO.
    -
    360 
    -
    361 INLINE_GROUPED_CLASSES = NO
    -
    362 
    -
    363 # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
    -
    364 # with only public data fields or simple typedef fields will be shown inline in
    -
    365 # the documentation of the scope in which they are defined (i.e. file,
    -
    366 # namespace, or group documentation), provided this scope is documented. If set
    -
    367 # to NO, structs, classes, and unions are shown on a separate page (for HTML and
    -
    368 # Man pages) or section (for LaTeX and RTF).
    -
    369 # The default value is: NO.
    -
    370 
    -
    371 INLINE_SIMPLE_STRUCTS = NO
    -
    372 
    -
    373 # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
    -
    374 # enum is documented as struct, union, or enum with the name of the typedef. So
    -
    375 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
    -
    376 # with name TypeT. When disabled the typedef will appear as a member of a file,
    -
    377 # namespace, or class. And the struct will be named TypeS. This can typically be
    -
    378 # useful for C code in case the coding convention dictates that all compound
    -
    379 # types are typedef'ed and only the typedef is referenced, never the tag name.
    -
    380 # The default value is: NO.
    -
    381 
    -
    382 TYPEDEF_HIDES_STRUCT = NO
    -
    383 
    -
    384 # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
    -
    385 # cache is used to resolve symbols given their name and scope. Since this can be
    -
    386 # an expensive process and often the same symbol appears multiple times in the
    -
    387 # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
    -
    388 # doxygen will become slower. If the cache is too large, memory is wasted. The
    -
    389 # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
    -
    390 # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
    -
    391 # symbols. At the end of a run doxygen will report the cache usage and suggest
    -
    392 # the optimal cache size from a speed point of view.
    -
    393 # Minimum value: 0, maximum value: 9, default value: 0.
    -
    394 
    -
    395 LOOKUP_CACHE_SIZE = 0
    -
    396 
    -
    397 #---------------------------------------------------------------------------
    -
    398 # Build related configuration options
    -
    399 #---------------------------------------------------------------------------
    -
    400 
    -
    401 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
    -
    402 # documentation are documented, even if no documentation was available. Private
    -
    403 # class members and static file members will be hidden unless the
    -
    404 # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
    -
    405 # Note: This will also disable the warnings about undocumented members that are
    -
    406 # normally produced when WARNINGS is set to YES.
    -
    407 # The default value is: NO.
    -
    408 
    -
    409 EXTRACT_ALL = NO
    -
    410 
    -
    411 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
    -
    412 # be included in the documentation.
    -
    413 # The default value is: NO.
    -
    414 
    -
    415 EXTRACT_PRIVATE = NO
    -
    416 
    -
    417 # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
    -
    418 # scope will be included in the documentation.
    -
    419 # The default value is: NO.
    -
    420 
    -
    421 EXTRACT_PACKAGE = NO
    -
    422 
    -
    423 # If the EXTRACT_STATIC tag is set to YES all static members of a file will be
    -
    424 # included in the documentation.
    -
    425 # The default value is: NO.
    -
    426 
    -
    427 EXTRACT_STATIC = YES
    -
    428 
    -
    429 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
    -
    430 # locally in source files will be included in the documentation. If set to NO
    -
    431 # only classes defined in header files are included. Does not have any effect
    -
    432 # for Java sources.
    -
    433 # The default value is: YES.
    -
    434 
    -
    435 EXTRACT_LOCAL_CLASSES = NO
    -
    436 
    -
    437 # This flag is only useful for Objective-C code. When set to YES local methods,
    -
    438 # which are defined in the implementation section but not in the interface are
    -
    439 # included in the documentation. If set to NO only methods in the interface are
    -
    440 # included.
    -
    441 # The default value is: NO.
    -
    442 
    -
    443 EXTRACT_LOCAL_METHODS = NO
    -
    444 
    -
    445 # If this flag is set to YES, the members of anonymous namespaces will be
    -
    446 # extracted and appear in the documentation as a namespace called
    -
    447 # 'anonymous_namespace{file}', where file will be replaced with the base name of
    -
    448 # the file that contains the anonymous namespace. By default anonymous namespace
    -
    449 # are hidden.
    -
    450 # The default value is: NO.
    -
    451 
    -
    452 EXTRACT_ANON_NSPACES = NO
    -
    453 
    -
    454 # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
    -
    455 # undocumented members inside documented classes or files. If set to NO these
    -
    456 # members will be included in the various overviews, but no documentation
    -
    457 # section is generated. This option has no effect if EXTRACT_ALL is enabled.
    -
    458 # The default value is: NO.
    -
    459 
    -
    460 HIDE_UNDOC_MEMBERS = YES
    -
    461 
    -
    462 # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
    -
    463 # undocumented classes that are normally visible in the class hierarchy. If set
    -
    464 # to NO these classes will be included in the various overviews. This option has
    -
    465 # no effect if EXTRACT_ALL is enabled.
    -
    466 # The default value is: NO.
    -
    467 
    -
    468 HIDE_UNDOC_CLASSES = YES
    -
    469 
    -
    470 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
    -
    471 # (class|struct|union) declarations. If set to NO these declarations will be
    -
    472 # included in the documentation.
    -
    473 # The default value is: NO.
    -
    474 
    -
    475 HIDE_FRIEND_COMPOUNDS = YES
    -
    476 
    -
    477 # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
    -
    478 # documentation blocks found inside the body of a function. If set to NO these
    -
    479 # blocks will be appended to the function's detailed documentation block.
    -
    480 # The default value is: NO.
    -
    481 
    -
    482 HIDE_IN_BODY_DOCS = YES
    -
    483 
    -
    484 # The INTERNAL_DOCS tag determines if documentation that is typed after a
    -
    485 # \internal command is included. If the tag is set to NO then the documentation
    -
    486 # will be excluded. Set it to YES to include the internal documentation.
    -
    487 # The default value is: NO.
    -
    488 
    -
    489 INTERNAL_DOCS = NO
    -
    490 
    -
    491 # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
    -
    492 # names in lower-case letters. If set to YES upper-case letters are also
    -
    493 # allowed. This is useful if you have classes or files whose names only differ
    -
    494 # in case and if your file system supports case sensitive file names. Windows
    -
    495 # and Mac users are advised to set this option to NO.
    -
    496 # The default value is: system dependent.
    -
    497 
    -
    498 CASE_SENSE_NAMES = YES
    -
    499 
    -
    500 # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
    -
    501 # their full class and namespace scopes in the documentation. If set to YES the
    -
    502 # scope will be hidden.
    -
    503 # The default value is: NO.
    -
    504 
    -
    505 HIDE_SCOPE_NAMES = YES
    -
    506 
    -
    507 # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
    -
    508 # the files that are included by a file in the documentation of that file.
    -
    509 # The default value is: YES.
    -
    510 
    -
    511 SHOW_INCLUDE_FILES = NO
    -
    512 
    -
    513 # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
    -
    514 # files with double quotes in the documentation rather than with sharp brackets.
    -
    515 # The default value is: NO.
    -
    516 
    -
    517 FORCE_LOCAL_INCLUDES = NO
    -
    518 
    -
    519 # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
    -
    520 # documentation for inline members.
    -
    521 # The default value is: YES.
    -
    522 
    -
    523 INLINE_INFO = NO
    -
    524 
    -
    525 # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
    -
    526 # (detailed) documentation of file and class members alphabetically by member
    -
    527 # name. If set to NO the members will appear in declaration order.
    -
    528 # The default value is: YES.
    -
    529 
    -
    530 SORT_MEMBER_DOCS = YES
    -
    531 
    -
    532 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
    -
    533 # descriptions of file, namespace and class members alphabetically by member
    -
    534 # name. If set to NO the members will appear in declaration order.
    -
    535 # The default value is: NO.
    -
    536 
    -
    537 SORT_BRIEF_DOCS = YES
    -
    538 
    -
    539 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
    -
    540 # (brief and detailed) documentation of class members so that constructors and
    -
    541 # destructors are listed first. If set to NO the constructors will appear in the
    -
    542 # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
    -
    543 # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
    -
    544 # member documentation.
    -
    545 # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
    -
    546 # detailed member documentation.
    -
    547 # The default value is: NO.
    -
    548 
    -
    549 SORT_MEMBERS_CTORS_1ST = NO
    -
    550 
    -
    551 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
    -
    552 # of group names into alphabetical order. If set to NO the group names will
    -
    553 # appear in their defined order.
    -
    554 # The default value is: NO.
    -
    555 
    -
    556 SORT_GROUP_NAMES = NO
    -
    557 
    -
    558 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
    -
    559 # fully-qualified names, including namespaces. If set to NO, the class list will
    -
    560 # be sorted only by class name, not including the namespace part.
    -
    561 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
    -
    562 # Note: This option applies only to the class list, not to the alphabetical
    -
    563 # list.
    -
    564 # The default value is: NO.
    -
    565 
    -
    566 SORT_BY_SCOPE_NAME = YES
    -
    567 
    -
    568 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
    -
    569 # type resolution of all parameters of a function it will reject a match between
    -
    570 # the prototype and the implementation of a member function even if there is
    -
    571 # only one candidate or it is obvious which candidate to choose by doing a
    -
    572 # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
    -
    573 # accept a match between prototype and implementation in such cases.
    -
    574 # The default value is: NO.
    -
    575 
    -
    576 STRICT_PROTO_MATCHING = NO
    -
    577 
    -
    578 # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
    -
    579 # todo list. This list is created by putting \todo commands in the
    -
    580 # documentation.
    -
    581 # The default value is: YES.
    -
    582 
    -
    583 GENERATE_TODOLIST = YES
    -
    584 
    -
    585 # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
    -
    586 # test list. This list is created by putting \test commands in the
    -
    587 # documentation.
    -
    588 # The default value is: YES.
    -
    589 
    -
    590 GENERATE_TESTLIST = YES
    -
    591 
    -
    592 # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
    -
    593 # list. This list is created by putting \bug commands in the documentation.
    -
    594 # The default value is: YES.
    -
    595 
    -
    596 GENERATE_BUGLIST = YES
    -
    597 
    -
    598 # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
    -
    599 # the deprecated list. This list is created by putting \deprecated commands in
    -
    600 # the documentation.
    -
    601 # The default value is: YES.
    -
    602 
    -
    603 GENERATE_DEPRECATEDLIST= YES
    -
    604 
    -
    605 # The ENABLED_SECTIONS tag can be used to enable conditional documentation
    -
    606 # sections, marked by \if <section_label> ... \endif and \cond <section_label>
    -
    607 # ... \endcond blocks.
    -
    608 
    -
    609 ENABLED_SECTIONS =
    -
    610 
    -
    611 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
    -
    612 # initial value of a variable or macro / define can have for it to appear in the
    -
    613 # documentation. If the initializer consists of more lines than specified here
    -
    614 # it will be hidden. Use a value of 0 to hide initializers completely. The
    -
    615 # appearance of the value of individual variables and macros / defines can be
    -
    616 # controlled using \showinitializer or \hideinitializer command in the
    -
    617 # documentation regardless of this setting.
    -
    618 # Minimum value: 0, maximum value: 10000, default value: 30.
    -
    619 
    -
    620 MAX_INITIALIZER_LINES = 30
    -
    621 
    -
    622 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
    -
    623 # the bottom of the documentation of classes and structs. If set to YES the list
    -
    624 # will mention the files that were used to generate the documentation.
    -
    625 # The default value is: YES.
    -
    626 
    -
    627 SHOW_USED_FILES = NO
    -
    628 
    -
    629 # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
    -
    630 # will remove the Files entry from the Quick Index and from the Folder Tree View
    -
    631 # (if specified).
    -
    632 # The default value is: YES.
    -
    633 
    -
    634 SHOW_FILES = YES
    -
    635 
    -
    636 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
    -
    637 # page. This will remove the Namespaces entry from the Quick Index and from the
    -
    638 # Folder Tree View (if specified).
    -
    639 # The default value is: YES.
    -
    640 
    -
    641 SHOW_NAMESPACES = YES
    -
    642 
    -
    643 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
    -
    644 # doxygen should invoke to get the current version for each file (typically from
    -
    645 # the version control system). Doxygen will invoke the program by executing (via
    -
    646 # popen()) the command command input-file, where command is the value of the
    -
    647 # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
    -
    648 # by doxygen. Whatever the program writes to standard output is used as the file
    -
    649 # version. For an example see the documentation.
    -
    650 
    -
    651 FILE_VERSION_FILTER =
    -
    652 
    -
    653 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
    -
    654 # by doxygen. The layout file controls the global structure of the generated
    -
    655 # output files in an output format independent way. To create the layout file
    -
    656 # that represents doxygen's defaults, run doxygen with the -l option. You can
    -
    657 # optionally specify a file name after the option, if omitted DoxygenLayout.xml
    -
    658 # will be used as the name of the layout file.
    -
    659 #
    -
    660 # Note that if you run doxygen from a directory containing a file called
    -
    661 # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
    -
    662 # tag is left empty.
    -
    663 
    -
    664 LAYOUT_FILE =
    -
    665 
    -
    666 # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
    -
    667 # the reference definitions. This must be a list of .bib files. The .bib
    -
    668 # extension is automatically appended if omitted. This requires the bibtex tool
    -
    669 # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
    -
    670 # For LaTeX the style of the bibliography can be controlled using
    -
    671 # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
    -
    672 # search path. Do not use file names with spaces, bibtex cannot handle them. See
    -
    673 # also \cite for info how to create references.
    -
    674 
    -
    675 CITE_BIB_FILES =
    -
    676 
    -
    677 #---------------------------------------------------------------------------
    -
    678 # Configuration options related to warning and progress messages
    -
    679 #---------------------------------------------------------------------------
    -
    680 
    -
    681 # The QUIET tag can be used to turn on/off the messages that are generated to
    -
    682 # standard output by doxygen. If QUIET is set to YES this implies that the
    -
    683 # messages are off.
    -
    684 # The default value is: NO.
    -
    685 
    -
    686 QUIET = NO
    -
    687 
    -
    688 # The WARNINGS tag can be used to turn on/off the warning messages that are
    -
    689 # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
    -
    690 # this implies that the warnings are on.
    -
    691 #
    -
    692 # Tip: Turn warnings on while writing the documentation.
    -
    693 # The default value is: YES.
    -
    694 
    -
    695 WARNINGS = YES
    -
    696 
    -
    697 # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
    -
    698 # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
    -
    699 # will automatically be disabled.
    -
    700 # The default value is: YES.
    -
    701 
    -
    702 WARN_IF_UNDOCUMENTED = YES
    -
    703 
    -
    704 # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
    -
    705 # potential errors in the documentation, such as not documenting some parameters
    -
    706 # in a documented function, or documenting parameters that don't exist or using
    -
    707 # markup commands wrongly.
    -
    708 # The default value is: YES.
    -
    709 
    -
    710 WARN_IF_DOC_ERROR = YES
    -
    711 
    -
    712 # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
    -
    713 # are documented, but have no documentation for their parameters or return
    -
    714 # value. If set to NO doxygen will only warn about wrong or incomplete parameter
    -
    715 # documentation, but not about the absence of documentation.
    -
    716 # The default value is: NO.
    -
    717 
    -
    718 WARN_NO_PARAMDOC = NO
    -
    719 
    -
    720 # The WARN_FORMAT tag determines the format of the warning messages that doxygen
    -
    721 # can produce. The string should contain the $file, $line, and $text tags, which
    -
    722 # will be replaced by the file and line number from which the warning originated
    -
    723 # and the warning text. Optionally the format may contain $version, which will
    -
    724 # be replaced by the version of the file (if it could be obtained via
    -
    725 # FILE_VERSION_FILTER)
    -
    726 # The default value is: $file:$line: $text.
    -
    727 
    -
    728 WARN_FORMAT = "$file:$line: $text"
    -
    729 
    -
    730 # The WARN_LOGFILE tag can be used to specify a file to which warning and error
    -
    731 # messages should be written. If left blank the output is written to standard
    -
    732 # error (stderr).
    -
    733 
    -
    734 WARN_LOGFILE =
    -
    735 
    -
    736 #---------------------------------------------------------------------------
    -
    737 # Configuration options related to the input files
    -
    738 #---------------------------------------------------------------------------
    -
    739 
    -
    740 # The INPUT tag is used to specify the files and/or directories that contain
    -
    741 # documented source files. You may enter file names like myfile.cpp or
    -
    742 # directories like /usr/src/myproject. Separate the files or directories with
    -
    743 # spaces.
    -
    744 # Note: If this tag is empty the current directory is searched.
    -
    745 
    -
    746 INPUT = ../glm \
    -
    747  .
    -
    748 
    -
    749 # This tag can be used to specify the character encoding of the source files
    -
    750 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
    -
    751 # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
    -
    752 # documentation (see: http://www.gnu.org/software/libiconv) for the list of
    -
    753 # possible encodings.
    -
    754 # The default value is: UTF-8.
    -
    755 
    -
    756 INPUT_ENCODING = UTF-8
    -
    757 
    -
    758 # If the value of the INPUT tag contains directories, you can use the
    -
    759 # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
    -
    760 # *.h) to filter out the source-files in the directories. If left blank the
    -
    761 # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
    -
    762 # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
    -
    763 # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
    -
    764 # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
    -
    765 # *.qsf, *.as and *.js.
    -
    766 
    -
    767 FILE_PATTERNS = *.hpp \
    -
    768  *.doxy
    -
    769 
    -
    770 # The RECURSIVE tag can be used to specify whether or not subdirectories should
    -
    771 # be searched for input files as well.
    -
    772 # The default value is: NO.
    -
    773 
    -
    774 RECURSIVE = YES
    -
    775 
    -
    776 # The EXCLUDE tag can be used to specify files and/or directories that should be
    -
    777 # excluded from the INPUT source files. This way you can easily exclude a
    -
    778 # subdirectory from a directory tree whose root is specified with the INPUT tag.
    -
    779 #
    -
    780 # Note that relative paths are relative to the directory from which doxygen is
    -
    781 # run.
    -
    782 
    -
    783 EXCLUDE =
    -
    784 
    -
    785 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
    -
    786 # directories that are symbolic links (a Unix file system feature) are excluded
    -
    787 # from the input.
    -
    788 # The default value is: NO.
    -
    789 
    -
    790 EXCLUDE_SYMLINKS = NO
    -
    791 
    -
    792 # If the value of the INPUT tag contains directories, you can use the
    -
    793 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
    -
    794 # certain files from those directories.
    -
    795 #
    -
    796 # Note that the wildcards are matched against the file with absolute path, so to
    -
    797 # exclude all test directories for example use the pattern */test/*
    -
    798 
    -
    799 EXCLUDE_PATTERNS =
    -
    800 
    -
    801 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
    -
    802 # (namespaces, classes, functions, etc.) that should be excluded from the
    -
    803 # output. The symbol name can be a fully qualified name, a word, or if the
    -
    804 # wildcard * is used, a substring. Examples: ANamespace, AClass,
    -
    805 # AClass::ANamespace, ANamespace::*Test
    -
    806 #
    -
    807 # Note that the wildcards are matched against the file with absolute path, so to
    -
    808 # exclude all test directories use the pattern */test/*
    -
    809 
    -
    810 EXCLUDE_SYMBOLS =
    -
    811 
    -
    812 # The EXAMPLE_PATH tag can be used to specify one or more files or directories
    -
    813 # that contain example code fragments that are included (see the \include
    -
    814 # command).
    -
    815 
    -
    816 EXAMPLE_PATH =
    -
    817 
    -
    818 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
    -
    819 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
    -
    820 # *.h) to filter out the source-files in the directories. If left blank all
    -
    821 # files are included.
    -
    822 
    -
    823 EXAMPLE_PATTERNS = *
    -
    824 
    -
    825 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
    -
    826 # searched for input files to be used with the \include or \dontinclude commands
    -
    827 # irrespective of the value of the RECURSIVE tag.
    -
    828 # The default value is: NO.
    -
    829 
    -
    830 EXAMPLE_RECURSIVE = NO
    -
    831 
    -
    832 # The IMAGE_PATH tag can be used to specify one or more files or directories
    -
    833 # that contain images that are to be included in the documentation (see the
    -
    834 # \image command).
    -
    835 
    -
    836 IMAGE_PATH =
    -
    837 
    -
    838 # The INPUT_FILTER tag can be used to specify a program that doxygen should
    -
    839 # invoke to filter for each input file. Doxygen will invoke the filter program
    -
    840 # by executing (via popen()) the command:
    -
    841 #
    -
    842 # <filter> <input-file>
    -
    843 #
    -
    844 # where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
    -
    845 # name of an input file. Doxygen will then use the output that the filter
    -
    846 # program writes to standard output. If FILTER_PATTERNS is specified, this tag
    -
    847 # will be ignored.
    -
    848 #
    -
    849 # Note that the filter must not add or remove lines; it is applied before the
    -
    850 # code is scanned, but not when the output code is generated. If lines are added
    -
    851 # or removed, the anchors will not be placed correctly.
    -
    852 
    -
    853 INPUT_FILTER =
    -
    854 
    -
    855 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
    -
    856 # basis. Doxygen will compare the file name with each pattern and apply the
    -
    857 # filter if there is a match. The filters are a list of the form: pattern=filter
    -
    858 # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
    -
    859 # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
    -
    860 # patterns match the file name, INPUT_FILTER is applied.
    -
    861 
    -
    862 FILTER_PATTERNS =
    -
    863 
    -
    864 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
    -
    865 # INPUT_FILTER ) will also be used to filter the input files that are used for
    -
    866 # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
    -
    867 # The default value is: NO.
    -
    868 
    -
    869 FILTER_SOURCE_FILES = NO
    -
    870 
    -
    871 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
    -
    872 # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
    -
    873 # it is also possible to disable source filtering for a specific pattern using
    -
    874 # *.ext= (so without naming a filter).
    -
    875 # This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
    -
    876 
    -
    877 FILTER_SOURCE_PATTERNS =
    -
    878 
    -
    879 # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
    -
    880 # is part of the input, its contents will be placed on the main page
    -
    881 # (index.html). This can be useful if you have a project on for instance GitHub
    -
    882 # and want to reuse the introduction page also for the doxygen output.
    -
    883 
    -
    884 USE_MDFILE_AS_MAINPAGE =
    -
    885 
    -
    886 #---------------------------------------------------------------------------
    -
    887 # Configuration options related to source browsing
    -
    888 #---------------------------------------------------------------------------
    -
    889 
    -
    890 # If the SOURCE_BROWSER tag is set to YES then a list of source files will be
    -
    891 # generated. Documented entities will be cross-referenced with these sources.
    -
    892 #
    -
    893 # Note: To get rid of all source code in the generated output, make sure that
    -
    894 # also VERBATIM_HEADERS is set to NO.
    -
    895 # The default value is: NO.
    -
    896 
    -
    897 SOURCE_BROWSER = YES
    -
    898 
    -
    899 # Setting the INLINE_SOURCES tag to YES will include the body of functions,
    -
    900 # classes and enums directly into the documentation.
    -
    901 # The default value is: NO.
    -
    902 
    -
    903 INLINE_SOURCES = NO
    -
    904 
    -
    905 # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
    -
    906 # special comment blocks from generated source code fragments. Normal C, C++ and
    -
    907 # Fortran comments will always remain visible.
    -
    908 # The default value is: YES.
    -
    909 
    -
    910 STRIP_CODE_COMMENTS = YES
    -
    911 
    -
    912 # If the REFERENCED_BY_RELATION tag is set to YES then for each documented
    -
    913 # function all documented functions referencing it will be listed.
    -
    914 # The default value is: NO.
    -
    915 
    -
    916 REFERENCED_BY_RELATION = YES
    -
    917 
    -
    918 # If the REFERENCES_RELATION tag is set to YES then for each documented function
    -
    919 # all documented entities called/used by that function will be listed.
    -
    920 # The default value is: NO.
    -
    921 
    -
    922 REFERENCES_RELATION = YES
    -
    923 
    -
    924 # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
    -
    925 # to YES, then the hyperlinks from functions in REFERENCES_RELATION and
    -
    926 # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
    -
    927 # link to the documentation.
    -
    928 # The default value is: YES.
    -
    929 
    -
    930 REFERENCES_LINK_SOURCE = YES
    -
    931 
    -
    932 # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
    -
    933 # source code will show a tooltip with additional information such as prototype,
    -
    934 # brief description and links to the definition and documentation. Since this
    -
    935 # will make the HTML file larger and loading of large files a bit slower, you
    -
    936 # can opt to disable this feature.
    -
    937 # The default value is: YES.
    -
    938 # This tag requires that the tag SOURCE_BROWSER is set to YES.
    -
    939 
    -
    940 SOURCE_TOOLTIPS = YES
    -
    941 
    -
    942 # If the USE_HTAGS tag is set to YES then the references to source code will
    -
    943 # point to the HTML generated by the htags(1) tool instead of doxygen built-in
    -
    944 # source browser. The htags tool is part of GNU's global source tagging system
    -
    945 # (see http://www.gnu.org/software/global/global.html). You will need version
    -
    946 # 4.8.6 or higher.
    -
    947 #
    -
    948 # To use it do the following:
    -
    949 # - Install the latest version of global
    -
    950 # - Enable SOURCE_BROWSER and USE_HTAGS in the config file
    -
    951 # - Make sure the INPUT points to the root of the source tree
    -
    952 # - Run doxygen as normal
    -
    953 #
    -
    954 # Doxygen will invoke htags (and that will in turn invoke gtags), so these
    -
    955 # tools must be available from the command line (i.e. in the search path).
    -
    956 #
    -
    957 # The result: instead of the source browser generated by doxygen, the links to
    -
    958 # source code will now point to the output of htags.
    -
    959 # The default value is: NO.
    -
    960 # This tag requires that the tag SOURCE_BROWSER is set to YES.
    -
    961 
    -
    962 USE_HTAGS = NO
    -
    963 
    -
    964 # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
    -
    965 # verbatim copy of the header file for each class for which an include is
    -
    966 # specified. Set to NO to disable this.
    -
    967 # See also: Section \class.
    -
    968 # The default value is: YES.
    -
    969 
    -
    970 VERBATIM_HEADERS = YES
    -
    971 
    -
    972 # If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
    -
    973 # clang parser (see: http://clang.llvm.org/) for more acurate parsing at the
    -
    974 # cost of reduced performance. This can be particularly helpful with template
    -
    975 # rich C++ code for which doxygen's built-in parser lacks the necessary type
    -
    976 # information.
    -
    977 # Note: The availability of this option depends on whether or not doxygen was
    -
    978 # compiled with the --with-libclang option.
    -
    979 # The default value is: NO.
    -
    980 
    -
    981 CLANG_ASSISTED_PARSING = NO
    -
    982 
    -
    983 # If clang assisted parsing is enabled you can provide the compiler with command
    -
    984 # line options that you would normally use when invoking the compiler. Note that
    -
    985 # the include paths will already be set by doxygen for the files and directories
    -
    986 # specified with INPUT and INCLUDE_PATH.
    -
    987 # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
    -
    988 
    -
    989 CLANG_OPTIONS =
    -
    990 
    -
    991 #---------------------------------------------------------------------------
    -
    992 # Configuration options related to the alphabetical class index
    -
    993 #---------------------------------------------------------------------------
    -
    994 
    -
    995 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
    -
    996 # compounds will be generated. Enable this if the project contains a lot of
    -
    997 # classes, structs, unions or interfaces.
    -
    998 # The default value is: YES.
    -
    999 
    -
    1000 ALPHABETICAL_INDEX = NO
    -
    1001 
    -
    1002 # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
    -
    1003 # which the alphabetical index list will be split.
    -
    1004 # Minimum value: 1, maximum value: 20, default value: 5.
    -
    1005 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
    -
    1006 
    -
    1007 COLS_IN_ALPHA_INDEX = 5
    -
    1008 
    -
    1009 # In case all classes in a project start with a common prefix, all classes will
    -
    1010 # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
    -
    1011 # can be used to specify a prefix (or a list of prefixes) that should be ignored
    -
    1012 # while generating the index headers.
    -
    1013 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
    -
    1014 
    -
    1015 IGNORE_PREFIX =
    -
    1016 
    -
    1017 #---------------------------------------------------------------------------
    -
    1018 # Configuration options related to the HTML output
    -
    1019 #---------------------------------------------------------------------------
    -
    1020 
    -
    1021 # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
    -
    1022 # The default value is: YES.
    -
    1023 
    -
    1024 GENERATE_HTML = YES
    -
    1025 
    -
    1026 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
    -
    1027 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    -
    1028 # it.
    -
    1029 # The default directory is: html.
    -
    1030 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1031 
    -
    1032 HTML_OUTPUT = html
    -
    1033 
    -
    1034 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
    -
    1035 # generated HTML page (for example: .htm, .php, .asp).
    -
    1036 # The default value is: .html.
    -
    1037 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1038 
    -
    1039 HTML_FILE_EXTENSION = .html
    -
    1040 
    -
    1041 # The HTML_HEADER tag can be used to specify a user-defined HTML header file for
    -
    1042 # each generated HTML page. If the tag is left blank doxygen will generate a
    -
    1043 # standard header.
    -
    1044 #
    -
    1045 # To get valid HTML the header file that includes any scripts and style sheets
    -
    1046 # that doxygen needs, which is dependent on the configuration options used (e.g.
    -
    1047 # the setting GENERATE_TREEVIEW). It is highly recommended to start with a
    -
    1048 # default header using
    -
    1049 # doxygen -w html new_header.html new_footer.html new_stylesheet.css
    -
    1050 # YourConfigFile
    -
    1051 # and then modify the file new_header.html. See also section "Doxygen usage"
    -
    1052 # for information on how to generate the default header that doxygen normally
    -
    1053 # uses.
    -
    1054 # Note: The header is subject to change so you typically have to regenerate the
    -
    1055 # default header when upgrading to a newer version of doxygen. For a description
    -
    1056 # of the possible markers and block names see the documentation.
    -
    1057 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1058 
    -
    1059 HTML_HEADER =
    -
    1060 
    -
    1061 # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
    -
    1062 # generated HTML page. If the tag is left blank doxygen will generate a standard
    -
    1063 # footer. See HTML_HEADER for more information on how to generate a default
    -
    1064 # footer and what special commands can be used inside the footer. See also
    -
    1065 # section "Doxygen usage" for information on how to generate the default footer
    -
    1066 # that doxygen normally uses.
    -
    1067 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1068 
    -
    1069 HTML_FOOTER =
    -
    1070 
    -
    1071 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
    -
    1072 # sheet that is used by each HTML page. It can be used to fine-tune the look of
    -
    1073 # the HTML output. If left blank doxygen will generate a default style sheet.
    -
    1074 # See also section "Doxygen usage" for information on how to generate the style
    -
    1075 # sheet that doxygen normally uses.
    -
    1076 # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
    -
    1077 # it is more robust and this tag (HTML_STYLESHEET) will in the future become
    -
    1078 # obsolete.
    -
    1079 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1080 
    -
    1081 HTML_STYLESHEET =
    -
    1082 
    -
    1083 # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
    -
    1084 # defined cascading style sheet that is included after the standard style sheets
    -
    1085 # created by doxygen. Using this option one can overrule certain style aspects.
    -
    1086 # This is preferred over using HTML_STYLESHEET since it does not replace the
    -
    1087 # standard style sheet and is therefor more robust against future updates.
    -
    1088 # Doxygen will copy the style sheet file to the output directory. For an example
    -
    1089 # see the documentation.
    -
    1090 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1091 
    -
    1092 HTML_EXTRA_STYLESHEET =
    -
    1093 
    -
    1094 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
    -
    1095 # other source files which should be copied to the HTML output directory. Note
    -
    1096 # that these files will be copied to the base HTML output directory. Use the
    -
    1097 # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
    -
    1098 # files. In the HTML_STYLESHEET file, use the file name only. Also note that the
    -
    1099 # files will be copied as-is; there are no commands or markers available.
    -
    1100 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1101 
    -
    1102 HTML_EXTRA_FILES =
    -
    1103 
    -
    1104 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
    -
    1105 # will adjust the colors in the stylesheet and background images according to
    -
    1106 # this color. Hue is specified as an angle on a colorwheel, see
    -
    1107 # http://en.wikipedia.org/wiki/Hue for more information. For instance the value
    -
    1108 # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
    -
    1109 # purple, and 360 is red again.
    -
    1110 # Minimum value: 0, maximum value: 359, default value: 220.
    -
    1111 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1112 
    -
    1113 HTML_COLORSTYLE_HUE = 220
    -
    1114 
    -
    1115 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
    -
    1116 # in the HTML output. For a value of 0 the output will use grayscales only. A
    -
    1117 # value of 255 will produce the most vivid colors.
    -
    1118 # Minimum value: 0, maximum value: 255, default value: 100.
    -
    1119 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1120 
    -
    1121 HTML_COLORSTYLE_SAT = 100
    -
    1122 
    -
    1123 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
    -
    1124 # luminance component of the colors in the HTML output. Values below 100
    -
    1125 # gradually make the output lighter, whereas values above 100 make the output
    -
    1126 # darker. The value divided by 100 is the actual gamma applied, so 80 represents
    -
    1127 # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
    -
    1128 # change the gamma.
    -
    1129 # Minimum value: 40, maximum value: 240, default value: 80.
    -
    1130 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1131 
    -
    1132 HTML_COLORSTYLE_GAMMA = 80
    -
    1133 
    -
    1134 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
    -
    1135 # page will contain the date and time when the page was generated. Setting this
    -
    1136 # to NO can help when comparing the output of multiple runs.
    -
    1137 # The default value is: YES.
    -
    1138 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1139 
    -
    1140 HTML_TIMESTAMP = NO
    -
    1141 
    -
    1142 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
    -
    1143 # documentation will contain sections that can be hidden and shown after the
    -
    1144 # page has loaded.
    -
    1145 # The default value is: NO.
    -
    1146 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1147 
    -
    1148 HTML_DYNAMIC_SECTIONS = NO
    -
    1149 
    -
    1150 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
    -
    1151 # shown in the various tree structured indices initially; the user can expand
    -
    1152 # and collapse entries dynamically later on. Doxygen will expand the tree to
    -
    1153 # such a level that at most the specified number of entries are visible (unless
    -
    1154 # a fully collapsed tree already exceeds this amount). So setting the number of
    -
    1155 # entries 1 will produce a full collapsed tree by default. 0 is a special value
    -
    1156 # representing an infinite number of entries and will result in a full expanded
    -
    1157 # tree by default.
    -
    1158 # Minimum value: 0, maximum value: 9999, default value: 100.
    -
    1159 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1160 
    -
    1161 HTML_INDEX_NUM_ENTRIES = 100
    -
    1162 
    -
    1163 # If the GENERATE_DOCSET tag is set to YES, additional index files will be
    -
    1164 # generated that can be used as input for Apple's Xcode 3 integrated development
    -
    1165 # environment (see: http://developer.apple.com/tools/xcode/), introduced with
    -
    1166 # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
    -
    1167 # Makefile in the HTML output directory. Running make will produce the docset in
    -
    1168 # that directory and running make install will install the docset in
    -
    1169 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
    -
    1170 # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
    -
    1171 # for more information.
    -
    1172 # The default value is: NO.
    -
    1173 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1174 
    -
    1175 GENERATE_DOCSET = NO
    -
    1176 
    -
    1177 # This tag determines the name of the docset feed. A documentation feed provides
    -
    1178 # an umbrella under which multiple documentation sets from a single provider
    -
    1179 # (such as a company or product suite) can be grouped.
    -
    1180 # The default value is: Doxygen generated docs.
    -
    1181 # This tag requires that the tag GENERATE_DOCSET is set to YES.
    -
    1182 
    -
    1183 DOCSET_FEEDNAME = "Doxygen generated docs"
    -
    1184 
    -
    1185 # This tag specifies a string that should uniquely identify the documentation
    -
    1186 # set bundle. This should be a reverse domain-name style string, e.g.
    -
    1187 # com.mycompany.MyDocSet. Doxygen will append .docset to the name.
    -
    1188 # The default value is: org.doxygen.Project.
    -
    1189 # This tag requires that the tag GENERATE_DOCSET is set to YES.
    -
    1190 
    -
    1191 DOCSET_BUNDLE_ID = org.doxygen.Project
    -
    1192 
    -
    1193 # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
    -
    1194 # the documentation publisher. This should be a reverse domain-name style
    -
    1195 # string, e.g. com.mycompany.MyDocSet.documentation.
    -
    1196 # The default value is: org.doxygen.Publisher.
    -
    1197 # This tag requires that the tag GENERATE_DOCSET is set to YES.
    -
    1198 
    -
    1199 DOCSET_PUBLISHER_ID = org.doxygen.Publisher
    -
    1200 
    -
    1201 # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
    -
    1202 # The default value is: Publisher.
    -
    1203 # This tag requires that the tag GENERATE_DOCSET is set to YES.
    -
    1204 
    -
    1205 DOCSET_PUBLISHER_NAME = Publisher
    -
    1206 
    -
    1207 # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
    -
    1208 # additional HTML index files: index.hhp, index.hhc, and index.hhk. The
    -
    1209 # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
    -
    1210 # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
    -
    1211 # Windows.
    -
    1212 #
    -
    1213 # The HTML Help Workshop contains a compiler that can convert all HTML output
    -
    1214 # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
    -
    1215 # files are now used as the Windows 98 help format, and will replace the old
    -
    1216 # Windows help format (.hlp) on all Windows platforms in the future. Compressed
    -
    1217 # HTML files also contain an index, a table of contents, and you can search for
    -
    1218 # words in the documentation. The HTML workshop also contains a viewer for
    -
    1219 # compressed HTML files.
    -
    1220 # The default value is: NO.
    -
    1221 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1222 
    -
    1223 GENERATE_HTMLHELP = NO
    -
    1224 
    -
    1225 # The CHM_FILE tag can be used to specify the file name of the resulting .chm
    -
    1226 # file. You can add a path in front of the file if the result should not be
    -
    1227 # written to the html output directory.
    -
    1228 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    -
    1229 
    -
    1230 CHM_FILE =
    -
    1231 
    -
    1232 # The HHC_LOCATION tag can be used to specify the location (absolute path
    -
    1233 # including file name) of the HTML help compiler ( hhc.exe). If non-empty
    -
    1234 # doxygen will try to run the HTML help compiler on the generated index.hhp.
    -
    1235 # The file has to be specified with full path.
    -
    1236 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    -
    1237 
    -
    1238 HHC_LOCATION =
    -
    1239 
    -
    1240 # The GENERATE_CHI flag controls if a separate .chi index file is generated (
    -
    1241 # YES) or that it should be included in the master .chm file ( NO).
    -
    1242 # The default value is: NO.
    -
    1243 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    -
    1244 
    -
    1245 GENERATE_CHI = NO
    -
    1246 
    -
    1247 # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
    -
    1248 # and project file content.
    -
    1249 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    -
    1250 
    -
    1251 CHM_INDEX_ENCODING =
    -
    1252 
    -
    1253 # The BINARY_TOC flag controls whether a binary table of contents is generated (
    -
    1254 # YES) or a normal table of contents ( NO) in the .chm file.
    -
    1255 # The default value is: NO.
    -
    1256 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    -
    1257 
    -
    1258 BINARY_TOC = NO
    -
    1259 
    -
    1260 # The TOC_EXPAND flag can be set to YES to add extra items for group members to
    -
    1261 # the table of contents of the HTML help documentation and to the tree view.
    -
    1262 # The default value is: NO.
    -
    1263 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
    -
    1264 
    -
    1265 TOC_EXPAND = NO
    -
    1266 
    -
    1267 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
    -
    1268 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
    -
    1269 # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
    -
    1270 # (.qch) of the generated HTML documentation.
    -
    1271 # The default value is: NO.
    -
    1272 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1273 
    -
    1274 GENERATE_QHP = NO
    -
    1275 
    -
    1276 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
    -
    1277 # the file name of the resulting .qch file. The path specified is relative to
    -
    1278 # the HTML output folder.
    -
    1279 # This tag requires that the tag GENERATE_QHP is set to YES.
    -
    1280 
    -
    1281 QCH_FILE =
    -
    1282 
    -
    1283 # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
    -
    1284 # Project output. For more information please see Qt Help Project / Namespace
    -
    1285 # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
    -
    1286 # The default value is: org.doxygen.Project.
    -
    1287 # This tag requires that the tag GENERATE_QHP is set to YES.
    -
    1288 
    -
    1289 QHP_NAMESPACE = org.doxygen.Project
    -
    1290 
    -
    1291 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
    -
    1292 # Help Project output. For more information please see Qt Help Project / Virtual
    -
    1293 # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
    -
    1294 # folders).
    -
    1295 # The default value is: doc.
    -
    1296 # This tag requires that the tag GENERATE_QHP is set to YES.
    -
    1297 
    -
    1298 QHP_VIRTUAL_FOLDER = doc
    -
    1299 
    -
    1300 # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
    -
    1301 # filter to add. For more information please see Qt Help Project / Custom
    -
    1302 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
    -
    1303 # filters).
    -
    1304 # This tag requires that the tag GENERATE_QHP is set to YES.
    -
    1305 
    -
    1306 QHP_CUST_FILTER_NAME =
    -
    1307 
    -
    1308 # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
    -
    1309 # custom filter to add. For more information please see Qt Help Project / Custom
    -
    1310 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
    -
    1311 # filters).
    -
    1312 # This tag requires that the tag GENERATE_QHP is set to YES.
    -
    1313 
    -
    1314 QHP_CUST_FILTER_ATTRS =
    -
    1315 
    -
    1316 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
    -
    1317 # project's filter section matches. Qt Help Project / Filter Attributes (see:
    -
    1318 # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
    -
    1319 # This tag requires that the tag GENERATE_QHP is set to YES.
    -
    1320 
    -
    1321 QHP_SECT_FILTER_ATTRS =
    -
    1322 
    -
    1323 # The QHG_LOCATION tag can be used to specify the location of Qt's
    -
    1324 # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
    -
    1325 # generated .qhp file.
    -
    1326 # This tag requires that the tag GENERATE_QHP is set to YES.
    -
    1327 
    -
    1328 QHG_LOCATION =
    -
    1329 
    -
    1330 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
    -
    1331 # generated, together with the HTML files, they form an Eclipse help plugin. To
    -
    1332 # install this plugin and make it available under the help contents menu in
    -
    1333 # Eclipse, the contents of the directory containing the HTML and XML files needs
    -
    1334 # to be copied into the plugins directory of eclipse. The name of the directory
    -
    1335 # within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
    -
    1336 # After copying Eclipse needs to be restarted before the help appears.
    -
    1337 # The default value is: NO.
    -
    1338 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1339 
    -
    1340 GENERATE_ECLIPSEHELP = NO
    -
    1341 
    -
    1342 # A unique identifier for the Eclipse help plugin. When installing the plugin
    -
    1343 # the directory name containing the HTML and XML files should also have this
    -
    1344 # name. Each documentation set should have its own identifier.
    -
    1345 # The default value is: org.doxygen.Project.
    -
    1346 # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
    -
    1347 
    -
    1348 ECLIPSE_DOC_ID = org.doxygen.Project
    -
    1349 
    -
    1350 # If you want full control over the layout of the generated HTML pages it might
    -
    1351 # be necessary to disable the index and replace it with your own. The
    -
    1352 # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
    -
    1353 # of each HTML page. A value of NO enables the index and the value YES disables
    -
    1354 # it. Since the tabs in the index contain the same information as the navigation
    -
    1355 # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
    -
    1356 # The default value is: NO.
    -
    1357 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1358 
    -
    1359 DISABLE_INDEX = NO
    -
    1360 
    -
    1361 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
    -
    1362 # structure should be generated to display hierarchical information. If the tag
    -
    1363 # value is set to YES, a side panel will be generated containing a tree-like
    -
    1364 # index structure (just like the one that is generated for HTML Help). For this
    -
    1365 # to work a browser that supports JavaScript, DHTML, CSS and frames is required
    -
    1366 # (i.e. any modern browser). Windows users are probably better off using the
    -
    1367 # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
    -
    1368 # further fine-tune the look of the index. As an example, the default style
    -
    1369 # sheet generated by doxygen has an example that shows how to put an image at
    -
    1370 # the root of the tree instead of the PROJECT_NAME. Since the tree basically has
    -
    1371 # the same information as the tab index, you could consider setting
    -
    1372 # DISABLE_INDEX to YES when enabling this option.
    -
    1373 # The default value is: NO.
    -
    1374 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1375 
    -
    1376 GENERATE_TREEVIEW = NO
    -
    1377 
    -
    1378 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
    -
    1379 # doxygen will group on one line in the generated HTML documentation.
    -
    1380 #
    -
    1381 # Note that a value of 0 will completely suppress the enum values from appearing
    -
    1382 # in the overview section.
    -
    1383 # Minimum value: 0, maximum value: 20, default value: 4.
    -
    1384 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1385 
    -
    1386 ENUM_VALUES_PER_LINE = 4
    -
    1387 
    -
    1388 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
    -
    1389 # to set the initial width (in pixels) of the frame in which the tree is shown.
    -
    1390 # Minimum value: 0, maximum value: 1500, default value: 250.
    -
    1391 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1392 
    -
    1393 TREEVIEW_WIDTH = 250
    -
    1394 
    -
    1395 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
    -
    1396 # external symbols imported via tag files in a separate window.
    -
    1397 # The default value is: NO.
    -
    1398 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1399 
    -
    1400 EXT_LINKS_IN_WINDOW = NO
    -
    1401 
    -
    1402 # Use this tag to change the font size of LaTeX formulas included as images in
    -
    1403 # the HTML documentation. When you change the font size after a successful
    -
    1404 # doxygen run you need to manually remove any form_*.png images from the HTML
    -
    1405 # output directory to force them to be regenerated.
    -
    1406 # Minimum value: 8, maximum value: 50, default value: 10.
    -
    1407 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1408 
    -
    1409 FORMULA_FONTSIZE = 10
    -
    1410 
    -
    1411 # Use the FORMULA_TRANPARENT tag to determine whether or not the images
    -
    1412 # generated for formulas are transparent PNGs. Transparent PNGs are not
    -
    1413 # supported properly for IE 6.0, but are supported on all modern browsers.
    -
    1414 #
    -
    1415 # Note that when changing this option you need to delete any form_*.png files in
    -
    1416 # the HTML output directory before the changes have effect.
    -
    1417 # The default value is: YES.
    -
    1418 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1419 
    -
    1420 FORMULA_TRANSPARENT = YES
    -
    1421 
    -
    1422 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
    -
    1423 # http://www.mathjax.org) which uses client side Javascript for the rendering
    -
    1424 # instead of using prerendered bitmaps. Use this if you do not have LaTeX
    -
    1425 # installed or if you want to formulas look prettier in the HTML output. When
    -
    1426 # enabled you may also need to install MathJax separately and configure the path
    -
    1427 # to it using the MATHJAX_RELPATH option.
    -
    1428 # The default value is: NO.
    -
    1429 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1430 
    -
    1431 USE_MATHJAX = NO
    -
    1432 
    -
    1433 # When MathJax is enabled you can set the default output format to be used for
    -
    1434 # the MathJax output. See the MathJax site (see:
    -
    1435 # http://docs.mathjax.org/en/latest/output.html) for more details.
    -
    1436 # Possible values are: HTML-CSS (which is slower, but has the best
    -
    1437 # compatibility), NativeMML (i.e. MathML) and SVG.
    -
    1438 # The default value is: HTML-CSS.
    -
    1439 # This tag requires that the tag USE_MATHJAX is set to YES.
    -
    1440 
    -
    1441 MATHJAX_FORMAT = HTML-CSS
    -
    1442 
    -
    1443 # When MathJax is enabled you need to specify the location relative to the HTML
    -
    1444 # output directory using the MATHJAX_RELPATH option. The destination directory
    -
    1445 # should contain the MathJax.js script. For instance, if the mathjax directory
    -
    1446 # is located at the same level as the HTML output directory, then
    -
    1447 # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
    -
    1448 # Content Delivery Network so you can quickly see the result without installing
    -
    1449 # MathJax. However, it is strongly recommended to install a local copy of
    -
    1450 # MathJax from http://www.mathjax.org before deployment.
    -
    1451 # The default value is: http://cdn.mathjax.org/mathjax/latest.
    -
    1452 # This tag requires that the tag USE_MATHJAX is set to YES.
    -
    1453 
    -
    1454 MATHJAX_RELPATH = http://www.mathjax.org/mathjax
    -
    1455 
    -
    1456 # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
    -
    1457 # extension names that should be enabled during MathJax rendering. For example
    -
    1458 # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
    -
    1459 # This tag requires that the tag USE_MATHJAX is set to YES.
    -
    1460 
    -
    1461 MATHJAX_EXTENSIONS =
    -
    1462 
    -
    1463 # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
    -
    1464 # of code that will be used on startup of the MathJax code. See the MathJax site
    -
    1465 # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
    -
    1466 # example see the documentation.
    -
    1467 # This tag requires that the tag USE_MATHJAX is set to YES.
    -
    1468 
    -
    1469 MATHJAX_CODEFILE =
    -
    1470 
    -
    1471 # When the SEARCHENGINE tag is enabled doxygen will generate a search box for
    -
    1472 # the HTML output. The underlying search engine uses javascript and DHTML and
    -
    1473 # should work on any modern browser. Note that when using HTML help
    -
    1474 # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
    -
    1475 # there is already a search function so this one should typically be disabled.
    -
    1476 # For large projects the javascript based search engine can be slow, then
    -
    1477 # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
    -
    1478 # search using the keyboard; to jump to the search box use <access key> + S
    -
    1479 # (what the <access key> is depends on the OS and browser, but it is typically
    -
    1480 # <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
    -
    1481 # key> to jump into the search results window, the results can be navigated
    -
    1482 # using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
    -
    1483 # the search. The filter options can be selected when the cursor is inside the
    -
    1484 # search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
    -
    1485 # to select a filter and <Enter> or <escape> to activate or cancel the filter
    -
    1486 # option.
    -
    1487 # The default value is: YES.
    -
    1488 # This tag requires that the tag GENERATE_HTML is set to YES.
    -
    1489 
    -
    1490 SEARCHENGINE = NO
    -
    1491 
    -
    1492 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
    -
    1493 # implemented using a web server instead of a web client using Javascript. There
    -
    1494 # are two flavours of web server based searching depending on the
    -
    1495 # EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
    -
    1496 # searching and an index file used by the script. When EXTERNAL_SEARCH is
    -
    1497 # enabled the indexing and searching needs to be provided by external tools. See
    -
    1498 # the section "External Indexing and Searching" for details.
    -
    1499 # The default value is: NO.
    -
    1500 # This tag requires that the tag SEARCHENGINE is set to YES.
    -
    1501 
    -
    1502 SERVER_BASED_SEARCH = NO
    -
    1503 
    -
    1504 # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
    -
    1505 # script for searching. Instead the search results are written to an XML file
    -
    1506 # which needs to be processed by an external indexer. Doxygen will invoke an
    -
    1507 # external search engine pointed to by the SEARCHENGINE_URL option to obtain the
    -
    1508 # search results.
    -
    1509 #
    -
    1510 # Doxygen ships with an example indexer ( doxyindexer) and search engine
    -
    1511 # (doxysearch.cgi) which are based on the open source search engine library
    -
    1512 # Xapian (see: http://xapian.org/).
    -
    1513 #
    -
    1514 # See the section "External Indexing and Searching" for details.
    -
    1515 # The default value is: NO.
    -
    1516 # This tag requires that the tag SEARCHENGINE is set to YES.
    -
    1517 
    -
    1518 EXTERNAL_SEARCH = NO
    -
    1519 
    -
    1520 # The SEARCHENGINE_URL should point to a search engine hosted by a web server
    -
    1521 # which will return the search results when EXTERNAL_SEARCH is enabled.
    -
    1522 #
    -
    1523 # Doxygen ships with an example indexer ( doxyindexer) and search engine
    -
    1524 # (doxysearch.cgi) which are based on the open source search engine library
    -
    1525 # Xapian (see: http://xapian.org/). See the section "External Indexing and
    -
    1526 # Searching" for details.
    -
    1527 # This tag requires that the tag SEARCHENGINE is set to YES.
    -
    1528 
    -
    1529 SEARCHENGINE_URL =
    -
    1530 
    -
    1531 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
    -
    1532 # search data is written to a file for indexing by an external tool. With the
    -
    1533 # SEARCHDATA_FILE tag the name of this file can be specified.
    -
    1534 # The default file is: searchdata.xml.
    -
    1535 # This tag requires that the tag SEARCHENGINE is set to YES.
    -
    1536 
    -
    1537 SEARCHDATA_FILE = searchdata.xml
    -
    1538 
    -
    1539 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
    -
    1540 # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
    -
    1541 # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
    -
    1542 # projects and redirect the results back to the right project.
    -
    1543 # This tag requires that the tag SEARCHENGINE is set to YES.
    -
    1544 
    -
    1545 EXTERNAL_SEARCH_ID =
    -
    1546 
    -
    1547 # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
    -
    1548 # projects other than the one defined by this configuration file, but that are
    -
    1549 # all added to the same external search index. Each project needs to have a
    -
    1550 # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
    -
    1551 # to a relative location where the documentation can be found. The format is:
    -
    1552 # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
    -
    1553 # This tag requires that the tag SEARCHENGINE is set to YES.
    -
    1554 
    -
    1555 EXTRA_SEARCH_MAPPINGS =
    -
    1556 
    -
    1557 #---------------------------------------------------------------------------
    -
    1558 # Configuration options related to the LaTeX output
    -
    1559 #---------------------------------------------------------------------------
    -
    1560 
    -
    1561 # If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
    -
    1562 # The default value is: YES.
    -
    1563 
    -
    1564 GENERATE_LATEX = NO
    -
    1565 
    -
    1566 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
    -
    1567 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    -
    1568 # it.
    -
    1569 # The default directory is: latex.
    -
    1570 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1571 
    -
    1572 LATEX_OUTPUT = latex
    -
    1573 
    -
    1574 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
    -
    1575 # invoked.
    -
    1576 #
    -
    1577 # Note that when enabling USE_PDFLATEX this option is only used for generating
    -
    1578 # bitmaps for formulas in the HTML output, but not in the Makefile that is
    -
    1579 # written to the output directory.
    -
    1580 # The default file is: latex.
    -
    1581 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1582 
    -
    1583 LATEX_CMD_NAME = latex
    -
    1584 
    -
    1585 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
    -
    1586 # index for LaTeX.
    -
    1587 # The default file is: makeindex.
    -
    1588 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1589 
    -
    1590 MAKEINDEX_CMD_NAME = makeindex
    -
    1591 
    -
    1592 # If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
    -
    1593 # documents. This may be useful for small projects and may help to save some
    -
    1594 # trees in general.
    -
    1595 # The default value is: NO.
    -
    1596 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1597 
    -
    1598 COMPACT_LATEX = NO
    -
    1599 
    -
    1600 # The PAPER_TYPE tag can be used to set the paper type that is used by the
    -
    1601 # printer.
    -
    1602 # Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
    -
    1603 # 14 inches) and executive (7.25 x 10.5 inches).
    -
    1604 # The default value is: a4.
    -
    1605 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1606 
    -
    1607 PAPER_TYPE = a4wide
    -
    1608 
    -
    1609 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
    -
    1610 # that should be included in the LaTeX output. To get the times font for
    -
    1611 # instance you can specify
    -
    1612 # EXTRA_PACKAGES=times
    -
    1613 # If left blank no extra packages will be included.
    -
    1614 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1615 
    -
    1616 EXTRA_PACKAGES =
    -
    1617 
    -
    1618 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
    -
    1619 # generated LaTeX document. The header should contain everything until the first
    -
    1620 # chapter. If it is left blank doxygen will generate a standard header. See
    -
    1621 # section "Doxygen usage" for information on how to let doxygen write the
    -
    1622 # default header to a separate file.
    -
    1623 #
    -
    1624 # Note: Only use a user-defined header if you know what you are doing! The
    -
    1625 # following commands have a special meaning inside the header: $title,
    -
    1626 # $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
    -
    1627 # replace them by respectively the title of the page, the current date and time,
    -
    1628 # only the current date, the version number of doxygen, the project name (see
    -
    1629 # PROJECT_NAME), or the project number (see PROJECT_NUMBER).
    -
    1630 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1631 
    -
    1632 LATEX_HEADER =
    -
    1633 
    -
    1634 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
    -
    1635 # generated LaTeX document. The footer should contain everything after the last
    -
    1636 # chapter. If it is left blank doxygen will generate a standard footer.
    -
    1637 #
    -
    1638 # Note: Only use a user-defined footer if you know what you are doing!
    -
    1639 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1640 
    -
    1641 LATEX_FOOTER =
    -
    1642 
    -
    1643 # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
    -
    1644 # other source files which should be copied to the LATEX_OUTPUT output
    -
    1645 # directory. Note that the files will be copied as-is; there are no commands or
    -
    1646 # markers available.
    -
    1647 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1648 
    -
    1649 LATEX_EXTRA_FILES =
    -
    1650 
    -
    1651 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
    -
    1652 # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
    -
    1653 # contain links (just like the HTML output) instead of page references. This
    -
    1654 # makes the output suitable for online browsing using a PDF viewer.
    -
    1655 # The default value is: YES.
    -
    1656 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1657 
    -
    1658 PDF_HYPERLINKS = NO
    -
    1659 
    -
    1660 # If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
    -
    1661 # the PDF file directly from the LaTeX files. Set this option to YES to get a
    -
    1662 # higher quality PDF documentation.
    -
    1663 # The default value is: YES.
    -
    1664 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1665 
    -
    1666 USE_PDFLATEX = YES
    -
    1667 
    -
    1668 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
    -
    1669 # command to the generated LaTeX files. This will instruct LaTeX to keep running
    -
    1670 # if errors occur, instead of asking the user for help. This option is also used
    -
    1671 # when generating formulas in HTML.
    -
    1672 # The default value is: NO.
    -
    1673 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1674 
    -
    1675 LATEX_BATCHMODE = NO
    -
    1676 
    -
    1677 # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
    -
    1678 # index chapters (such as File Index, Compound Index, etc.) in the output.
    -
    1679 # The default value is: NO.
    -
    1680 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1681 
    -
    1682 LATEX_HIDE_INDICES = NO
    -
    1683 
    -
    1684 # If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
    -
    1685 # code with syntax highlighting in the LaTeX output.
    -
    1686 #
    -
    1687 # Note that which sources are shown also depends on other settings such as
    -
    1688 # SOURCE_BROWSER.
    -
    1689 # The default value is: NO.
    -
    1690 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1691 
    -
    1692 LATEX_SOURCE_CODE = NO
    -
    1693 
    -
    1694 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
    -
    1695 # bibliography, e.g. plainnat, or ieeetr. See
    -
    1696 # http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
    -
    1697 # The default value is: plain.
    -
    1698 # This tag requires that the tag GENERATE_LATEX is set to YES.
    -
    1699 
    -
    1700 LATEX_BIB_STYLE = plain
    -
    1701 
    -
    1702 #---------------------------------------------------------------------------
    -
    1703 # Configuration options related to the RTF output
    -
    1704 #---------------------------------------------------------------------------
    -
    1705 
    -
    1706 # If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
    -
    1707 # RTF output is optimized for Word 97 and may not look too pretty with other RTF
    -
    1708 # readers/editors.
    -
    1709 # The default value is: NO.
    -
    1710 
    -
    1711 GENERATE_RTF = NO
    -
    1712 
    -
    1713 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
    -
    1714 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    -
    1715 # it.
    -
    1716 # The default directory is: rtf.
    -
    1717 # This tag requires that the tag GENERATE_RTF is set to YES.
    -
    1718 
    -
    1719 RTF_OUTPUT = glm.rtf
    -
    1720 
    -
    1721 # If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
    -
    1722 # documents. This may be useful for small projects and may help to save some
    -
    1723 # trees in general.
    -
    1724 # The default value is: NO.
    -
    1725 # This tag requires that the tag GENERATE_RTF is set to YES.
    -
    1726 
    -
    1727 COMPACT_RTF = NO
    -
    1728 
    -
    1729 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
    -
    1730 # contain hyperlink fields. The RTF file will contain links (just like the HTML
    -
    1731 # output) instead of page references. This makes the output suitable for online
    -
    1732 # browsing using Word or some other Word compatible readers that support those
    -
    1733 # fields.
    -
    1734 #
    -
    1735 # Note: WordPad (write) and others do not support links.
    -
    1736 # The default value is: NO.
    -
    1737 # This tag requires that the tag GENERATE_RTF is set to YES.
    -
    1738 
    -
    1739 RTF_HYPERLINKS = YES
    -
    1740 
    -
    1741 # Load stylesheet definitions from file. Syntax is similar to doxygen's config
    -
    1742 # file, i.e. a series of assignments. You only have to provide replacements,
    -
    1743 # missing definitions are set to their default value.
    -
    1744 #
    -
    1745 # See also section "Doxygen usage" for information on how to generate the
    -
    1746 # default style sheet that doxygen normally uses.
    -
    1747 # This tag requires that the tag GENERATE_RTF is set to YES.
    -
    1748 
    -
    1749 RTF_STYLESHEET_FILE =
    -
    1750 
    -
    1751 # Set optional variables used in the generation of an RTF document. Syntax is
    -
    1752 # similar to doxygen's config file. A template extensions file can be generated
    -
    1753 # using doxygen -e rtf extensionFile.
    -
    1754 # This tag requires that the tag GENERATE_RTF is set to YES.
    -
    1755 
    -
    1756 RTF_EXTENSIONS_FILE =
    -
    1757 
    -
    1758 #---------------------------------------------------------------------------
    -
    1759 # Configuration options related to the man page output
    -
    1760 #---------------------------------------------------------------------------
    -
    1761 
    -
    1762 # If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
    -
    1763 # classes and files.
    -
    1764 # The default value is: NO.
    -
    1765 
    -
    1766 GENERATE_MAN = NO
    -
    1767 
    -
    1768 # The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
    -
    1769 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    -
    1770 # it. A directory man3 will be created inside the directory specified by
    -
    1771 # MAN_OUTPUT.
    -
    1772 # The default directory is: man.
    -
    1773 # This tag requires that the tag GENERATE_MAN is set to YES.
    -
    1774 
    -
    1775 MAN_OUTPUT = man
    -
    1776 
    -
    1777 # The MAN_EXTENSION tag determines the extension that is added to the generated
    -
    1778 # man pages. In case the manual section does not start with a number, the number
    -
    1779 # 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
    -
    1780 # optional.
    -
    1781 # The default value is: .3.
    -
    1782 # This tag requires that the tag GENERATE_MAN is set to YES.
    -
    1783 
    -
    1784 MAN_EXTENSION = .3
    -
    1785 
    -
    1786 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
    -
    1787 # will generate one additional man file for each entity documented in the real
    -
    1788 # man page(s). These additional files only source the real man page, but without
    -
    1789 # them the man command would be unable to find the correct page.
    -
    1790 # The default value is: NO.
    -
    1791 # This tag requires that the tag GENERATE_MAN is set to YES.
    -
    1792 
    -
    1793 MAN_LINKS = NO
    -
    1794 
    -
    1795 #---------------------------------------------------------------------------
    -
    1796 # Configuration options related to the XML output
    -
    1797 #---------------------------------------------------------------------------
    -
    1798 
    -
    1799 # If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
    -
    1800 # captures the structure of the code including all documentation.
    -
    1801 # The default value is: NO.
    -
    1802 
    -
    1803 GENERATE_XML = NO
    -
    1804 
    -
    1805 # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
    -
    1806 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
    -
    1807 # it.
    -
    1808 # The default directory is: xml.
    -
    1809 # This tag requires that the tag GENERATE_XML is set to YES.
    -
    1810 
    -
    1811 XML_OUTPUT = xml
    -
    1812 
    -
    1813 # The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a
    -
    1814 # validating XML parser to check the syntax of the XML files.
    -
    1815 # This tag requires that the tag GENERATE_XML is set to YES.
    -
    1816 
    -
    1817 XML_SCHEMA =
    -
    1818 
    -
    1819 # The XML_DTD tag can be used to specify a XML DTD, which can be used by a
    -
    1820 # validating XML parser to check the syntax of the XML files.
    -
    1821 # This tag requires that the tag GENERATE_XML is set to YES.
    -
    1822 
    -
    1823 XML_DTD =
    -
    1824 
    -
    1825 # If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
    -
    1826 # listings (including syntax highlighting and cross-referencing information) to
    -
    1827 # the XML output. Note that enabling this will significantly increase the size
    -
    1828 # of the XML output.
    -
    1829 # The default value is: YES.
    -
    1830 # This tag requires that the tag GENERATE_XML is set to YES.
    -
    1831 
    -
    1832 XML_PROGRAMLISTING = YES
    -
    1833 
    -
    1834 #---------------------------------------------------------------------------
    -
    1835 # Configuration options related to the DOCBOOK output
    -
    1836 #---------------------------------------------------------------------------
    -
    1837 
    -
    1838 # If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
    -
    1839 # that can be used to generate PDF.
    -
    1840 # The default value is: NO.
    -
    1841 
    -
    1842 GENERATE_DOCBOOK = NO
    -
    1843 
    -
    1844 # The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
    -
    1845 # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
    -
    1846 # front of it.
    -
    1847 # The default directory is: docbook.
    -
    1848 # This tag requires that the tag GENERATE_DOCBOOK is set to YES.
    -
    1849 
    -
    1850 DOCBOOK_OUTPUT = docbook
    -
    1851 
    -
    1852 #---------------------------------------------------------------------------
    -
    1853 # Configuration options for the AutoGen Definitions output
    -
    1854 #---------------------------------------------------------------------------
    -
    1855 
    -
    1856 # If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
    -
    1857 # Definitions (see http://autogen.sf.net) file that captures the structure of
    -
    1858 # the code including all documentation. Note that this feature is still
    -
    1859 # experimental and incomplete at the moment.
    -
    1860 # The default value is: NO.
    -
    1861 
    -
    1862 GENERATE_AUTOGEN_DEF = NO
    -
    1863 
    -
    1864 #---------------------------------------------------------------------------
    -
    1865 # Configuration options related to the Perl module output
    -
    1866 #---------------------------------------------------------------------------
    -
    1867 
    -
    1868 # If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
    -
    1869 # file that captures the structure of the code including all documentation.
    -
    1870 #
    -
    1871 # Note that this feature is still experimental and incomplete at the moment.
    -
    1872 # The default value is: NO.
    -
    1873 
    -
    1874 GENERATE_PERLMOD = NO
    -
    1875 
    -
    1876 # If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
    -
    1877 # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
    -
    1878 # output from the Perl module output.
    -
    1879 # The default value is: NO.
    -
    1880 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
    -
    1881 
    -
    1882 PERLMOD_LATEX = NO
    -
    1883 
    -
    1884 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
    -
    1885 # formatted so it can be parsed by a human reader. This is useful if you want to
    -
    1886 # understand what is going on. On the other hand, if this tag is set to NO the
    -
    1887 # size of the Perl module output will be much smaller and Perl will parse it
    -
    1888 # just the same.
    -
    1889 # The default value is: YES.
    -
    1890 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
    -
    1891 
    -
    1892 PERLMOD_PRETTY = YES
    -
    1893 
    -
    1894 # The names of the make variables in the generated doxyrules.make file are
    -
    1895 # prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
    -
    1896 # so different doxyrules.make files included by the same Makefile don't
    -
    1897 # overwrite each other's variables.
    -
    1898 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
    -
    1899 
    -
    1900 PERLMOD_MAKEVAR_PREFIX =
    -
    1901 
    -
    1902 #---------------------------------------------------------------------------
    -
    1903 # Configuration options related to the preprocessor
    -
    1904 #---------------------------------------------------------------------------
    -
    1905 
    -
    1906 # If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
    -
    1907 # C-preprocessor directives found in the sources and include files.
    -
    1908 # The default value is: YES.
    -
    1909 
    -
    1910 ENABLE_PREPROCESSING = YES
    -
    1911 
    -
    1912 # If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
    -
    1913 # in the source code. If set to NO only conditional compilation will be
    -
    1914 # performed. Macro expansion can be done in a controlled way by setting
    -
    1915 # EXPAND_ONLY_PREDEF to YES.
    -
    1916 # The default value is: NO.
    -
    1917 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    -
    1918 
    -
    1919 MACRO_EXPANSION = NO
    -
    1920 
    -
    1921 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
    -
    1922 # the macro expansion is limited to the macros specified with the PREDEFINED and
    -
    1923 # EXPAND_AS_DEFINED tags.
    -
    1924 # The default value is: NO.
    -
    1925 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    -
    1926 
    -
    1927 EXPAND_ONLY_PREDEF = NO
    -
    1928 
    -
    1929 # If the SEARCH_INCLUDES tag is set to YES the includes files in the
    -
    1930 # INCLUDE_PATH will be searched if a #include is found.
    -
    1931 # The default value is: YES.
    -
    1932 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    -
    1933 
    -
    1934 SEARCH_INCLUDES = YES
    -
    1935 
    -
    1936 # The INCLUDE_PATH tag can be used to specify one or more directories that
    -
    1937 # contain include files that are not input files but should be processed by the
    -
    1938 # preprocessor.
    -
    1939 # This tag requires that the tag SEARCH_INCLUDES is set to YES.
    -
    1940 
    -
    1941 INCLUDE_PATH =
    -
    1942 
    -
    1943 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
    -
    1944 # patterns (like *.h and *.hpp) to filter out the header-files in the
    -
    1945 # directories. If left blank, the patterns specified with FILE_PATTERNS will be
    -
    1946 # used.
    -
    1947 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    -
    1948 
    -
    1949 INCLUDE_FILE_PATTERNS =
    -
    1950 
    -
    1951 # The PREDEFINED tag can be used to specify one or more macro names that are
    -
    1952 # defined before the preprocessor is started (similar to the -D option of e.g.
    -
    1953 # gcc). The argument of the tag is a list of macros of the form: name or
    -
    1954 # name=definition (no spaces). If the definition and the "=" are omitted, "=1"
    -
    1955 # is assumed. To prevent a macro definition from being undefined via #undef or
    -
    1956 # recursively expanded use the := operator instead of the = operator.
    -
    1957 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    -
    1958 
    -
    1959 PREDEFINED =
    -
    1960 
    -
    1961 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
    -
    1962 # tag can be used to specify a list of macro names that should be expanded. The
    -
    1963 # macro definition that is found in the sources will be used. Use the PREDEFINED
    -
    1964 # tag if you want to use a different macro definition that overrules the
    -
    1965 # definition found in the source code.
    -
    1966 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    -
    1967 
    -
    1968 EXPAND_AS_DEFINED =
    -
    1969 
    -
    1970 # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
    -
    1971 # remove all refrences to function-like macros that are alone on a line, have an
    -
    1972 # all uppercase name, and do not end with a semicolon. Such function macros are
    -
    1973 # typically used for boiler-plate code, and will confuse the parser if not
    -
    1974 # removed.
    -
    1975 # The default value is: YES.
    -
    1976 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
    -
    1977 
    -
    1978 SKIP_FUNCTION_MACROS = YES
    -
    1979 
    -
    1980 #---------------------------------------------------------------------------
    -
    1981 # Configuration options related to external references
    -
    1982 #---------------------------------------------------------------------------
    -
    1983 
    -
    1984 # The TAGFILES tag can be used to specify one or more tag files. For each tag
    -
    1985 # file the location of the external documentation should be added. The format of
    -
    1986 # a tag file without this location is as follows:
    -
    1987 # TAGFILES = file1 file2 ...
    -
    1988 # Adding location for the tag files is done as follows:
    -
    1989 # TAGFILES = file1=loc1 "file2 = loc2" ...
    -
    1990 # where loc1 and loc2 can be relative or absolute paths or URLs. See the
    -
    1991 # section "Linking to external documentation" for more information about the use
    -
    1992 # of tag files.
    -
    1993 # Note: Each tag file must have an unique name (where the name does NOT include
    -
    1994 # the path). If a tag file is not located in the directory in which doxygen is
    -
    1995 # run, you must also specify the path to the tagfile here.
    -
    1996 
    -
    1997 TAGFILES =
    -
    1998 
    -
    1999 # When a file name is specified after GENERATE_TAGFILE, doxygen will create a
    -
    2000 # tag file that is based on the input files it reads. See section "Linking to
    -
    2001 # external documentation" for more information about the usage of tag files.
    -
    2002 
    -
    2003 GENERATE_TAGFILE =
    -
    2004 
    -
    2005 # If the ALLEXTERNALS tag is set to YES all external class will be listed in the
    -
    2006 # class index. If set to NO only the inherited external classes will be listed.
    -
    2007 # The default value is: NO.
    -
    2008 
    -
    2009 ALLEXTERNALS = NO
    -
    2010 
    -
    2011 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
    -
    2012 # the modules index. If set to NO, only the current project's groups will be
    -
    2013 # listed.
    -
    2014 # The default value is: YES.
    -
    2015 
    -
    2016 EXTERNAL_GROUPS = YES
    -
    2017 
    -
    2018 # If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
    -
    2019 # the related pages index. If set to NO, only the current project's pages will
    -
    2020 # be listed.
    -
    2021 # The default value is: YES.
    -
    2022 
    -
    2023 EXTERNAL_PAGES = YES
    -
    2024 
    -
    2025 # The PERL_PATH should be the absolute path and name of the perl script
    -
    2026 # interpreter (i.e. the result of 'which perl').
    -
    2027 # The default file (with absolute path) is: /usr/bin/perl.
    -
    2028 
    -
    2029 PERL_PATH = /usr/bin/perl
    -
    2030 
    -
    2031 #---------------------------------------------------------------------------
    -
    2032 # Configuration options related to the dot tool
    -
    2033 #---------------------------------------------------------------------------
    -
    2034 
    -
    2035 # If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
    -
    2036 # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
    -
    2037 # NO turns the diagrams off. Note that this option also works with HAVE_DOT
    -
    2038 # disabled, but it is recommended to install and use dot, since it yields more
    -
    2039 # powerful graphs.
    -
    2040 # The default value is: YES.
    -
    2041 
    -
    2042 CLASS_DIAGRAMS = YES
    -
    2043 
    -
    2044 # You can define message sequence charts within doxygen comments using the \msc
    -
    2045 # command. Doxygen will then run the mscgen tool (see:
    -
    2046 # http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
    -
    2047 # documentation. The MSCGEN_PATH tag allows you to specify the directory where
    -
    2048 # the mscgen tool resides. If left empty the tool is assumed to be found in the
    -
    2049 # default search path.
    -
    2050 
    -
    2051 MSCGEN_PATH =
    -
    2052 
    -
    2053 # If set to YES, the inheritance and collaboration graphs will hide inheritance
    -
    2054 # and usage relations if the target is undocumented or is not a class.
    -
    2055 # The default value is: YES.
    -
    2056 
    -
    2057 HIDE_UNDOC_RELATIONS = YES
    -
    2058 
    -
    2059 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
    -
    2060 # available from the path. This tool is part of Graphviz (see:
    -
    2061 # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
    -
    2062 # Bell Labs. The other options in this section have no effect if this option is
    -
    2063 # set to NO
    -
    2064 # The default value is: NO.
    -
    2065 
    -
    2066 HAVE_DOT = NO
    -
    2067 
    -
    2068 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
    -
    2069 # to run in parallel. When set to 0 doxygen will base this on the number of
    -
    2070 # processors available in the system. You can set it explicitly to a value
    -
    2071 # larger than 0 to get control over the balance between CPU load and processing
    -
    2072 # speed.
    -
    2073 # Minimum value: 0, maximum value: 32, default value: 0.
    -
    2074 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2075 
    -
    2076 DOT_NUM_THREADS = 0
    -
    2077 
    -
    2078 # When you want a differently looking font n the dot files that doxygen
    -
    2079 # generates you can specify the font name using DOT_FONTNAME. You need to make
    -
    2080 # sure dot is able to find the font, which can be done by putting it in a
    -
    2081 # standard location or by setting the DOTFONTPATH environment variable or by
    -
    2082 # setting DOT_FONTPATH to the directory containing the font.
    -
    2083 # The default value is: Helvetica.
    -
    2084 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2085 
    -
    2086 DOT_FONTNAME = FreeSans
    -
    2087 
    -
    2088 # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
    -
    2089 # dot graphs.
    -
    2090 # Minimum value: 4, maximum value: 24, default value: 10.
    -
    2091 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2092 
    -
    2093 DOT_FONTSIZE = 10
    -
    2094 
    -
    2095 # By default doxygen will tell dot to use the default font as specified with
    -
    2096 # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
    -
    2097 # the path where dot can find it using this tag.
    -
    2098 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2099 
    -
    2100 DOT_FONTPATH =
    -
    2101 
    -
    2102 # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
    -
    2103 # each documented class showing the direct and indirect inheritance relations.
    -
    2104 # Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
    -
    2105 # The default value is: YES.
    -
    2106 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2107 
    -
    2108 CLASS_GRAPH = YES
    -
    2109 
    -
    2110 # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
    -
    2111 # graph for each documented class showing the direct and indirect implementation
    -
    2112 # dependencies (inheritance, containment, and class references variables) of the
    -
    2113 # class with other documented classes.
    -
    2114 # The default value is: YES.
    -
    2115 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2116 
    -
    2117 COLLABORATION_GRAPH = YES
    -
    2118 
    -
    2119 # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
    -
    2120 # groups, showing the direct groups dependencies.
    -
    2121 # The default value is: YES.
    -
    2122 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2123 
    -
    2124 GROUP_GRAPHS = YES
    -
    2125 
    -
    2126 # If the UML_LOOK tag is set to YES doxygen will generate inheritance and
    -
    2127 # collaboration diagrams in a style similar to the OMG's Unified Modeling
    -
    2128 # Language.
    -
    2129 # The default value is: NO.
    -
    2130 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2131 
    -
    2132 UML_LOOK = NO
    -
    2133 
    -
    2134 # If the UML_LOOK tag is enabled, the fields and methods are shown inside the
    -
    2135 # class node. If there are many fields or methods and many nodes the graph may
    -
    2136 # become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
    -
    2137 # number of items for each type to make the size more manageable. Set this to 0
    -
    2138 # for no limit. Note that the threshold may be exceeded by 50% before the limit
    -
    2139 # is enforced. So when you set the threshold to 10, up to 15 fields may appear,
    -
    2140 # but if the number exceeds 15, the total amount of fields shown is limited to
    -
    2141 # 10.
    -
    2142 # Minimum value: 0, maximum value: 100, default value: 10.
    -
    2143 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2144 
    -
    2145 UML_LIMIT_NUM_FIELDS = 10
    -
    2146 
    -
    2147 # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
    -
    2148 # collaboration graphs will show the relations between templates and their
    -
    2149 # instances.
    -
    2150 # The default value is: NO.
    -
    2151 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2152 
    -
    2153 TEMPLATE_RELATIONS = NO
    -
    2154 
    -
    2155 # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
    -
    2156 # YES then doxygen will generate a graph for each documented file showing the
    -
    2157 # direct and indirect include dependencies of the file with other documented
    -
    2158 # files.
    -
    2159 # The default value is: YES.
    -
    2160 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2161 
    -
    2162 INCLUDE_GRAPH = YES
    -
    2163 
    -
    2164 # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
    -
    2165 # set to YES then doxygen will generate a graph for each documented file showing
    -
    2166 # the direct and indirect include dependencies of the file with other documented
    -
    2167 # files.
    -
    2168 # The default value is: YES.
    -
    2169 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2170 
    -
    2171 INCLUDED_BY_GRAPH = YES
    -
    2172 
    -
    2173 # If the CALL_GRAPH tag is set to YES then doxygen will generate a call
    -
    2174 # dependency graph for every global function or class method.
    -
    2175 #
    -
    2176 # Note that enabling this option will significantly increase the time of a run.
    -
    2177 # So in most cases it will be better to enable call graphs for selected
    -
    2178 # functions only using the \callgraph command.
    -
    2179 # The default value is: NO.
    -
    2180 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2181 
    -
    2182 CALL_GRAPH = YES
    -
    2183 
    -
    2184 # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
    -
    2185 # dependency graph for every global function or class method.
    -
    2186 #
    -
    2187 # Note that enabling this option will significantly increase the time of a run.
    -
    2188 # So in most cases it will be better to enable caller graphs for selected
    -
    2189 # functions only using the \callergraph command.
    -
    2190 # The default value is: NO.
    -
    2191 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2192 
    -
    2193 CALLER_GRAPH = YES
    -
    2194 
    -
    2195 # If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
    -
    2196 # hierarchy of all classes instead of a textual one.
    -
    2197 # The default value is: YES.
    -
    2198 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2199 
    -
    2200 GRAPHICAL_HIERARCHY = YES
    -
    2201 
    -
    2202 # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
    -
    2203 # dependencies a directory has on other directories in a graphical way. The
    -
    2204 # dependency relations are determined by the #include relations between the
    -
    2205 # files in the directories.
    -
    2206 # The default value is: YES.
    -
    2207 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2208 
    -
    2209 DIRECTORY_GRAPH = YES
    -
    2210 
    -
    2211 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
    -
    2212 # generated by dot.
    -
    2213 # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
    -
    2214 # to make the SVG files visible in IE 9+ (other browsers do not have this
    -
    2215 # requirement).
    -
    2216 # Possible values are: png, jpg, gif and svg.
    -
    2217 # The default value is: png.
    -
    2218 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2219 
    -
    2220 DOT_IMAGE_FORMAT = png
    -
    2221 
    -
    2222 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
    -
    2223 # enable generation of interactive SVG images that allow zooming and panning.
    -
    2224 #
    -
    2225 # Note that this requires a modern browser other than Internet Explorer. Tested
    -
    2226 # and working are Firefox, Chrome, Safari, and Opera.
    -
    2227 # Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
    -
    2228 # the SVG files visible. Older versions of IE do not have SVG support.
    -
    2229 # The default value is: NO.
    -
    2230 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2231 
    -
    2232 INTERACTIVE_SVG = NO
    -
    2233 
    -
    2234 # The DOT_PATH tag can be used to specify the path where the dot tool can be
    -
    2235 # found. If left blank, it is assumed the dot tool can be found in the path.
    -
    2236 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2237 
    -
    2238 DOT_PATH =
    -
    2239 
    -
    2240 # The DOTFILE_DIRS tag can be used to specify one or more directories that
    -
    2241 # contain dot files that are included in the documentation (see the \dotfile
    -
    2242 # command).
    -
    2243 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2244 
    -
    2245 DOTFILE_DIRS =
    -
    2246 
    -
    2247 # The MSCFILE_DIRS tag can be used to specify one or more directories that
    -
    2248 # contain msc files that are included in the documentation (see the \mscfile
    -
    2249 # command).
    -
    2250 
    -
    2251 MSCFILE_DIRS =
    -
    2252 
    -
    2253 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
    -
    2254 # that will be shown in the graph. If the number of nodes in a graph becomes
    -
    2255 # larger than this value, doxygen will truncate the graph, which is visualized
    -
    2256 # by representing a node as a red box. Note that doxygen if the number of direct
    -
    2257 # children of the root node in a graph is already larger than
    -
    2258 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
    -
    2259 # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
    -
    2260 # Minimum value: 0, maximum value: 10000, default value: 50.
    -
    2261 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2262 
    -
    2263 DOT_GRAPH_MAX_NODES = 50
    -
    2264 
    -
    2265 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
    -
    2266 # generated by dot. A depth value of 3 means that only nodes reachable from the
    -
    2267 # root by following a path via at most 3 edges will be shown. Nodes that lay
    -
    2268 # further from the root node will be omitted. Note that setting this option to 1
    -
    2269 # or 2 may greatly reduce the computation time needed for large code bases. Also
    -
    2270 # note that the size of a graph can be further restricted by
    -
    2271 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
    -
    2272 # Minimum value: 0, maximum value: 1000, default value: 0.
    -
    2273 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2274 
    -
    2275 MAX_DOT_GRAPH_DEPTH = 1000
    -
    2276 
    -
    2277 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
    -
    2278 # background. This is disabled by default, because dot on Windows does not seem
    -
    2279 # to support this out of the box.
    -
    2280 #
    -
    2281 # Warning: Depending on the platform used, enabling this option may lead to
    -
    2282 # badly anti-aliased labels on the edges of a graph (i.e. they become hard to
    -
    2283 # read).
    -
    2284 # The default value is: NO.
    -
    2285 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2286 
    -
    2287 DOT_TRANSPARENT = NO
    -
    2288 
    -
    2289 # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
    -
    2290 # files in one run (i.e. multiple -o and -T options on the command line). This
    -
    2291 # makes dot run faster, but since only newer versions of dot (>1.8.10) support
    -
    2292 # this, this feature is disabled by default.
    -
    2293 # The default value is: NO.
    -
    2294 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2295 
    -
    2296 DOT_MULTI_TARGETS = NO
    -
    2297 
    -
    2298 # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
    -
    2299 # explaining the meaning of the various boxes and arrows in the dot generated
    -
    2300 # graphs.
    -
    2301 # The default value is: YES.
    -
    2302 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2303 
    -
    2304 GENERATE_LEGEND = YES
    -
    2305 
    -
    2306 # If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
    -
    2307 # files that are used to generate the various graphs.
    -
    2308 # The default value is: YES.
    -
    2309 # This tag requires that the tag HAVE_DOT is set to YES.
    -
    2310 
    -
    2311 DOT_CLEANUP = YES
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_mat3x3.hpp"
    +
    32 
    +
    33 namespace glm
    +
    34 {
    +
    40  typedef tmat3x3<float, lowp> lowp_mat3;
    +
    41 
    +
    47  typedef tmat3x3<float, mediump> mediump_mat3;
    +
    48 
    +
    54  typedef tmat3x3<float, highp> highp_mat3;
    +
    55 
    +
    61  typedef tmat3x3<float, lowp> lowp_mat3x3;
    +
    62 
    +
    68  typedef tmat3x3<float, mediump> mediump_mat3x3;
    +
    69 
    +
    75  typedef tmat3x3<float, highp> highp_mat3x3;
    +
    76 
    +
    77 }//namespace glm
    +
    tmat3x3< float, highp > highp_mat3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:200
    +
    tmat3x3< float, lowp > lowp_mat3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:186
    +
    tmat3x3< float, highp > highp_mat3x3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:221
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tmat3x3< float, mediump > mediump_mat3x3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:214
    +
    tmat3x3< float, lowp > lowp_mat3x3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:207
    +
    tmat3x3< float, mediump > mediump_mat3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:193
    diff --git a/doc/api/a00062.html b/doc/api/a00062.html index 4078dce6..e2d0b3cf 100644 --- a/doc/api/a00062.html +++ b/doc/api/a00062.html @@ -3,8 +3,8 @@ - -GLM: mat2x2.hpp File Reference + +0.9.6: mat3x4.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,32 @@
    -
    -
    mat2x2.hpp File Reference
    +
    mat3x4.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    +

    GLM Core

    Date
    2013-12-24 / 2013-12-24
    Author
    Christophe Riccio
    -

    Definition in file mat2x2.hpp.

    +

    Definition in file mat3x4.hpp.

    diff --git a/doc/api/a00062_source.html b/doc/api/a00062_source.html index 98aea962..b943933e 100644 --- a/doc/api/a00062_source.html +++ b/doc/api/a00062_source.html @@ -3,8 +3,8 @@ - -GLM: mat2x2.hpp Source File + +0.9.6: mat3x4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,49 +41,39 @@
    -
    mat2x2.hpp
    +
    mat3x4.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_MAT2X2_INCLUDED
    -
    30 #define GLM_MAT2X2_INCLUDED
    -
    31 
    -
    32 #include "detail/type_mat2x2.hpp"
    -
    33 
    -
    34 namespace glm
    -
    35 {
    -
    41  typedef detail::tmat2x2<float, lowp> lowp_mat2;
    -
    42 
    -
    48  typedef detail::tmat2x2<float, mediump> mediump_mat2;
    -
    49 
    -
    55  typedef detail::tmat2x2<float, highp> highp_mat2;
    -
    56 
    -
    62  typedef detail::tmat2x2<float, lowp> lowp_mat2x2;
    -
    63 
    -
    69  typedef detail::tmat2x2<float, mediump> mediump_mat2x2;
    -
    70 
    -
    76  typedef detail::tmat2x2<float, highp> highp_mat2x2;
    -
    77 
    -
    78 }//namespace glm
    -
    79 
    -
    80 #endif//GLM_MAT2X2_INCLUDED
    -
    detail::tmat2x2< float, highp > highp_mat2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:79
    -
    detail::tmat2x2< float, mediump > mediump_mat2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:72
    -
    detail::tmat2x2< float, lowp > lowp_mat2x2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:86
    -
    detail::tmat2x2< float, lowp > lowp_mat2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:65
    -
    detail::tmat2x2< float, mediump > mediump_mat2x2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:93
    -
    detail::tmat2x2< float, highp > highp_mat2x2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:100
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_mat3x4.hpp"
    +
    32 
    +
    33 namespace glm
    +
    34 {
    +
    40  typedef tmat3x4<float, lowp> lowp_mat3x4;
    +
    41 
    +
    47  typedef tmat3x4<float, mediump> mediump_mat3x4;
    +
    48 
    +
    54  typedef tmat3x4<float, highp> highp_mat3x4;
    +
    55 
    +
    56 }//namespace glm
    +
    tmat3x4< float, lowp > lowp_mat3x4
    3 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:233
    +
    tmat3x4< float, highp > highp_mat3x4
    3 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:247
    +
    tmat3x4< float, mediump > mediump_mat3x4
    3 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:240
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00063.html b/doc/api/a00063.html index f1228929..f5662748 100644 --- a/doc/api/a00063.html +++ b/doc/api/a00063.html @@ -3,8 +3,8 @@ - -GLM: mat2x3.hpp File Reference + +0.9.6: mat4x2.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,32 @@
    -
    -
    mat2x3.hpp File Reference
    +
    mat4x2.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    +

    GLM Core

    Date
    2013-12-24 / 2013-12-24
    Author
    Christophe Riccio
    -

    Definition in file mat2x3.hpp.

    +

    Definition in file mat4x2.hpp.

    diff --git a/doc/api/a00063_source.html b/doc/api/a00063_source.html index e091dace..281c4c0d 100644 --- a/doc/api/a00063_source.html +++ b/doc/api/a00063_source.html @@ -3,8 +3,8 @@ - -GLM: mat2x3.hpp Source File + +0.9.6: mat4x2.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,39 @@
    -
    mat2x3.hpp
    +
    mat4x2.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_MAT2X3_INCLUDED
    -
    30 #define GLM_MAT2X3_INCLUDED
    -
    31 
    -
    32 #include "detail/type_mat2x3.hpp"
    -
    33 
    -
    34 namespace glm
    -
    35 {
    -
    41  typedef detail::tmat2x3<float, lowp> lowp_mat2x3;
    -
    42 
    -
    48  typedef detail::tmat2x3<float, mediump> mediump_mat2x3;
    -
    49 
    -
    55  typedef detail::tmat2x3<float, highp> highp_mat2x3;
    -
    56 
    -
    57 }//namespace glm
    -
    58 
    -
    59 #endif//GLM_MAT2X3_INCLUDED
    -
    detail::tmat2x3< float, mediump > mediump_mat2x3
    2 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:119
    -
    detail::tmat2x3< float, highp > highp_mat2x3
    2 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:126
    -
    detail::tmat2x3< float, lowp > lowp_mat2x3
    2 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:112
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_mat4x2.hpp"
    +
    32 
    +
    33 namespace glm
    +
    34 {
    +
    40  typedef tmat4x2<float, lowp> lowp_mat4x2;
    +
    41 
    +
    47  typedef tmat4x2<float, mediump> mediump_mat4x2;
    +
    48 
    +
    54  typedef tmat4x2<float, highp> highp_mat4x2;
    +
    55 
    +
    56 }//namespace glm
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tmat4x2< float, highp > highp_mat4x2
    4 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:273
    +
    tmat4x2< float, lowp > lowp_mat4x2
    4 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:259
    +
    tmat4x2< float, mediump > mediump_mat4x2
    4 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:266
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00064_source.html b/doc/api/a00064_source.html index 9a1c409f..42e9a34b 100644 --- a/doc/api/a00064_source.html +++ b/doc/api/a00064_source.html @@ -3,8 +3,8 @@ - -GLM: mat2x4.hpp Source File + +0.9.6: mat4x3.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,39 @@
    -
    mat2x4.hpp
    +
    mat4x3.hpp
    -Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_MAT2X4_INCLUDED
    -
    30 #define GLM_MAT2X4_INCLUDED
    -
    31 
    -
    32 #include "detail/type_mat2x4.hpp"
    -
    33 
    -
    34 namespace glm
    -
    35 {
    -
    41  typedef detail::tmat2x4<float, lowp> lowp_mat2x4;
    -
    42 
    -
    48  typedef detail::tmat2x4<float, mediump> mediump_mat2x4;
    -
    49 
    -
    55  typedef detail::tmat2x4<float, highp> highp_mat2x4;
    -
    56 
    -
    57 }//namespace glm
    -
    58 
    -
    59 #endif//GLM_MAT2X4_INCLUDED
    -
    detail::tmat2x4< float, lowp > lowp_mat2x4
    2 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:138
    -
    detail::tmat2x4< float, highp > highp_mat2x4
    2 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:152
    -
    detail::tmat2x4< float, mediump > mediump_mat2x4
    2 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:145
    +
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_mat4x3.hpp"
    +
    32 
    +
    33 namespace glm
    +
    34 {
    +
    40  typedef tmat4x3<float, lowp> lowp_mat4x3;
    +
    41 
    +
    47  typedef tmat4x3<float, mediump> mediump_mat4x3;
    +
    48 
    +
    54  typedef tmat4x3<float, highp> highp_mat4x3;
    +
    55 
    +
    56 }//namespace glm
    +
    tmat4x3< float, mediump > mediump_mat4x3
    4 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:292
    +
    Definition: _noise.hpp:31
    +
    tmat4x3< float, highp > highp_mat4x3
    4 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:299
    +
    tmat4x3< float, lowp > lowp_mat4x3
    4 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:285
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00065.html b/doc/api/a00065.html index 29acf56a..8f7248e2 100644 --- a/doc/api/a00065.html +++ b/doc/api/a00065.html @@ -3,8 +3,8 @@ - -GLM: mat3x2.hpp File Reference + +0.9.6: mat4x4.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,32 @@
    -
    -
    mat3x2.hpp File Reference
    +
    mat4x4.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    +

    GLM Core

    Date
    2013-12-24 / 2013-12-24
    Author
    Christophe Riccio
    -

    Definition in file mat3x2.hpp.

    +

    Definition in file mat4x4.hpp.

    diff --git a/doc/api/a00065_source.html b/doc/api/a00065_source.html index d7d2a5bb..dcacd2fe 100644 --- a/doc/api/a00065_source.html +++ b/doc/api/a00065_source.html @@ -3,8 +3,8 @@ - -GLM: mat3x2.hpp Source File + +0.9.6: mat4x4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,48 @@
    -
    mat3x2.hpp
    +
    mat4x4.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_MAT3X2_INCLUDED
    -
    30 #define GLM_MAT3X2_INCLUDED
    -
    31 
    -
    32 #include "detail/type_mat3x2.hpp"
    -
    33 
    -
    34 namespace glm
    -
    35 {
    -
    41  typedef detail::tmat3x2<float, lowp> lowp_mat3x2;
    -
    42 
    -
    48  typedef detail::tmat3x2<float, mediump> mediump_mat3x2;
    -
    49 
    -
    55  typedef detail::tmat3x2<float, highp> highp_mat3x2;
    -
    56 
    -
    57 }//namespace
    -
    58 
    -
    59 #endif//GLM_MAT3X2_INCLUDED
    -
    detail::tmat3x2< float, lowp > lowp_mat3x2
    3 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:164
    -
    detail::tmat3x2< float, highp > highp_mat3x2
    3 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:178
    -
    detail::tmat3x2< float, mediump > mediump_mat3x2
    3 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:171
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_mat4x4.hpp"
    +
    32 
    +
    33 namespace glm
    +
    34 {
    +
    40  typedef tmat4x4<float, lowp> lowp_mat4;
    +
    41 
    +
    47  typedef tmat4x4<float, mediump> mediump_mat4;
    +
    48 
    +
    54  typedef tmat4x4<float, highp> highp_mat4;
    +
    55 
    +
    61  typedef tmat4x4<float, lowp> lowp_mat4x4;
    +
    62 
    +
    68  typedef tmat4x4<float, mediump> mediump_mat4x4;
    +
    69 
    +
    75  typedef tmat4x4<float, highp> highp_mat4x4;
    +
    76 
    +
    77 }//namespace glm
    +
    tmat4x4< float, highp > highp_mat4x4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:347
    +
    tmat4x4< float, lowp > lowp_mat4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:312
    +
    tmat4x4< float, lowp > lowp_mat4x4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:333
    +
    tmat4x4< float, mediump > mediump_mat4x4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:340
    +
    tmat4x4< float, highp > highp_mat4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:326
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    +
    tmat4x4< float, mediump > mediump_mat4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:319
    diff --git a/doc/api/a00066.html b/doc/api/a00066.html index 52b2f3e4..84cbeb49 100644 --- a/doc/api/a00066.html +++ b/doc/api/a00066.html @@ -3,8 +3,8 @@ - -GLM: mat3x3.hpp File Reference + +0.9.6: matrix.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,32 @@
    -
    -
    mat3x3.hpp File Reference
    +
    matrix.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    +

    GLM Core

    Date
    2013-12-24 / 2013-12-24
    Author
    Christophe Riccio
    -

    Definition in file mat3x3.hpp.

    +

    Definition in file matrix.hpp.

    diff --git a/doc/api/a00066_source.html b/doc/api/a00066_source.html index 9249f981..2bfcb41a 100644 --- a/doc/api/a00066_source.html +++ b/doc/api/a00066_source.html @@ -3,8 +3,8 @@ - -GLM: mat3x3.hpp Source File + +0.9.6: matrix.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,49 +41,25 @@
    -
    mat3x3.hpp
    +
    matrix.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_MAT3X3_INCLUDED
    -
    30 #define GLM_MAT3X3_INCLUDED
    -
    31 
    -
    32 #include "detail/type_mat3x3.hpp"
    -
    33 
    -
    34 namespace glm
    -
    35 {
    -
    41  typedef detail::tmat3x3<float, lowp> lowp_mat3;
    -
    42 
    -
    48  typedef detail::tmat3x3<float, mediump> mediump_mat3;
    -
    49 
    -
    55  typedef detail::tmat3x3<float, highp> highp_mat3;
    -
    56 
    -
    62  typedef detail::tmat3x3<float, lowp> lowp_mat3x3;
    -
    63 
    -
    69  typedef detail::tmat3x3<float, mediump> mediump_mat3x3;
    -
    70 
    -
    76  typedef detail::tmat3x3<float, highp> highp_mat3x3;
    -
    77 
    -
    78 }//namespace glm
    -
    79 
    -
    80 #endif//GLM_MAT3X3_INCLUDED
    -
    detail::tmat3x3< float, mediump > mediump_mat3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:197
    -
    detail::tmat3x3< float, lowp > lowp_mat3x3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:211
    -
    detail::tmat3x3< float, highp > highp_mat3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:204
    -
    detail::tmat3x3< float, lowp > lowp_mat3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:190
    -
    detail::tmat3x3< float, mediump > mediump_mat3x3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:218
    -
    detail::tmat3x3< float, highp > highp_mat3x3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:225
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/func_matrix.hpp"
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00067.html b/doc/api/a00067.html index 0cf3079b..8bc2f3b9 100644 --- a/doc/api/a00067.html +++ b/doc/api/a00067.html @@ -3,8 +3,8 @@ - -GLM: mat3x4.hpp File Reference + +0.9.6: matrix_access.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,51 @@
    -
    mat3x4.hpp File Reference
    +
    matrix_access.hpp File Reference

    Go to the source code of this file.

    - - - + + + + + + + + + + + + +

    -Namespaces

     glm
     

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType::col_type column (genType const &m, length_t index)
     
    template<typename genType >
    GLM_FUNC_DECL genType column (genType const &m, length_t index, typename genType::col_type const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType::row_type row (genType const &m, length_t index)
     
    template<typename genType >
    GLM_FUNC_DECL genType row (genType const &m, length_t index, typename genType::row_type const &x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTC_matrix_access

    +
    Date
    2005-12-27 / 2011-05-16
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    -

    Definition in file mat3x4.hpp.

    +

    Definition in file matrix_access.hpp.

    diff --git a/doc/api/a00067_source.html b/doc/api/a00067_source.html index f6ef93b1..a3cca494 100644 --- a/doc/api/a00067_source.html +++ b/doc/api/a00067_source.html @@ -3,8 +3,8 @@ - -GLM: mat3x4.hpp Source File + +0.9.6: matrix_access.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,61 @@
    -
    mat3x4.hpp
    +
    matrix_access.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_MAT3X4_INCLUDED
    -
    30 #define GLM_MAT3X4_INCLUDED
    -
    31 
    -
    32 #include "detail/type_mat3x4.hpp"
    -
    33 
    -
    34 namespace glm
    -
    35 {
    -
    41  typedef detail::tmat3x4<float, lowp> lowp_mat3x4;
    -
    42 
    -
    48  typedef detail::tmat3x4<float, mediump> mediump_mat3x4;
    -
    49 
    -
    55  typedef detail::tmat3x4<float, highp> highp_mat3x4;
    -
    56 
    -
    57 }//namespace glm
    -
    58 
    -
    59 #endif//GLM_MAT3X4_INCLUDED
    -
    detail::tmat3x4< float, highp > highp_mat3x4
    3 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:251
    -
    detail::tmat3x4< float, lowp > lowp_mat3x4
    3 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:237
    -
    detail::tmat3x4< float, mediump > mediump_mat3x4
    3 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:244
    +
    37 #pragma once
    +
    38 
    +
    39 // Dependency:
    +
    40 #include "../detail/setup.hpp"
    +
    41 
    +
    42 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    43 # pragma message("GLM: GLM_GTC_matrix_access extension included")
    +
    44 #endif
    +
    45 
    +
    46 namespace glm
    +
    47 {
    +
    50 
    +
    53  template <typename genType>
    +
    54  GLM_FUNC_DECL typename genType::row_type row(
    +
    55  genType const & m,
    +
    56  length_t index);
    +
    57 
    +
    60  template <typename genType>
    +
    61  GLM_FUNC_DECL genType row(
    +
    62  genType const & m,
    +
    63  length_t index,
    +
    64  typename genType::row_type const & x);
    +
    65 
    +
    68  template <typename genType>
    +
    69  GLM_FUNC_DECL typename genType::col_type column(
    +
    70  genType const & m,
    +
    71  length_t index);
    +
    72 
    +
    75  template <typename genType>
    +
    76  GLM_FUNC_DECL genType column(
    +
    77  genType const & m,
    +
    78  length_t index,
    +
    79  typename genType::col_type const & x);
    +
    80 
    +
    82 }//namespace glm
    +
    83 
    +
    84 #include "matrix_access.inl"
    +
    GLM_FUNC_DECL genType row(genType const &m, length_t index, typename genType::row_type const &x)
    Set a specific row to a matrix.
    +
    GLM_FUNC_DECL genType column(genType const &m, length_t index, typename genType::col_type const &x)
    Set a specific column to a matrix.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00068.html b/doc/api/a00068.html index bed87518..f06c4a7a 100644 --- a/doc/api/a00068.html +++ b/doc/api/a00068.html @@ -3,8 +3,8 @@ - -GLM: mat4x2.hpp File Reference + +0.9.6: matrix_cross_product.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,47 @@
    -
    mat4x2.hpp File Reference
    +
    matrix_cross_product.hpp File Reference

    Go to the source code of this file.

    - - - + + + + + + +

    -Namespaces

     glm
     

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > matrixCross3 (tvec3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > matrixCross4 (tvec3< T, P > const &x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTX_matrix_cross_product

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_extented_min_max (dependence)
    -

    Definition in file mat4x2.hpp.

    +

    Definition in file matrix_cross_product.hpp.

    diff --git a/doc/api/a00068_source.html b/doc/api/a00068_source.html index d8531a81..5d78cf50 100644 --- a/doc/api/a00068_source.html +++ b/doc/api/a00068_source.html @@ -3,8 +3,8 @@ - -GLM: mat4x2.hpp Source File + +0.9.6: matrix_cross_product.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,47 @@
    -
    mat4x2.hpp
    +
    matrix_cross_product.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_MAT4X2_INCLUDED
    -
    30 #define GLM_MAT4X2_INCLUDED
    -
    31 
    -
    32 #include "detail/type_mat4x2.hpp"
    -
    33 
    -
    34 namespace glm
    -
    35 {
    -
    41  typedef detail::tmat4x2<float, lowp> lowp_mat4x2;
    -
    42 
    -
    48  typedef detail::tmat4x2<float, mediump> mediump_mat4x2;
    -
    49 
    -
    55  typedef detail::tmat4x2<float, highp> highp_mat4x2;
    -
    56 
    -
    57 }//namespace glm
    -
    58 
    -
    59 #endif//GLM_MAT4X2_INCLUDED
    -
    detail::tmat4x2< float, mediump > mediump_mat4x2
    4 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:270
    -
    detail::tmat4x2< float, highp > highp_mat4x2
    4 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:277
    -
    detail::tmat4x2< float, lowp > lowp_mat4x2
    4 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:263
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_matrix_cross_product extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T, precision P>
    +
    56  GLM_FUNC_DECL tmat3x3<T, P> matrixCross3(
    +
    57  tvec3<T, P> const & x);
    +
    58 
    +
    61  template <typename T, precision P>
    +
    62  GLM_FUNC_DECL tmat4x4<T, P> matrixCross4(
    +
    63  tvec3<T, P> const & x);
    +
    64 
    +
    66 }//namespace glm
    +
    67 
    +
    68 #include "matrix_cross_product.inl"
    +
    GLM_FUNC_DECL tmat4x4< T, P > matrixCross4(tvec3< T, P > const &x)
    Build a cross product matrix.
    +
    GLM_FUNC_DECL tmat3x3< T, P > matrixCross3(tvec3< T, P > const &x)
    Build a cross product matrix.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00069.html b/doc/api/a00069.html new file mode 100644 index 00000000..dabb9bee --- /dev/null +++ b/doc/api/a00069.html @@ -0,0 +1,82 @@ + + + + + + +0.9.6: matrix_decompose.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    matrix_decompose.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + +

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL bool decompose (tmat4x4< T, P > const &modelMatrix, tvec3< T, P > &scale, tquat< T, P > &orientation, tvec3< T, P > &translation, tvec3< T, P > &skew, tvec4< T, P > &perspective)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_matrix_decompose

    +
    Date
    2014-08-29 / 2014-08-29
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file matrix_decompose.hpp.

    +
    + + + + diff --git a/doc/api/a00069_source.html b/doc/api/a00069_source.html index 2fea425b..9d035ade 100644 --- a/doc/api/a00069_source.html +++ b/doc/api/a00069_source.html @@ -3,8 +3,8 @@ - -GLM: mat4x3.hpp Source File + +0.9.6: matrix_decompose.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,50 @@
    -
    mat4x3.hpp
    +
    matrix_decompose.hpp
    -
    1 
    -
    29 #ifndef GLM_MAT4X3_INCLUDED
    -
    30 #define GLM_MAT4X3_INCLUDED
    -
    31 
    -
    32 #include "detail/type_mat4x3.hpp"
    -
    33 
    -
    34 namespace glm
    -
    35 {
    -
    41  typedef detail::tmat4x3<float, lowp> lowp_mat4x3;
    -
    42 
    -
    48  typedef detail::tmat4x3<float, mediump> mediump_mat4x3;
    -
    49 
    -
    55  typedef detail::tmat4x3<float, highp> highp_mat4x3;
    -
    56 
    -
    57 }//namespace glm
    -
    58 
    -
    59 #endif//GLM_MAT4X3_INCLUDED
    -
    detail::tmat4x3< float, mediump > mediump_mat4x3
    4 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:296
    -
    detail::tmat4x3< float, highp > highp_mat4x3
    4 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:303
    -
    detail::tmat4x3< float, lowp > lowp_mat4x3
    4 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:289
    +Go to the documentation of this file.
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependencies
    +
    41 #include "../mat4x4.hpp"
    +
    42 #include "../vec3.hpp"
    +
    43 #include "../vec4.hpp"
    +
    44 #include "../gtc/quaternion.hpp"
    +
    45 #include "../gtc/matrix_transform.hpp"
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    48 # pragma message("GLM: GLM_GTX_matrix_decompose extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    +
    52 {
    +
    55 
    +
    58  template <typename T, precision P>
    +
    59  GLM_FUNC_DECL bool decompose(
    +
    60  tmat4x4<T, P> const & modelMatrix,
    +
    61  tvec3<T, P> & scale, tquat<T, P> & orientation, tvec3<T, P> & translation, tvec3<T, P> & skew, tvec4<T, P> & perspective);
    +
    62 
    +
    64 }//namespace glm
    +
    65 
    +
    66 #include "matrix_decompose.inl"
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > perspective(T fovy, T aspect, T near, T far)
    Creates a matrix for a symetric perspective-view frustum.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL bool decompose(tmat4x4< T, P > const &modelMatrix, tvec3< T, P > &scale, tquat< T, P > &orientation, tvec3< T, P > &translation, tvec3< T, P > &skew, tvec4< T, P > &perspective)
    Decomposes a model matrix to translations, rotation and scale components.
    +
    GLM_FUNC_DECL tmat4x4< T, P > scale(tmat4x4< T, P > const &m, tvec3< T, P > const &v)
    Builds a scale 4 * 4 matrix created from 3 scalars.
    +
    GLM_FUNC_DECL tmat4x4< T, P > orientation(tvec3< T, P > const &Normal, tvec3< T, P > const &Up)
    Build a rotation matrix from a normal and a up vector.
    diff --git a/doc/api/a00070.html b/doc/api/a00070.html index 1b3f7cfb..3c0ea641 100644 --- a/doc/api/a00070.html +++ b/doc/api/a00070.html @@ -3,8 +3,8 @@ - -GLM: mat4x4.hpp File Reference + +0.9.6: matrix_integer.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,40 +41,231 @@
    -
    mat4x4.hpp File Reference
    +
    matrix_integer.hpp File Reference

    Go to the source code of this file.

    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Namespaces

     glm
     

    +Typedefs

    typedef tmat2x2< int, highp > highp_imat2
     
    typedef tmat2x2< int, highp > highp_imat2x2
     
    typedef tmat2x3< int, highp > highp_imat2x3
     
    typedef tmat2x4< int, highp > highp_imat2x4
     
    typedef tmat3x3< int, highp > highp_imat3
     
    typedef tmat3x2< int, highp > highp_imat3x2
     
    typedef tmat3x3< int, highp > highp_imat3x3
     
    typedef tmat3x4< int, highp > highp_imat3x4
     
    typedef tmat4x4< int, highp > highp_imat4
     
    typedef tmat4x2< int, highp > highp_imat4x2
     
    typedef tmat4x3< int, highp > highp_imat4x3
     
    typedef tmat4x4< int, highp > highp_imat4x4
     
    typedef tmat2x2< uint, highp > highp_umat2
     
    typedef tmat2x2< uint, highp > highp_umat2x2
     
    typedef tmat2x3< uint, highp > highp_umat2x3
     
    typedef tmat2x4< uint, highp > highp_umat2x4
     
    typedef tmat3x3< uint, highp > highp_umat3
     
    typedef tmat3x2< uint, highp > highp_umat3x2
     
    typedef tmat3x3< uint, highp > highp_umat3x3
     
    typedef tmat3x4< uint, highp > highp_umat3x4
     
    typedef tmat4x4< uint, highp > highp_umat4
     
    typedef tmat4x2< uint, highp > highp_umat4x2
     
    typedef tmat4x3< uint, highp > highp_umat4x3
     
    typedef tmat4x4< uint, highp > highp_umat4x4
     
    typedef mediump_imat2 imat2
     
    typedef mediump_imat2x2 imat2x2
     
    typedef mediump_imat2x3 imat2x3
     
    typedef mediump_imat2x4 imat2x4
     
    typedef mediump_imat3 imat3
     
    typedef mediump_imat3x2 imat3x2
     
    typedef mediump_imat3x3 imat3x3
     
    typedef mediump_imat3x4 imat3x4
     
    typedef mediump_imat4 imat4
     
    typedef mediump_imat4x2 imat4x2
     
    typedef mediump_imat4x3 imat4x3
     
    typedef mediump_imat4x4 imat4x4
     
    typedef tmat2x2< int, lowp > lowp_imat2
     
    typedef tmat2x2< int, lowp > lowp_imat2x2
     
    typedef tmat2x3< int, lowp > lowp_imat2x3
     
    typedef tmat2x4< int, lowp > lowp_imat2x4
     
    typedef tmat3x3< int, lowp > lowp_imat3
     
    typedef tmat3x2< int, lowp > lowp_imat3x2
     
    typedef tmat3x3< int, lowp > lowp_imat3x3
     
    typedef tmat3x4< int, lowp > lowp_imat3x4
     
    typedef tmat4x4< int, lowp > lowp_imat4
     
    typedef tmat4x2< int, lowp > lowp_imat4x2
     
    typedef tmat4x3< int, lowp > lowp_imat4x3
     
    typedef tmat4x4< int, lowp > lowp_imat4x4
     
    typedef tmat2x2< uint, lowp > lowp_umat2
     
    typedef tmat2x2< uint, lowp > lowp_umat2x2
     
    typedef tmat2x3< uint, lowp > lowp_umat2x3
     
    typedef tmat2x4< uint, lowp > lowp_umat2x4
     
    typedef tmat3x3< uint, lowp > lowp_umat3
     
    typedef tmat3x2< uint, lowp > lowp_umat3x2
     
    typedef tmat3x3< uint, lowp > lowp_umat3x3
     
    typedef tmat3x4< uint, lowp > lowp_umat3x4
     
    typedef tmat4x4< uint, lowp > lowp_umat4
     
    typedef tmat4x2< uint, lowp > lowp_umat4x2
     
    typedef tmat4x3< uint, lowp > lowp_umat4x3
     
    typedef tmat4x4< uint, lowp > lowp_umat4x4
     
    typedef tmat2x2< int, mediump > mediump_imat2
     
    typedef tmat2x2< int, mediump > mediump_imat2x2
     
    typedef tmat2x3< int, mediump > mediump_imat2x3
     
    typedef tmat2x4< int, mediump > mediump_imat2x4
     
    typedef tmat3x3< int, mediump > mediump_imat3
     
    typedef tmat3x2< int, mediump > mediump_imat3x2
     
    typedef tmat3x3< int, mediump > mediump_imat3x3
     
    typedef tmat3x4< int, mediump > mediump_imat3x4
     
    typedef tmat4x4< int, mediump > mediump_imat4
     
    typedef tmat4x2< int, mediump > mediump_imat4x2
     
    typedef tmat4x3< int, mediump > mediump_imat4x3
     
    typedef tmat4x4< int, mediump > mediump_imat4x4
     
    typedef tmat2x2< uint, mediump > mediump_umat2
     
    typedef tmat2x2< uint, mediump > mediump_umat2x2
     
    typedef tmat2x3< uint, mediump > mediump_umat2x3
     
    typedef tmat2x4< uint, mediump > mediump_umat2x4
     
    typedef tmat3x3< uint, mediump > mediump_umat3
     
    typedef tmat3x2< uint, mediump > mediump_umat3x2
     
    typedef tmat3x3< uint, mediump > mediump_umat3x3
     
    typedef tmat3x4< uint, mediump > mediump_umat3x4
     
    typedef tmat4x4< uint, mediump > mediump_umat4
     
    typedef tmat4x2< uint, mediump > mediump_umat4x2
     
    typedef tmat4x3< uint, mediump > mediump_umat4x3
     
    typedef tmat4x4< uint, mediump > mediump_umat4x4
     
    typedef mediump_umat2 umat2
     
    typedef mediump_umat2x2 umat2x2
     
    typedef mediump_umat2x3 umat2x3
     
    typedef mediump_umat2x4 umat2x4
     
    typedef mediump_umat3 umat3
     
    typedef mediump_umat3x2 umat3x2
     
    typedef mediump_umat3x3 umat3x3
     
    typedef mediump_umat3x4 umat3x4
     
    typedef mediump_umat4 umat4
     
    typedef mediump_umat4x2 umat4x2
     
    typedef mediump_umat4x3 umat4x3
     
    typedef mediump_umat4x4 umat4x4
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTC_matrix_integer

    +
    Date
    2011-01-20 / 2011-06-05
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    -

    Definition in file mat4x4.hpp.

    +

    Definition in file matrix_integer.hpp.

    diff --git a/doc/api/a00070_source.html b/doc/api/a00070_source.html index a529c20f..5f96884d 100644 --- a/doc/api/a00070_source.html +++ b/doc/api/a00070_source.html @@ -3,8 +3,8 @@ - -GLM: mat4x4.hpp Source File + +0.9.6: matrix_integer.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,49 +41,398 @@
    -
    mat4x4.hpp
    +
    matrix_integer.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_MAT4X4_INCLUDED
    -
    30 #define GLM_MAT4X4_INCLUDED
    -
    31 
    -
    32 #include "detail/type_mat4x4.hpp"
    -
    33 
    -
    34 namespace glm
    -
    35 {
    -
    41  typedef detail::tmat4x4<float, lowp> lowp_mat4;
    -
    42 
    -
    48  typedef detail::tmat4x4<float, mediump> mediump_mat4;
    -
    49 
    -
    55  typedef detail::tmat4x4<float, highp> highp_mat4;
    -
    56 
    -
    62  typedef detail::tmat4x4<float, lowp> lowp_mat4x4;
    -
    63 
    -
    69  typedef detail::tmat4x4<float, mediump> mediump_mat4x4;
    -
    70 
    -
    76  typedef detail::tmat4x4<float, highp> highp_mat4x4;
    -
    77 
    -
    78 }//namespace glm
    -
    79 
    -
    80 #endif//GLM_MAT4X4_INCLUDED
    -
    detail::tmat4x4< float, highp > highp_mat4x4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:351
    -
    detail::tmat4x4< float, lowp > lowp_mat4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:316
    -
    detail::tmat4x4< float, highp > highp_mat4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:330
    -
    detail::tmat4x4< float, mediump > mediump_mat4x4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:344
    -
    detail::tmat4x4< float, mediump > mediump_mat4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:323
    -
    detail::tmat4x4< float, lowp > lowp_mat4x4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:337
    +
    37 #pragma once
    +
    38 
    +
    39 // Dependency:
    +
    40 #include "../mat2x2.hpp"
    +
    41 #include "../mat2x3.hpp"
    +
    42 #include "../mat2x4.hpp"
    +
    43 #include "../mat3x2.hpp"
    +
    44 #include "../mat3x3.hpp"
    +
    45 #include "../mat3x4.hpp"
    +
    46 #include "../mat4x2.hpp"
    +
    47 #include "../mat4x3.hpp"
    +
    48 #include "../mat4x4.hpp"
    +
    49 
    +
    50 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    51 # pragma message("GLM: GLM_GTC_matrix_integer extension included")
    +
    52 #endif
    +
    53 
    +
    54 namespace glm
    +
    55 {
    +
    58 
    +
    61  typedef tmat2x2<int, highp> highp_imat2;
    +
    62 
    +
    65  typedef tmat3x3<int, highp> highp_imat3;
    +
    66 
    +
    69  typedef tmat4x4<int, highp> highp_imat4;
    +
    70 
    +
    73  typedef tmat2x2<int, highp> highp_imat2x2;
    +
    74 
    +
    77  typedef tmat2x3<int, highp> highp_imat2x3;
    +
    78 
    +
    81  typedef tmat2x4<int, highp> highp_imat2x4;
    +
    82 
    +
    85  typedef tmat3x2<int, highp> highp_imat3x2;
    +
    86 
    +
    89  typedef tmat3x3<int, highp> highp_imat3x3;
    +
    90 
    +
    93  typedef tmat3x4<int, highp> highp_imat3x4;
    +
    94 
    +
    97  typedef tmat4x2<int, highp> highp_imat4x2;
    +
    98 
    +
    101  typedef tmat4x3<int, highp> highp_imat4x3;
    +
    102 
    +
    105  typedef tmat4x4<int, highp> highp_imat4x4;
    +
    106 
    +
    107 
    +
    110  typedef tmat2x2<int, mediump> mediump_imat2;
    +
    111 
    +
    114  typedef tmat3x3<int, mediump> mediump_imat3;
    +
    115 
    +
    118  typedef tmat4x4<int, mediump> mediump_imat4;
    +
    119 
    +
    120 
    +
    123  typedef tmat2x2<int, mediump> mediump_imat2x2;
    +
    124 
    +
    127  typedef tmat2x3<int, mediump> mediump_imat2x3;
    +
    128 
    +
    131  typedef tmat2x4<int, mediump> mediump_imat2x4;
    +
    132 
    +
    135  typedef tmat3x2<int, mediump> mediump_imat3x2;
    +
    136 
    +
    139  typedef tmat3x3<int, mediump> mediump_imat3x3;
    +
    140 
    +
    143  typedef tmat3x4<int, mediump> mediump_imat3x4;
    +
    144 
    +
    147  typedef tmat4x2<int, mediump> mediump_imat4x2;
    +
    148 
    +
    151  typedef tmat4x3<int, mediump> mediump_imat4x3;
    +
    152 
    +
    155  typedef tmat4x4<int, mediump> mediump_imat4x4;
    +
    156 
    +
    157 
    +
    160  typedef tmat2x2<int, lowp> lowp_imat2;
    +
    161 
    +
    164  typedef tmat3x3<int, lowp> lowp_imat3;
    +
    165 
    +
    168  typedef tmat4x4<int, lowp> lowp_imat4;
    +
    169 
    +
    170 
    +
    173  typedef tmat2x2<int, lowp> lowp_imat2x2;
    +
    174 
    +
    177  typedef tmat2x3<int, lowp> lowp_imat2x3;
    +
    178 
    +
    181  typedef tmat2x4<int, lowp> lowp_imat2x4;
    +
    182 
    +
    185  typedef tmat3x2<int, lowp> lowp_imat3x2;
    +
    186 
    +
    189  typedef tmat3x3<int, lowp> lowp_imat3x3;
    +
    190 
    +
    193  typedef tmat3x4<int, lowp> lowp_imat3x4;
    +
    194 
    +
    197  typedef tmat4x2<int, lowp> lowp_imat4x2;
    +
    198 
    +
    201  typedef tmat4x3<int, lowp> lowp_imat4x3;
    +
    202 
    +
    205  typedef tmat4x4<int, lowp> lowp_imat4x4;
    +
    206 
    +
    207 
    +
    210  typedef tmat2x2<uint, highp> highp_umat2;
    +
    211 
    +
    214  typedef tmat3x3<uint, highp> highp_umat3;
    +
    215 
    +
    218  typedef tmat4x4<uint, highp> highp_umat4;
    +
    219 
    +
    222  typedef tmat2x2<uint, highp> highp_umat2x2;
    +
    223 
    +
    226  typedef tmat2x3<uint, highp> highp_umat2x3;
    +
    227 
    +
    230  typedef tmat2x4<uint, highp> highp_umat2x4;
    +
    231 
    +
    234  typedef tmat3x2<uint, highp> highp_umat3x2;
    +
    235 
    +
    238  typedef tmat3x3<uint, highp> highp_umat3x3;
    +
    239 
    +
    242  typedef tmat3x4<uint, highp> highp_umat3x4;
    +
    243 
    +
    246  typedef tmat4x2<uint, highp> highp_umat4x2;
    +
    247 
    +
    250  typedef tmat4x3<uint, highp> highp_umat4x3;
    +
    251 
    +
    254  typedef tmat4x4<uint, highp> highp_umat4x4;
    +
    255 
    +
    256 
    +
    259  typedef tmat2x2<uint, mediump> mediump_umat2;
    +
    260 
    +
    263  typedef tmat3x3<uint, mediump> mediump_umat3;
    +
    264 
    +
    267  typedef tmat4x4<uint, mediump> mediump_umat4;
    +
    268 
    +
    269 
    +
    272  typedef tmat2x2<uint, mediump> mediump_umat2x2;
    +
    273 
    +
    276  typedef tmat2x3<uint, mediump> mediump_umat2x3;
    +
    277 
    +
    280  typedef tmat2x4<uint, mediump> mediump_umat2x4;
    +
    281 
    +
    284  typedef tmat3x2<uint, mediump> mediump_umat3x2;
    +
    285 
    +
    288  typedef tmat3x3<uint, mediump> mediump_umat3x3;
    +
    289 
    +
    292  typedef tmat3x4<uint, mediump> mediump_umat3x4;
    +
    293 
    +
    296  typedef tmat4x2<uint, mediump> mediump_umat4x2;
    +
    297 
    +
    300  typedef tmat4x3<uint, mediump> mediump_umat4x3;
    +
    301 
    +
    304  typedef tmat4x4<uint, mediump> mediump_umat4x4;
    +
    305 
    +
    306 
    +
    309  typedef tmat2x2<uint, lowp> lowp_umat2;
    +
    310 
    +
    313  typedef tmat3x3<uint, lowp> lowp_umat3;
    +
    314 
    +
    317  typedef tmat4x4<uint, lowp> lowp_umat4;
    +
    318 
    +
    319 
    +
    322  typedef tmat2x2<uint, lowp> lowp_umat2x2;
    +
    323 
    +
    326  typedef tmat2x3<uint, lowp> lowp_umat2x3;
    +
    327 
    +
    330  typedef tmat2x4<uint, lowp> lowp_umat2x4;
    +
    331 
    +
    334  typedef tmat3x2<uint, lowp> lowp_umat3x2;
    +
    335 
    +
    338  typedef tmat3x3<uint, lowp> lowp_umat3x3;
    +
    339 
    +
    342  typedef tmat3x4<uint, lowp> lowp_umat3x4;
    +
    343 
    +
    346  typedef tmat4x2<uint, lowp> lowp_umat4x2;
    +
    347 
    +
    350  typedef tmat4x3<uint, lowp> lowp_umat4x3;
    +
    351 
    +
    354  typedef tmat4x4<uint, lowp> lowp_umat4x4;
    +
    355 
    +
    356 #if(defined(GLM_PRECISION_HIGHP_INT))
    +
    357  typedef highp_imat2 imat2;
    +
    358  typedef highp_imat3 imat3;
    +
    359  typedef highp_imat4 imat4;
    +
    360  typedef highp_imat2x2 imat2x2;
    +
    361  typedef highp_imat2x3 imat2x3;
    +
    362  typedef highp_imat2x4 imat2x4;
    +
    363  typedef highp_imat3x2 imat3x2;
    +
    364  typedef highp_imat3x3 imat3x3;
    +
    365  typedef highp_imat3x4 imat3x4;
    +
    366  typedef highp_imat4x2 imat4x2;
    +
    367  typedef highp_imat4x3 imat4x3;
    +
    368  typedef highp_imat4x4 imat4x4;
    +
    369 #elif(defined(GLM_PRECISION_LOWP_INT))
    +
    370  typedef lowp_imat2 imat2;
    +
    371  typedef lowp_imat3 imat3;
    +
    372  typedef lowp_imat4 imat4;
    +
    373  typedef lowp_imat2x2 imat2x2;
    +
    374  typedef lowp_imat2x3 imat2x3;
    +
    375  typedef lowp_imat2x4 imat2x4;
    +
    376  typedef lowp_imat3x2 imat3x2;
    +
    377  typedef lowp_imat3x3 imat3x3;
    +
    378  typedef lowp_imat3x4 imat3x4;
    +
    379  typedef lowp_imat4x2 imat4x2;
    +
    380  typedef lowp_imat4x3 imat4x3;
    +
    381  typedef lowp_imat4x4 imat4x4;
    +
    382 #else //if(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    383 
    +
    386  typedef mediump_imat2 imat2;
    +
    387 
    +
    390  typedef mediump_imat3 imat3;
    +
    391 
    +
    394  typedef mediump_imat4 imat4;
    +
    395 
    +
    398  typedef mediump_imat2x2 imat2x2;
    +
    399 
    +
    402  typedef mediump_imat2x3 imat2x3;
    +
    403 
    +
    406  typedef mediump_imat2x4 imat2x4;
    +
    407 
    +
    410  typedef mediump_imat3x2 imat3x2;
    +
    411 
    +
    414  typedef mediump_imat3x3 imat3x3;
    +
    415 
    +
    418  typedef mediump_imat3x4 imat3x4;
    +
    419 
    +
    422  typedef mediump_imat4x2 imat4x2;
    +
    423 
    +
    426  typedef mediump_imat4x3 imat4x3;
    +
    427 
    +
    430  typedef mediump_imat4x4 imat4x4;
    +
    431 #endif//GLM_PRECISION
    +
    432 
    +
    433 #if(defined(GLM_PRECISION_HIGHP_UINT))
    +
    434  typedef highp_umat2 umat2;
    +
    435  typedef highp_umat3 umat3;
    +
    436  typedef highp_umat4 umat4;
    +
    437  typedef highp_umat2x2 umat2x2;
    +
    438  typedef highp_umat2x3 umat2x3;
    +
    439  typedef highp_umat2x4 umat2x4;
    +
    440  typedef highp_umat3x2 umat3x2;
    +
    441  typedef highp_umat3x3 umat3x3;
    +
    442  typedef highp_umat3x4 umat3x4;
    +
    443  typedef highp_umat4x2 umat4x2;
    +
    444  typedef highp_umat4x3 umat4x3;
    +
    445  typedef highp_umat4x4 umat4x4;
    +
    446 #elif(defined(GLM_PRECISION_LOWP_UINT))
    +
    447  typedef lowp_umat2 umat2;
    +
    448  typedef lowp_umat3 umat3;
    +
    449  typedef lowp_umat4 umat4;
    +
    450  typedef lowp_umat2x2 umat2x2;
    +
    451  typedef lowp_umat2x3 umat2x3;
    +
    452  typedef lowp_umat2x4 umat2x4;
    +
    453  typedef lowp_umat3x2 umat3x2;
    +
    454  typedef lowp_umat3x3 umat3x3;
    +
    455  typedef lowp_umat3x4 umat3x4;
    +
    456  typedef lowp_umat4x2 umat4x2;
    +
    457  typedef lowp_umat4x3 umat4x3;
    +
    458  typedef lowp_umat4x4 umat4x4;
    +
    459 #else //if(defined(GLM_PRECISION_MEDIUMP_UINT))
    +
    460 
    +
    463  typedef mediump_umat2 umat2;
    +
    464 
    +
    467  typedef mediump_umat3 umat3;
    +
    468 
    +
    471  typedef mediump_umat4 umat4;
    +
    472 
    +
    475  typedef mediump_umat2x2 umat2x2;
    +
    476 
    +
    479  typedef mediump_umat2x3 umat2x3;
    +
    480 
    +
    483  typedef mediump_umat2x4 umat2x4;
    +
    484 
    +
    487  typedef mediump_umat3x2 umat3x2;
    +
    488 
    +
    491  typedef mediump_umat3x3 umat3x3;
    +
    492 
    +
    495  typedef mediump_umat3x4 umat3x4;
    +
    496 
    +
    499  typedef mediump_umat4x2 umat4x2;
    +
    500 
    +
    503  typedef mediump_umat4x3 umat4x3;
    +
    504 
    +
    507  typedef mediump_umat4x4 umat4x4;
    +
    508 #endif//GLM_PRECISION
    +
    509 
    +
    511 }//namespace glm
    +
    tmat2x2< uint, mediump > mediump_umat2x2
    Medium-precision unsigned integer 2x2 matrix.
    +
    tmat4x3< uint, lowp > lowp_umat4x3
    Low-precision unsigned integer 4x3 matrix.
    +
    mediump_imat4x4 imat4x4
    Signed integer 4x4 matrix.
    +
    tmat2x4< uint, highp > highp_umat2x4
    High-precision unsigned integer 2x4 matrix.
    +
    mediump_umat4x4 umat4x4
    Unsigned integer 4x4 matrix.
    +
    tmat2x3< int, mediump > mediump_imat2x3
    Medium-precision signed integer 2x3 matrix.
    +
    tmat3x3< int, lowp > lowp_imat3x3
    Low-precision signed integer 3x3 matrix.
    +
    mediump_imat2 imat2
    Signed integer 2x2 matrix.
    +
    tmat2x2< int, mediump > mediump_imat2x2
    Medium-precision signed integer 2x2 matrix.
    +
    tmat2x2< uint, lowp > lowp_umat2x2
    Low-precision unsigned integer 2x2 matrix.
    +
    tmat3x3< uint, highp > highp_umat3
    High-precision unsigned integer 3x3 matrix.
    +
    tmat4x4< int, lowp > lowp_imat4x4
    Low-precision signed integer 4x4 matrix.
    +
    mediump_imat2x3 imat2x3
    Signed integer 2x3 matrix.
    +
    tmat4x3< int, mediump > mediump_imat4x3
    Medium-precision signed integer 4x3 matrix.
    +
    mediump_imat4 imat4
    Signed integer 4x4 matrix.
    +
    tmat3x2< uint, highp > highp_umat3x2
    High-precision unsigned integer 3x2 matrix.
    +
    tmat3x2< int, highp > highp_imat3x2
    High-precision signed integer 3x2 matrix.
    +
    tmat2x2< uint, lowp > lowp_umat2
    Low-precision unsigned integer 2x2 matrix.
    +
    tmat4x4< uint, lowp > lowp_umat4
    Low-precision unsigned integer 4x4 matrix.
    +
    tmat3x4< uint, mediump > mediump_umat3x4
    Medium-precision unsigned integer 3x4 matrix.
    +
    tmat2x2< uint, highp > highp_umat2
    High-precision unsigned integer 2x2 matrix.
    +
    tmat3x3< int, lowp > lowp_imat3
    Low-precision signed integer 3x3 matrix.
    +
    tmat4x3< uint, highp > highp_umat4x3
    High-precision unsigned integer 4x3 matrix.
    +
    mediump_imat3x3 imat3x3
    Signed integer 3x3 matrix.
    +
    tmat3x2< int, mediump > mediump_imat3x2
    Medium-precision signed integer 3x2 matrix.
    +
    mediump_umat3 umat3
    Unsigned integer 3x3 matrix.
    +
    tmat2x2< int, highp > highp_imat2
    High-precision signed integer 2x2 matrix.
    +
    tmat3x4< int, mediump > mediump_imat3x4
    Medium-precision signed integer 3x4 matrix.
    +
    tmat2x3< uint, highp > highp_umat2x3
    High-precision unsigned integer 2x3 matrix.
    +
    mediump_umat3x3 umat3x3
    Unsigned integer 3x3 matrix.
    +
    tmat4x3< int, highp > highp_imat4x3
    High-precision signed integer 4x3 matrix.
    +
    tmat4x2< int, lowp > lowp_imat4x2
    Low-precision signed integer 4x2 matrix.
    +
    tmat4x4< int, lowp > lowp_imat4
    Low-precision signed integer 4x4 matrix.
    +
    tmat2x3< uint, mediump > mediump_umat2x3
    Medium-precision unsigned integer 2x3 matrix.
    +
    tmat4x2< uint, mediump > mediump_umat4x2
    Medium-precision unsigned integer 4x2 matrix.
    +
    tmat2x2< int, lowp > lowp_imat2
    Low-precision signed integer 2x2 matrix.
    +
    tmat4x3< int, lowp > lowp_imat4x3
    Low-precision signed integer 4x3 matrix.
    +
    mediump_umat2 umat2
    Unsigned integer 2x2 matrix.
    +
    tmat3x3< int, highp > highp_imat3x3
    High-precision signed integer 3x3 matrix.
    +
    mediump_imat4x2 imat4x2
    Signed integer 4x2 matrix.
    +
    tmat4x4< uint, highp > highp_umat4
    High-precision unsigned integer 4x4 matrix.
    +
    tmat4x4< uint, highp > highp_umat4x4
    High-precision unsigned integer 4x4 matrix.
    +
    tmat3x2< uint, lowp > lowp_umat3x2
    Low-precision unsigned integer 3x2 matrix.
    +
    tmat4x3< uint, mediump > mediump_umat4x3
    Medium-precision unsigned integer 4x3 matrix.
    +
    mediump_imat3 imat3
    Signed integer 3x3 matrix.
    +
    mediump_umat2x4 umat2x4
    Unsigned integer 2x4 matrix.
    +
    tmat4x4< uint, lowp > lowp_umat4x4
    Low-precision unsigned integer 4x4 matrix.
    +
    tmat3x3< uint, lowp > lowp_umat3x3
    Low-precision unsigned integer 3x3 matrix.
    +
    tmat3x3< uint, mediump > mediump_umat3
    Medium-precision unsigned integer 3x3 matrix.
    +
    tmat2x4< uint, mediump > mediump_umat2x4
    Medium-precision unsigned integer 2x4 matrix.
    +
    tmat4x4< uint, mediump > mediump_umat4x4
    Medium-precision unsigned integer 4x4 matrix.
    +
    tmat3x2< int, lowp > lowp_imat3x2
    Low-precision signed integer 3x2 matrix.
    +
    mediump_imat2x4 imat2x4
    Signed integer 2x4 matrix.
    +
    tmat4x4< int, highp > highp_imat4x4
    High-precision signed integer 4x4 matrix.
    +
    tmat3x3< uint, highp > highp_umat3x3
    High-precision unsigned integer 3x3 matrix.
    +
    tmat2x3< int, highp > highp_imat2x3
    High-precision signed integer 2x3 matrix.
    +
    Definition: _noise.hpp:31
    +
    tmat2x4< int, mediump > mediump_imat2x4
    Medium-precision signed integer 2x4 matrix.
    +
    tmat2x2< int, highp > highp_imat2x2
    High-precision signed integer 2x2 matrix.
    +
    tmat3x3< int, highp > highp_imat3
    High-precision signed integer 3x3 matrix.
    +
    mediump_imat4x3 imat4x3
    Signed integer 4x3 matrix.
    +
    tmat3x3< uint, mediump > mediump_umat3x3
    Medium-precision unsigned integer 3x3 matrix.
    +
    mediump_umat4x3 umat4x3
    Unsigned integer 4x3 matrix.
    +
    tmat2x3< int, lowp > lowp_imat2x3
    Low-precision signed integer 2x3 matrix.
    +
    tmat4x2< uint, lowp > lowp_umat4x2
    Low-precision unsigned integer 4x2 matrix.
    +
    mediump_umat3x2 umat3x2
    Unsigned integer 3x2 matrix.
    +
    tmat2x4< int, highp > highp_imat2x4
    High-precision signed integer 2x4 matrix.
    +
    tmat4x4< int, mediump > mediump_imat4
    Medium-precision signed integer 4x4 matrix.
    +
    tmat4x4< int, highp > highp_imat4
    High-precision signed integer 4x4 matrix.
    +
    mediump_umat4x2 umat4x2
    Unsigned integer 4x2 matrix.
    +
    mediump_imat2x2 imat2x2
    Signed integer 2x2 matrix.
    +
    mediump_imat3x2 imat3x2
    Signed integer 3x2 matrix.
    +
    tmat3x4< int, lowp > lowp_imat3x4
    Low-precision signed integer 3x4 matrix.
    +
    tmat4x2< int, highp > highp_imat4x2
    High-precision signed integer 4x2 matrix.
    +
    mediump_imat3x4 imat3x4
    Signed integer 3x4 matrix.
    +
    tmat2x2< uint, mediump > mediump_umat2
    Medium-precision unsigned integer 2x2 matrix.
    +
    mediump_umat2x2 umat2x2
    Unsigned integer 2x2 matrix.
    +
    tmat2x2< int, lowp > lowp_imat2x2
    Low-precision signed integer 2x2 matrix.
    +
    tmat3x4< int, highp > highp_imat3x4
    High-precision signed integer 3x4 matrix.
    +
    mediump_umat4 umat4
    Unsigned integer 4x4 matrix.
    +
    tmat4x4< int, mediump > mediump_imat4x4
    Medium-precision signed integer 4x4 matrix.
    +
    tmat3x3< int, mediump > mediump_imat3
    Medium-precision signed integer 3x3 matrix.
    +
    mediump_umat3x4 umat3x4
    Unsigned integer 3x4 matrix.
    +
    tmat3x2< uint, mediump > mediump_umat3x2
    Medium-precision unsigned integer 3x2 matrix.
    +
    tmat2x2< uint, highp > highp_umat2x2
    High-precision unsigned integer 2x2 matrix.
    +
    mediump_umat2x3 umat2x3
    Unsigned integer 2x3 matrix.
    +
    tmat3x4< uint, highp > highp_umat3x4
    High-precision unsigned integer 3x4 matrix.
    +
    tmat2x3< uint, lowp > lowp_umat2x3
    Low-precision unsigned integer 2x3 matrix.
    +
    tmat2x4< uint, lowp > lowp_umat2x4
    Low-precision unsigned integer 2x4 matrix.
    +
    tmat4x4< uint, mediump > mediump_umat4
    Medium-precision unsigned integer 4x4 matrix.
    +
    tmat2x4< int, lowp > lowp_imat2x4
    Low-precision signed integer 2x4 matrix.
    +
    tmat2x2< int, mediump > mediump_imat2
    Medium-precision signed integer 2x2 matrix.
    +
    tmat3x3< int, mediump > mediump_imat3x3
    Medium-precision signed integer 3x3 matrix.
    +
    tmat3x3< uint, lowp > lowp_umat3
    Low-precision unsigned integer 3x3 matrix.
    +
    tmat4x2< uint, highp > highp_umat4x2
    High-precision unsigned integer 4x2 matrix.
    +
    tmat4x2< int, mediump > mediump_imat4x2
    Medium-precision signed integer 4x2 matrix.
    +
    tmat3x4< uint, lowp > lowp_umat3x4
    Low-precision unsigned integer 3x4 matrix.
    diff --git a/doc/api/a00071.html b/doc/api/a00071.html index 1ae73438..bb4c4d9c 100644 --- a/doc/api/a00071.html +++ b/doc/api/a00071.html @@ -3,8 +3,8 @@ - -GLM: matrix.hpp File Reference + +0.9.6: matrix_interpolation.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,32 +41,51 @@
    +
    -
    matrix.hpp File Reference
    +
    matrix_interpolation.hpp File Reference

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL void axisAngle (tmat4x4< T, P > const &mat, tvec3< T, P > &axis, T &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > axisAngleMatrix (tvec3< T, P > const &axis, T const angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > extractMatrixRotation (tmat4x4< T, P > const &mat)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > interpolate (tmat4x4< T, P > const &m1, tmat4x4< T, P > const &m2, T const delta)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTX_matrix_interpolation

    +
    Date
    2011-03-05 / 2011-06-07
    +
    Author
    Ghenadii Ursachi (the.a.nosp@m.ster.nosp@m.oth@g.nosp@m.mail.nosp@m..com)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file matrix.hpp.

    +

    Definition in file matrix_interpolation.hpp.

    diff --git a/doc/api/a00071_source.html b/doc/api/a00071_source.html index 8279eddc..20a45925 100644 --- a/doc/api/a00071_source.html +++ b/doc/api/a00071_source.html @@ -3,8 +3,8 @@ - -GLM: matrix.hpp Source File + +0.9.6: matrix_interpolation.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,64 @@
    -
    matrix.hpp
    +
    matrix_interpolation.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_MATRIX_INCLUDED
    -
    30 #define GLM_MATRIX_INCLUDED
    -
    31 
    -
    32 #include "detail/func_matrix.hpp"
    -
    33 
    -
    34 #endif//GLM_MATRIX_INCLUDED
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_matrix_interpolation extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename T, precision P>
    +
    55  GLM_FUNC_DECL void axisAngle(
    +
    56  tmat4x4<T, P> const & mat,
    +
    57  tvec3<T, P> & axis,
    +
    58  T & angle);
    +
    59 
    +
    62  template <typename T, precision P>
    +
    63  GLM_FUNC_DECL tmat4x4<T, P> axisAngleMatrix(
    +
    64  tvec3<T, P> const & axis,
    +
    65  T const angle);
    +
    66 
    +
    69  template <typename T, precision P>
    +
    70  GLM_FUNC_DECL tmat4x4<T, P> extractMatrixRotation(
    +
    71  tmat4x4<T, P> const & mat);
    +
    72 
    +
    76  template <typename T, precision P>
    +
    77  GLM_FUNC_DECL tmat4x4<T, P> interpolate(
    +
    78  tmat4x4<T, P> const & m1,
    +
    79  tmat4x4<T, P> const & m2,
    +
    80  T const delta);
    +
    81 
    +
    83 }//namespace glm
    +
    84 
    +
    85 #include "matrix_interpolation.inl"
    +
    GLM_FUNC_DECL tmat4x4< T, P > interpolate(tmat4x4< T, P > const &m1, tmat4x4< T, P > const &m2, T const delta)
    Build a interpolation of 4 * 4 matrixes.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL void axisAngle(tmat4x4< T, P > const &mat, tvec3< T, P > &axis, T &angle)
    Get the axis and angle of the rotation from a matrix.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)
    Returns the q rotation axis.
    +
    GLM_FUNC_DECL tmat4x4< T, P > axisAngleMatrix(tvec3< T, P > const &axis, T const angle)
    Build a matrix from axis and angle.
    +
    GLM_FUNC_DECL tmat4x4< T, P > extractMatrixRotation(tmat4x4< T, P > const &mat)
    Extracts the rotation part of a matrix.
    diff --git a/doc/api/a00072.html b/doc/api/a00072.html index d14b7a16..7e0add14 100644 --- a/doc/api/a00072.html +++ b/doc/api/a00072.html @@ -3,8 +3,8 @@ - -GLM: matrix_access.hpp File Reference + +0.9.6: matrix_inverse.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,57 +41,45 @@
    -
    matrix_access.hpp File Reference
    +
    matrix_inverse.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - + + + + + +

    Functions

    template<typename genType >
    genType::col_type column (genType const &m, length_t const &index)
     
    template<typename genType >
    genType column (genType const &m, length_t const &index, typename genType::col_type const &x)
     
    template<typename genType >
    genType::row_type row (genType const &m, length_t const &index)
     
    template<typename genType >
    genType row (genType const &m, length_t const &index, typename genType::row_type const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType affineInverse (genType const &m)
     
    template<typename genType >
    GLM_FUNC_DECL genType inverseTranspose (genType const &m)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_matrix_access

    -
    Date
    2005-12-27 / 2011-05-16
    +

    GLM_GTC_matrix_inverse

    +
    Date
    2005-12-21 / 2011-06-05
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file matrix_access.hpp.

    +

    Definition in file matrix_inverse.hpp.

    diff --git a/doc/api/a00072_source.html b/doc/api/a00072_source.html index 5fa38a6b..8f9b2b26 100644 --- a/doc/api/a00072_source.html +++ b/doc/api/a00072_source.html @@ -3,8 +3,8 @@ - -GLM: matrix_access.hpp Source File + +0.9.6: matrix_inverse.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,63 +41,45 @@
    -
    matrix_access.hpp
    +
    matrix_inverse.hpp
    Go to the documentation of this file.
    1 
    -
    37 #ifndef GLM_GTC_matrix_access
    -
    38 #define GLM_GTC_matrix_access
    -
    39 
    -
    40 // Dependency:
    -
    41 #include "../detail/setup.hpp"
    -
    42 
    -
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    44 # pragma message("GLM: GLM_GTC_matrix_access extension included")
    -
    45 #endif
    -
    46 
    -
    47 namespace glm
    -
    48 {
    -
    51 
    -
    54  template <typename genType>
    -
    55  typename genType::row_type row(
    -
    56  genType const & m,
    -
    57  length_t const & index);
    +
    37 #pragma once
    +
    38 
    +
    39 // Dependencies
    +
    40 #include "../detail/setup.hpp"
    +
    41 
    +
    42 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    43 # pragma message("GLM: GLM_GTC_matrix_inverse extension included")
    +
    44 #endif
    +
    45 
    +
    46 namespace glm
    +
    47 {
    +
    50 
    +
    56  template <typename genType>
    +
    57  GLM_FUNC_DECL genType affineInverse(genType const & m);
    58 
    -
    61  template <typename genType>
    -
    62  genType row(
    -
    63  genType const & m,
    -
    64  length_t const & index,
    -
    65  typename genType::row_type const & x);
    +
    64  template <typename genType>
    +
    65  GLM_FUNC_DECL genType inverseTranspose(genType const & m);
    66 
    -
    69  template <typename genType>
    -
    70  typename genType::col_type column(
    -
    71  genType const & m,
    -
    72  length_t const & index);
    -
    73 
    -
    76  template <typename genType>
    -
    77  genType column(
    -
    78  genType const & m,
    -
    79  length_t const & index,
    -
    80  typename genType::col_type const & x);
    -
    81 
    -
    83 }//namespace glm
    -
    84 
    -
    85 #include "matrix_access.inl"
    -
    86 
    -
    87 #endif//GLM_GTC_matrix_access
    -
    genType::col_type column(genType const &m, length_t const &index)
    Get a specific column of a matrix.
    -
    genType::row_type row(genType const &m, length_t const &index)
    Get a specific row of a matrix.
    +
    68 }//namespace glm
    +
    69 
    +
    70 #include "matrix_inverse.inl"
    +
    GLM_FUNC_DECL genType inverseTranspose(genType const &m)
    Compute the inverse transpose of a matrix.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType affineInverse(genType const &m)
    Fast matrix inverse for affine matrix.
    diff --git a/doc/api/a00073.html b/doc/api/a00073.html index 4bbe0b23..a41d4347 100644 --- a/doc/api/a00073.html +++ b/doc/api/a00073.html @@ -3,8 +3,8 @@ - -GLM: matrix_cross_product.hpp File Reference + +0.9.6: matrix_major_storage.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,53 +41,77 @@
    -
    matrix_cross_product.hpp File Reference
    +
    matrix_major_storage.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tmat3x3< T, P > matrixCross3 (detail::tvec3< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > matrixCross4 (detail::tvec3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > colMajor2 (tvec2< T, P > const &v1, tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > colMajor2 (tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > colMajor3 (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > colMajor3 (tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > colMajor4 (tvec4< T, P > const &v1, tvec4< T, P > const &v2, tvec4< T, P > const &v3, tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > colMajor4 (tmat4x4< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > rowMajor2 (tvec2< T, P > const &v1, tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > rowMajor2 (tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > rowMajor3 (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > rowMajor3 (tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rowMajor4 (tvec4< T, P > const &v1, tvec4< T, P > const &v2, tvec4< T, P > const &v3, tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rowMajor4 (tmat4x4< T, P > const &m)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_cross_product

    -
    Date
    2005-12-21 / 2011-06-07
    +

    GLM_GTX_matrix_major_storage

    +
    Date
    2006-04-19 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max (dependence)
    +GLM_GTX_extented_min_max (dependence)
    -

    Definition in file matrix_cross_product.hpp.

    +

    Definition in file matrix_major_storage.hpp.

    diff --git a/doc/api/a00073_source.html b/doc/api/a00073_source.html index 27c9e1b0..9820b0f1 100644 --- a/doc/api/a00073_source.html +++ b/doc/api/a00073_source.html @@ -3,8 +3,8 @@ - -GLM: matrix_cross_product.hpp Source File + +0.9.6: matrix_major_storage.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,49 +41,103 @@
    -
    matrix_cross_product.hpp
    +
    matrix_major_storage.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_matrix_cross_product
    -
    40 #define GLM_GTX_matrix_cross_product
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_matrix_cross_product extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    56  template <typename T, precision P>
    -
    57  detail::tmat3x3<T, P> matrixCross3(
    -
    58  detail::tvec3<T, P> const & x);
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_matrix_major_storage extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T, precision P>
    +
    56  GLM_FUNC_DECL tmat2x2<T, P> rowMajor2(
    +
    57  tvec2<T, P> const & v1,
    +
    58  tvec2<T, P> const & v2);
    59 
    62  template <typename T, precision P>
    -
    63  detail::tmat4x4<T, P> matrixCross4(
    -
    64  detail::tvec3<T, P> const & x);
    +
    63  GLM_FUNC_DECL tmat2x2<T, P> rowMajor2(
    +
    64  tmat2x2<T, P> const & m);
    65 
    -
    67 }//namespace glm
    -
    68 
    -
    69 #include "matrix_cross_product.inl"
    -
    70 
    -
    71 #endif//GLM_GTX_matrix_cross_product
    -
    detail::tmat4x4< T, P > matrixCross4(detail::tvec3< T, P > const &x)
    Build a cross product matrix.
    -
    detail::tmat3x3< T, P > matrixCross3(detail::tvec3< T, P > const &x)
    Build a cross product matrix.
    +
    68  template <typename T, precision P>
    +
    69  GLM_FUNC_DECL tmat3x3<T, P> rowMajor3(
    +
    70  tvec3<T, P> const & v1,
    +
    71  tvec3<T, P> const & v2,
    +
    72  tvec3<T, P> const & v3);
    +
    73 
    +
    76  template <typename T, precision P>
    +
    77  GLM_FUNC_DECL tmat3x3<T, P> rowMajor3(
    +
    78  tmat3x3<T, P> const & m);
    +
    79 
    +
    82  template <typename T, precision P>
    +
    83  GLM_FUNC_DECL tmat4x4<T, P> rowMajor4(
    +
    84  tvec4<T, P> const & v1,
    +
    85  tvec4<T, P> const & v2,
    +
    86  tvec4<T, P> const & v3,
    +
    87  tvec4<T, P> const & v4);
    +
    88 
    +
    91  template <typename T, precision P>
    +
    92  GLM_FUNC_DECL tmat4x4<T, P> rowMajor4(
    +
    93  tmat4x4<T, P> const & m);
    +
    94 
    +
    97  template <typename T, precision P>
    +
    98  GLM_FUNC_DECL tmat2x2<T, P> colMajor2(
    +
    99  tvec2<T, P> const & v1,
    +
    100  tvec2<T, P> const & v2);
    +
    101 
    +
    104  template <typename T, precision P>
    +
    105  GLM_FUNC_DECL tmat2x2<T, P> colMajor2(
    +
    106  tmat2x2<T, P> const & m);
    +
    107 
    +
    110  template <typename T, precision P>
    +
    111  GLM_FUNC_DECL tmat3x3<T, P> colMajor3(
    +
    112  tvec3<T, P> const & v1,
    +
    113  tvec3<T, P> const & v2,
    +
    114  tvec3<T, P> const & v3);
    +
    115 
    +
    118  template <typename T, precision P>
    +
    119  GLM_FUNC_DECL tmat3x3<T, P> colMajor3(
    +
    120  tmat3x3<T, P> const & m);
    +
    121 
    +
    124  template <typename T, precision P>
    +
    125  GLM_FUNC_DECL tmat4x4<T, P> colMajor4(
    +
    126  tvec4<T, P> const & v1,
    +
    127  tvec4<T, P> const & v2,
    +
    128  tvec4<T, P> const & v3,
    +
    129  tvec4<T, P> const & v4);
    +
    130 
    +
    133  template <typename T, precision P>
    +
    134  GLM_FUNC_DECL tmat4x4<T, P> colMajor4(
    +
    135  tmat4x4<T, P> const & m);
    +
    136 
    +
    138 }//namespace glm
    +
    139 
    +
    140 #include "matrix_major_storage.inl"
    +
    GLM_FUNC_DECL tmat4x4< T, P > rowMajor4(tmat4x4< T, P > const &m)
    Build a row major matrix from other matrix.
    +
    GLM_FUNC_DECL tmat3x3< T, P > rowMajor3(tmat3x3< T, P > const &m)
    Build a row major matrix from other matrix.
    +
    GLM_FUNC_DECL tmat4x4< T, P > colMajor4(tmat4x4< T, P > const &m)
    Build a column major matrix from other matrix.
    +
    GLM_FUNC_DECL tmat2x2< T, P > rowMajor2(tmat2x2< T, P > const &m)
    Build a row major matrix from other matrix.
    +
    GLM_FUNC_DECL tmat2x2< T, P > colMajor2(tmat2x2< T, P > const &m)
    Build a column major matrix from other matrix.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tmat3x3< T, P > colMajor3(tmat3x3< T, P > const &m)
    Build a column major matrix from other matrix.
    diff --git a/doc/api/a00074.html b/doc/api/a00074.html index fe3f1d7d..f10b840a 100644 --- a/doc/api/a00074.html +++ b/doc/api/a00074.html @@ -3,8 +3,8 @@ - -GLM: matrix_integer.hpp File Reference + +0.9.6: matrix_operation.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,309 +41,66 @@
    -
    matrix_integer.hpp File Reference
    +
    matrix_operation.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    typedef detail::tmat2x2< int,
    -highp > 
    highp_imat2
     
    typedef detail::tmat2x2< int,
    -highp > 
    highp_imat2x2
     
    typedef detail::tmat2x3< int,
    -highp > 
    highp_imat2x3
     
    typedef detail::tmat2x4< int,
    -highp > 
    highp_imat2x4
     
    typedef detail::tmat3x3< int,
    -highp > 
    highp_imat3
     
    typedef detail::tmat3x2< int,
    -highp > 
    highp_imat3x2
     
    typedef detail::tmat3x3< int,
    -highp > 
    highp_imat3x3
     
    typedef detail::tmat3x4< int,
    -highp > 
    highp_imat3x4
     
    typedef detail::tmat4x4< int,
    -highp > 
    highp_imat4
     
    typedef detail::tmat4x2< int,
    -highp > 
    highp_imat4x2
     
    typedef detail::tmat4x3< int,
    -highp > 
    highp_imat4x3
     
    typedef detail::tmat4x4< int,
    -highp > 
    highp_imat4x4
     
    typedef detail::tmat2x2< uint,
    -highp > 
    highp_umat2
     
    typedef detail::tmat2x2< uint,
    -highp > 
    highp_umat2x2
     
    typedef detail::tmat2x3< uint,
    -highp > 
    highp_umat2x3
     
    typedef detail::tmat2x4< uint,
    -highp > 
    highp_umat2x4
     
    typedef detail::tmat3x3< uint,
    -highp > 
    highp_umat3
     
    typedef detail::tmat3x2< uint,
    -highp > 
    highp_umat3x2
     
    typedef detail::tmat3x3< uint,
    -highp > 
    highp_umat3x3
     
    typedef detail::tmat3x4< uint,
    -highp > 
    highp_umat3x4
     
    typedef detail::tmat4x4< uint,
    -highp > 
    highp_umat4
     
    typedef detail::tmat4x2< uint,
    -highp > 
    highp_umat4x2
     
    typedef detail::tmat4x3< uint,
    -highp > 
    highp_umat4x3
     
    typedef detail::tmat4x4< uint,
    -highp > 
    highp_umat4x4
     
    typedef mediump_imat2 imat2
     
    typedef mediump_imat2x2 imat2x2
     
    typedef mediump_imat2x3 imat2x3
     
    typedef mediump_imat2x4 imat2x4
     
    typedef mediump_imat3 imat3
     
    typedef mediump_imat3x2 imat3x2
     
    typedef mediump_imat3x3 imat3x3
     
    typedef mediump_imat3x4 imat3x4
     
    typedef mediump_imat4 imat4
     
    typedef mediump_imat4x2 imat4x2
     
    typedef mediump_imat4x3 imat4x3
     
    typedef mediump_imat4x4 imat4x4
     
    typedef detail::tmat2x2< int,
    -lowp > 
    lowp_imat2
     
    typedef detail::tmat2x2< int,
    -lowp > 
    lowp_imat2x2
     
    typedef detail::tmat2x3< int,
    -lowp > 
    lowp_imat2x3
     
    typedef detail::tmat2x4< int,
    -lowp > 
    lowp_imat2x4
     
    typedef detail::tmat3x3< int,
    -lowp > 
    lowp_imat3
     
    typedef detail::tmat3x2< int,
    -lowp > 
    lowp_imat3x2
     
    typedef detail::tmat3x3< int,
    -lowp > 
    lowp_imat3x3
     
    typedef detail::tmat3x4< int,
    -lowp > 
    lowp_imat3x4
     
    typedef detail::tmat4x4< int,
    -lowp > 
    lowp_imat4
     
    typedef detail::tmat4x2< int,
    -lowp > 
    lowp_imat4x2
     
    typedef detail::tmat4x3< int,
    -lowp > 
    lowp_imat4x3
     
    typedef detail::tmat4x4< int,
    -lowp > 
    lowp_imat4x4
     
    typedef detail::tmat2x2< uint,
    -lowp > 
    lowp_umat2
     
    typedef detail::tmat2x2< uint,
    -lowp > 
    lowp_umat2x2
     
    typedef detail::tmat2x3< uint,
    -lowp > 
    lowp_umat2x3
     
    typedef detail::tmat2x4< uint,
    -lowp > 
    lowp_umat2x4
     
    typedef detail::tmat3x3< uint,
    -lowp > 
    lowp_umat3
     
    typedef detail::tmat3x2< uint,
    -lowp > 
    lowp_umat3x2
     
    typedef detail::tmat3x3< uint,
    -lowp > 
    lowp_umat3x3
     
    typedef detail::tmat3x4< uint,
    -lowp > 
    lowp_umat3x4
     
    typedef detail::tmat4x4< uint,
    -lowp > 
    lowp_umat4
     
    typedef detail::tmat4x2< uint,
    -lowp > 
    lowp_umat4x2
     
    typedef detail::tmat4x3< uint,
    -lowp > 
    lowp_umat4x3
     
    typedef detail::tmat4x4< uint,
    -lowp > 
    lowp_umat4x4
     
    typedef detail::tmat2x2< int,
    -mediump > 
    mediump_imat2
     
    typedef detail::tmat2x2< int,
    -mediump > 
    mediump_imat2x2
     
    typedef detail::tmat2x3< int,
    -mediump > 
    mediump_imat2x3
     
    typedef detail::tmat2x4< int,
    -mediump > 
    mediump_imat2x4
     
    typedef detail::tmat3x3< int,
    -mediump > 
    mediump_imat3
     
    typedef detail::tmat3x2< int,
    -mediump > 
    mediump_imat3x2
     
    typedef detail::tmat3x3< int,
    -mediump > 
    mediump_imat3x3
     
    typedef detail::tmat3x4< int,
    -mediump > 
    mediump_imat3x4
     
    typedef detail::tmat4x4< int,
    -mediump > 
    mediump_imat4
     
    typedef detail::tmat4x2< int,
    -mediump > 
    mediump_imat4x2
     
    typedef detail::tmat4x3< int,
    -mediump > 
    mediump_imat4x3
     
    typedef detail::tmat4x4< int,
    -mediump > 
    mediump_imat4x4
     
    typedef detail::tmat2x2< uint,
    -mediump > 
    mediump_umat2
     
    typedef detail::tmat2x2< uint,
    -mediump > 
    mediump_umat2x2
     
    typedef detail::tmat2x3< uint,
    -mediump > 
    mediump_umat2x3
     
    typedef detail::tmat2x4< uint,
    -mediump > 
    mediump_umat2x4
     
    typedef detail::tmat3x3< uint,
    -mediump > 
    mediump_umat3
     
    typedef detail::tmat3x2< uint,
    -mediump > 
    mediump_umat3x2
     
    typedef detail::tmat3x3< uint,
    -mediump > 
    mediump_umat3x3
     
    typedef detail::tmat3x4< uint,
    -mediump > 
    mediump_umat3x4
     
    typedef detail::tmat4x4< uint,
    -mediump > 
    mediump_umat4
     
    typedef detail::tmat4x2< uint,
    -mediump > 
    mediump_umat4x2
     
    typedef detail::tmat4x3< uint,
    -mediump > 
    mediump_umat4x3
     
    typedef detail::tmat4x4< uint,
    -mediump > 
    mediump_umat4x4
     
    typedef mediump_umat2 umat2
     
    typedef mediump_umat2x2 umat2x2
     
    typedef mediump_umat2x3 umat2x3
     
    typedef mediump_umat2x4 umat2x4
     
    typedef mediump_umat3 umat3
     
    typedef mediump_umat3x2 umat3x2
     
    typedef mediump_umat3x3 umat3x3
     
    typedef mediump_umat3x4 umat3x4
     
    typedef mediump_umat4 umat4
     
    typedef mediump_umat4x2 umat4x2
     
    typedef mediump_umat4x3 umat4x3
     
    typedef mediump_umat4x4 umat4x4
     

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > diagonal2x2 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x3< T, P > diagonal2x3 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x4< T, P > diagonal2x4 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x2< T, P > diagonal3x2 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > diagonal3x3 (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x4< T, P > diagonal3x4 (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x2< T, P > diagonal4x2 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x3< T, P > diagonal4x3 (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > diagonal4x4 (tvec4< T, P > const &v)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_matrix_integer

    -
    Date
    2011-01-20 / 2011-06-05
    +

    GLM_GTX_matrix_operation

    +
    Date
    2009-08-29 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file matrix_integer.hpp.

    +

    Definition in file matrix_operation.hpp.

    diff --git a/doc/api/a00074_source.html b/doc/api/a00074_source.html index 02b9e3dd..d0cca31e 100644 --- a/doc/api/a00074_source.html +++ b/doc/api/a00074_source.html @@ -3,8 +3,8 @@ - -GLM: matrix_integer.hpp Source File + +0.9.6: matrix_operation.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,400 +41,82 @@
    -
    matrix_integer.hpp
    +
    matrix_operation.hpp
    Go to the documentation of this file.
    1 
    -
    37 #ifndef GLM_GTC_matrix_integer
    -
    38 #define GLM_GTC_matrix_integer
    -
    39 
    +
    38 #pragma once
    +
    39 
    40 // Dependency:
    -
    41 #include "../mat2x2.hpp"
    -
    42 #include "../mat2x3.hpp"
    -
    43 #include "../mat2x4.hpp"
    -
    44 #include "../mat3x2.hpp"
    -
    45 #include "../mat3x3.hpp"
    -
    46 #include "../mat3x4.hpp"
    -
    47 #include "../mat4x2.hpp"
    -
    48 #include "../mat4x3.hpp"
    -
    49 #include "../mat4x4.hpp"
    -
    50 
    -
    51 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    52 # pragma message("GLM: GLM_GTC_matrix_integer extension included")
    -
    53 #endif
    -
    54 
    -
    55 namespace glm
    -
    56 {
    -
    59 
    -
    62  typedef detail::tmat2x2<int, highp> highp_imat2;
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_matrix_operation extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename T, precision P>
    +
    55  GLM_FUNC_DECL tmat2x2<T, P> diagonal2x2(
    +
    56  tvec2<T, P> const & v);
    +
    57 
    +
    60  template <typename T, precision P>
    +
    61  GLM_FUNC_DECL tmat2x3<T, P> diagonal2x3(
    +
    62  tvec2<T, P> const & v);
    63 
    -
    66  typedef detail::tmat3x3<int, highp> highp_imat3;
    -
    67 
    -
    70  typedef detail::tmat4x4<int, highp> highp_imat4;
    -
    71 
    -
    74  typedef detail::tmat2x2<int, highp> highp_imat2x2;
    +
    66  template <typename T, precision P>
    +
    67  GLM_FUNC_DECL tmat2x4<T, P> diagonal2x4(
    +
    68  tvec2<T, P> const & v);
    +
    69 
    +
    72  template <typename T, precision P>
    +
    73  GLM_FUNC_DECL tmat3x2<T, P> diagonal3x2(
    +
    74  tvec2<T, P> const & v);
    75 
    -
    78  typedef detail::tmat2x3<int, highp> highp_imat2x3;
    -
    79 
    -
    82  typedef detail::tmat2x4<int, highp> highp_imat2x4;
    -
    83 
    -
    86  typedef detail::tmat3x2<int, highp> highp_imat3x2;
    +
    78  template <typename T, precision P>
    +
    79  GLM_FUNC_DECL tmat3x3<T, P> diagonal3x3(
    +
    80  tvec3<T, P> const & v);
    +
    81 
    +
    84  template <typename T, precision P>
    +
    85  GLM_FUNC_DECL tmat3x4<T, P> diagonal3x4(
    +
    86  tvec3<T, P> const & v);
    87 
    -
    90  typedef detail::tmat3x3<int, highp> highp_imat3x3;
    -
    91 
    -
    94  typedef detail::tmat3x4<int, highp> highp_imat3x4;
    -
    95 
    -
    98  typedef detail::tmat4x2<int, highp> highp_imat4x2;
    +
    90  template <typename T, precision P>
    +
    91  GLM_FUNC_DECL tmat4x2<T, P> diagonal4x2(
    +
    92  tvec2<T, P> const & v);
    +
    93 
    +
    96  template <typename T, precision P>
    +
    97  GLM_FUNC_DECL tmat4x3<T, P> diagonal4x3(
    +
    98  tvec3<T, P> const & v);
    99 
    -
    102  typedef detail::tmat4x3<int, highp> highp_imat4x3;
    -
    103 
    -
    106  typedef detail::tmat4x4<int, highp> highp_imat4x4;
    -
    107 
    +
    102  template <typename T, precision P>
    +
    103  GLM_FUNC_DECL tmat4x4<T, P> diagonal4x4(
    +
    104  tvec4<T, P> const & v);
    +
    105 
    +
    107 }//namespace glm
    108 
    -
    111  typedef detail::tmat2x2<int, mediump> mediump_imat2;
    -
    112 
    -
    115  typedef detail::tmat3x3<int, mediump> mediump_imat3;
    -
    116 
    -
    119  typedef detail::tmat4x4<int, mediump> mediump_imat4;
    -
    120 
    -
    121 
    -
    124  typedef detail::tmat2x2<int, mediump> mediump_imat2x2;
    -
    125 
    -
    128  typedef detail::tmat2x3<int, mediump> mediump_imat2x3;
    -
    129 
    -
    132  typedef detail::tmat2x4<int, mediump> mediump_imat2x4;
    -
    133 
    -
    136  typedef detail::tmat3x2<int, mediump> mediump_imat3x2;
    -
    137 
    -
    140  typedef detail::tmat3x3<int, mediump> mediump_imat3x3;
    -
    141 
    -
    144  typedef detail::tmat3x4<int, mediump> mediump_imat3x4;
    -
    145 
    -
    148  typedef detail::tmat4x2<int, mediump> mediump_imat4x2;
    -
    149 
    -
    152  typedef detail::tmat4x3<int, mediump> mediump_imat4x3;
    -
    153 
    -
    156  typedef detail::tmat4x4<int, mediump> mediump_imat4x4;
    -
    157 
    -
    158 
    -
    161  typedef detail::tmat2x2<int, lowp> lowp_imat2;
    -
    162 
    -
    165  typedef detail::tmat3x3<int, lowp> lowp_imat3;
    -
    166 
    -
    169  typedef detail::tmat4x4<int, lowp> lowp_imat4;
    -
    170 
    -
    171 
    -
    174  typedef detail::tmat2x2<int, lowp> lowp_imat2x2;
    -
    175 
    -
    178  typedef detail::tmat2x3<int, lowp> lowp_imat2x3;
    -
    179 
    -
    182  typedef detail::tmat2x4<int, lowp> lowp_imat2x4;
    -
    183 
    -
    186  typedef detail::tmat3x2<int, lowp> lowp_imat3x2;
    -
    187 
    -
    190  typedef detail::tmat3x3<int, lowp> lowp_imat3x3;
    -
    191 
    -
    194  typedef detail::tmat3x4<int, lowp> lowp_imat3x4;
    -
    195 
    -
    198  typedef detail::tmat4x2<int, lowp> lowp_imat4x2;
    -
    199 
    -
    202  typedef detail::tmat4x3<int, lowp> lowp_imat4x3;
    -
    203 
    -
    206  typedef detail::tmat4x4<int, lowp> lowp_imat4x4;
    -
    207 
    -
    208 
    -
    211  typedef detail::tmat2x2<uint, highp> highp_umat2;
    -
    212 
    -
    215  typedef detail::tmat3x3<uint, highp> highp_umat3;
    -
    216 
    -
    219  typedef detail::tmat4x4<uint, highp> highp_umat4;
    -
    220 
    -
    223  typedef detail::tmat2x2<uint, highp> highp_umat2x2;
    -
    224 
    -
    227  typedef detail::tmat2x3<uint, highp> highp_umat2x3;
    -
    228 
    -
    231  typedef detail::tmat2x4<uint, highp> highp_umat2x4;
    -
    232 
    -
    235  typedef detail::tmat3x2<uint, highp> highp_umat3x2;
    -
    236 
    -
    239  typedef detail::tmat3x3<uint, highp> highp_umat3x3;
    -
    240 
    -
    243  typedef detail::tmat3x4<uint, highp> highp_umat3x4;
    -
    244 
    -
    247  typedef detail::tmat4x2<uint, highp> highp_umat4x2;
    -
    248 
    -
    251  typedef detail::tmat4x3<uint, highp> highp_umat4x3;
    -
    252 
    -
    255  typedef detail::tmat4x4<uint, highp> highp_umat4x4;
    -
    256 
    -
    257 
    -
    260  typedef detail::tmat2x2<uint, mediump> mediump_umat2;
    -
    261 
    -
    264  typedef detail::tmat3x3<uint, mediump> mediump_umat3;
    -
    265 
    -
    268  typedef detail::tmat4x4<uint, mediump> mediump_umat4;
    -
    269 
    -
    270 
    -
    273  typedef detail::tmat2x2<uint, mediump> mediump_umat2x2;
    -
    274 
    -
    277  typedef detail::tmat2x3<uint, mediump> mediump_umat2x3;
    -
    278 
    -
    281  typedef detail::tmat2x4<uint, mediump> mediump_umat2x4;
    -
    282 
    -
    285  typedef detail::tmat3x2<uint, mediump> mediump_umat3x2;
    -
    286 
    -
    289  typedef detail::tmat3x3<uint, mediump> mediump_umat3x3;
    -
    290 
    -
    293  typedef detail::tmat3x4<uint, mediump> mediump_umat3x4;
    -
    294 
    -
    297  typedef detail::tmat4x2<uint, mediump> mediump_umat4x2;
    -
    298 
    -
    301  typedef detail::tmat4x3<uint, mediump> mediump_umat4x3;
    -
    302 
    -
    305  typedef detail::tmat4x4<uint, mediump> mediump_umat4x4;
    -
    306 
    -
    307 
    -
    310  typedef detail::tmat2x2<uint, lowp> lowp_umat2;
    -
    311 
    -
    314  typedef detail::tmat3x3<uint, lowp> lowp_umat3;
    -
    315 
    -
    318  typedef detail::tmat4x4<uint, lowp> lowp_umat4;
    -
    319 
    -
    320 
    -
    323  typedef detail::tmat2x2<uint, lowp> lowp_umat2x2;
    -
    324 
    -
    327  typedef detail::tmat2x3<uint, lowp> lowp_umat2x3;
    -
    328 
    -
    331  typedef detail::tmat2x4<uint, lowp> lowp_umat2x4;
    -
    332 
    -
    335  typedef detail::tmat3x2<uint, lowp> lowp_umat3x2;
    -
    336 
    -
    339  typedef detail::tmat3x3<uint, lowp> lowp_umat3x3;
    -
    340 
    -
    343  typedef detail::tmat3x4<uint, lowp> lowp_umat3x4;
    -
    344 
    -
    347  typedef detail::tmat4x2<uint, lowp> lowp_umat4x2;
    -
    348 
    -
    351  typedef detail::tmat4x3<uint, lowp> lowp_umat4x3;
    -
    352 
    -
    355  typedef detail::tmat4x4<uint, lowp> lowp_umat4x4;
    -
    356 
    -
    357 #if(defined(GLM_PRECISION_HIGHP_INT))
    -
    358  typedef highp_imat2 imat2;
    -
    359  typedef highp_imat3 imat3;
    -
    360  typedef highp_imat4 imat4;
    -
    361  typedef highp_imat2x2 imat2x2;
    -
    362  typedef highp_imat2x3 imat2x3;
    -
    363  typedef highp_imat2x4 imat2x4;
    -
    364  typedef highp_imat3x2 imat3x2;
    -
    365  typedef highp_imat3x3 imat3x3;
    -
    366  typedef highp_imat3x4 imat3x4;
    -
    367  typedef highp_imat4x2 imat4x2;
    -
    368  typedef highp_imat4x3 imat4x3;
    -
    369  typedef highp_imat4x4 imat4x4;
    -
    370 #elif(defined(GLM_PRECISION_LOWP_INT))
    -
    371  typedef lowp_imat2 imat2;
    -
    372  typedef lowp_imat3 imat3;
    -
    373  typedef lowp_imat4 imat4;
    -
    374  typedef lowp_imat2x2 imat2x2;
    -
    375  typedef lowp_imat2x3 imat2x3;
    -
    376  typedef lowp_imat2x4 imat2x4;
    -
    377  typedef lowp_imat3x2 imat3x2;
    -
    378  typedef lowp_imat3x3 imat3x3;
    -
    379  typedef lowp_imat3x4 imat3x4;
    -
    380  typedef lowp_imat4x2 imat4x2;
    -
    381  typedef lowp_imat4x3 imat4x3;
    -
    382  typedef lowp_imat4x4 imat4x4;
    -
    383 #else //if(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    384 
    - -
    388 
    - -
    392 
    - -
    396 
    - -
    400 
    - -
    404 
    - -
    408 
    - -
    412 
    - -
    416 
    - -
    420 
    - -
    424 
    - -
    428 
    - -
    432 #endif//GLM_PRECISION
    -
    433 
    -
    434 #if(defined(GLM_PRECISION_HIGHP_UINT))
    -
    435  typedef highp_umat2 umat2;
    -
    436  typedef highp_umat3 umat3;
    -
    437  typedef highp_umat4 umat4;
    -
    438  typedef highp_umat2x2 umat2x2;
    -
    439  typedef highp_umat2x3 umat2x3;
    -
    440  typedef highp_umat2x4 umat2x4;
    -
    441  typedef highp_umat3x2 umat3x2;
    -
    442  typedef highp_umat3x3 umat3x3;
    -
    443  typedef highp_umat3x4 umat3x4;
    -
    444  typedef highp_umat4x2 umat4x2;
    -
    445  typedef highp_umat4x3 umat4x3;
    -
    446  typedef highp_umat4x4 umat4x4;
    -
    447 #elif(defined(GLM_PRECISION_LOWP_UINT))
    -
    448  typedef lowp_umat2 umat2;
    -
    449  typedef lowp_umat3 umat3;
    -
    450  typedef lowp_umat4 umat4;
    -
    451  typedef lowp_umat2x2 umat2x2;
    -
    452  typedef lowp_umat2x3 umat2x3;
    -
    453  typedef lowp_umat2x4 umat2x4;
    -
    454  typedef lowp_umat3x2 umat3x2;
    -
    455  typedef lowp_umat3x3 umat3x3;
    -
    456  typedef lowp_umat3x4 umat3x4;
    -
    457  typedef lowp_umat4x2 umat4x2;
    -
    458  typedef lowp_umat4x3 umat4x3;
    -
    459  typedef lowp_umat4x4 umat4x4;
    -
    460 #else //if(defined(GLM_PRECISION_MEDIUMP_UINT))
    -
    461 
    - -
    465 
    - -
    469 
    - -
    473 
    - -
    477 
    - -
    481 
    - -
    485 
    - -
    489 
    - -
    493 
    - -
    497 
    - -
    501 
    - -
    505 
    - -
    509 #endif//GLM_PRECISION
    -
    510 
    -
    512 }//namespace glm
    -
    513 
    -
    514 #endif//GLM_GTC_matrix_integer
    -
    detail::tmat4x2< int, mediump > mediump_imat4x2
    Medium-precision signed integer 4x2 matrix.
    -
    detail::tmat3x3< uint, lowp > lowp_umat3x3
    Low-precision unsigned integer 3x3 matrix.
    -
    detail::tmat4x3< int, mediump > mediump_imat4x3
    Medium-precision signed integer 4x3 matrix.
    -
    detail::tmat3x3< uint, highp > highp_umat3
    High-precision unsigned integer 3x3 matrix.
    -
    detail::tmat2x2< int, lowp > lowp_imat2x2
    Low-precision signed integer 2x2 matrix.
    -
    detail::tmat3x3< uint, lowp > lowp_umat3
    Low-precision unsigned integer 3x3 matrix.
    -
    mediump_umat3x2 umat3x2
    Unsigned integer 3x2 matrix.
    -
    detail::tmat2x2< uint, lowp > lowp_umat2
    Low-precision unsigned integer 2x2 matrix.
    -
    detail::tmat2x4< uint, highp > highp_umat2x4
    High-precision unsigned integer 2x4 matrix.
    -
    detail::tmat3x2< uint, lowp > lowp_umat3x2
    Low-precision unsigned integer 3x2 matrix.
    -
    detail::tmat4x4< int, mediump > mediump_imat4x4
    Medium-precision signed integer 4x4 matrix.
    -
    mediump_imat4x2 imat4x2
    Signed integer 4x2 matrix.
    -
    detail::tmat2x2< uint, highp > highp_umat2
    High-precision unsigned integer 2x2 matrix.
    -
    detail::tmat3x2< int, mediump > mediump_imat3x2
    Medium-precision signed integer 3x2 matrix.
    -
    mediump_imat4x3 imat4x3
    Signed integer 4x3 matrix.
    -
    mediump_imat2x4 imat2x4
    Signed integer 2x4 matrix.
    -
    detail::tmat3x4< int, highp > highp_imat3x4
    High-precision signed integer 3x4 matrix.
    -
    mediump_umat3x4 umat3x4
    Unsigned integer 3x4 matrix.
    -
    mediump_imat2 imat2
    Signed integer 2x2 matrix.
    -
    detail::tmat2x3< int, mediump > mediump_imat2x3
    Medium-precision signed integer 2x3 matrix.
    -
    detail::tmat2x3< uint, mediump > mediump_umat2x3
    Medium-precision unsigned integer 2x3 matrix.
    -
    detail::tmat2x2< int, highp > highp_imat2
    High-precision signed integer 2x2 matrix.
    -
    detail::tmat2x4< uint, mediump > mediump_umat2x4
    Medium-precision unsigned integer 2x4 matrix.
    -
    detail::tmat4x4< int, highp > highp_imat4
    High-precision signed integer 4x4 matrix.
    -
    detail::tmat4x4< uint, highp > highp_umat4
    High-precision unsigned integer 4x4 matrix.
    -
    detail::tmat2x2< uint, lowp > lowp_umat2x2
    Low-precision unsigned integer 2x2 matrix.
    -
    detail::tmat4x3< uint, highp > highp_umat4x3
    High-precision unsigned integer 4x3 matrix.
    -
    detail::tmat2x2< uint, mediump > mediump_umat2
    Medium-precision unsigned integer 2x2 matrix.
    -
    detail::tmat3x4< int, mediump > mediump_imat3x4
    Medium-precision signed integer 3x4 matrix.
    -
    detail::tmat2x4< uint, lowp > lowp_umat2x4
    Low-precision unsigned integer 2x4 matrix.
    -
    detail::tmat3x3< uint, mediump > mediump_umat3
    Medium-precision unsigned integer 3x3 matrix.
    -
    detail::tmat4x2< uint, highp > highp_umat4x2
    High-precision unsigned integer 4x2 matrix.
    -
    mediump_umat4x3 umat4x3
    Unsigned integer 4x3 matrix.
    -
    detail::tmat2x2< uint, mediump > mediump_umat2x2
    Medium-precision unsigned integer 2x2 matrix.
    -
    detail::tmat4x2< uint, mediump > mediump_umat4x2
    Medium-precision unsigned integer 4x2 matrix.
    -
    detail::tmat4x4< int, lowp > lowp_imat4x4
    Low-precision signed integer 4x4 matrix.
    -
    mediump_imat3x2 imat3x2
    Signed integer 3x2 matrix.
    -
    detail::tmat3x4< uint, lowp > lowp_umat3x4
    Low-precision unsigned integer 3x4 matrix.
    -
    detail::tmat3x2< int, lowp > lowp_imat3x2
    Low-precision signed integer 3x2 matrix.
    -
    detail::tmat4x4< uint, lowp > lowp_umat4
    Low-precision unsigned integer 4x4 matrix.
    -
    detail::tmat3x2< uint, highp > highp_umat3x2
    High-precision unsigned integer 3x2 matrix.
    -
    detail::tmat4x2< uint, lowp > lowp_umat4x2
    Low-precision unsigned integer 4x2 matrix.
    -
    detail::tmat3x3< uint, mediump > mediump_umat3x3
    Medium-precision unsigned integer 3x3 matrix.
    -
    detail::tmat4x4< int, highp > highp_imat4x4
    High-precision signed integer 4x4 matrix.
    -
    detail::tmat2x2< int, mediump > mediump_imat2
    Medium-precision signed integer 2x2 matrix.
    -
    mediump_imat4x4 imat4x4
    Signed integer 4x4 matrix.
    -
    mediump_umat4 umat4
    Unsigned integer 4x4 matrix.
    -
    detail::tmat4x3< int, lowp > lowp_imat4x3
    Low-precision signed integer 4x3 matrix.
    -
    detail::tmat2x3< int, lowp > lowp_imat2x3
    Low-precision signed integer 2x3 matrix.
    -
    mediump_imat3x3 imat3x3
    Signed integer 3x3 matrix.
    -
    mediump_umat3 umat3
    Unsigned integer 3x3 matrix.
    -
    detail::tmat2x3< uint, highp > highp_umat2x3
    High-precision unsigned integer 2x3 matrix.
    -
    detail::tmat4x3< uint, lowp > lowp_umat4x3
    Low-precision unsigned integer 4x3 matrix.
    -
    detail::tmat3x4< int, lowp > lowp_imat3x4
    Low-precision signed integer 3x4 matrix.
    -
    mediump_umat4x2 umat4x2
    Unsigned integer 4x2 matrix.
    -
    detail::tmat2x4< int, lowp > lowp_imat2x4
    Low-precision signed integer 2x4 matrix.
    -
    mediump_imat4 imat4
    Signed integer 4x4 matrix.
    -
    detail::tmat2x4< int, highp > highp_imat2x4
    High-precision signed integer 2x4 matrix.
    -
    detail::tmat4x4< int, mediump > mediump_imat4
    Medium-precision signed integer 4x4 matrix.
    -
    detail::tmat3x3< int, lowp > lowp_imat3
    Low-precision signed integer 3x3 matrix.
    -
    detail::tmat4x4< uint, highp > highp_umat4x4
    High-precision unsigned integer 4x4 matrix.
    -
    detail::tmat4x2< int, highp > highp_imat4x2
    High-precision signed integer 4x2 matrix.
    -
    detail::tmat2x2< int, mediump > mediump_imat2x2
    Medium-precision signed integer 2x2 matrix.
    -
    mediump_imat2x3 imat2x3
    Signed integer 2x3 matrix.
    -
    detail::tmat2x2< int, lowp > lowp_imat2
    Low-precision signed integer 2x2 matrix.
    -
    detail::tmat2x4< int, mediump > mediump_imat2x4
    Medium-precision signed integer 2x4 matrix.
    -
    detail::tmat2x2< int, highp > highp_imat2x2
    High-precision signed integer 2x2 matrix.
    -
    detail::tmat3x2< uint, mediump > mediump_umat3x2
    Medium-precision unsigned integer 3x2 matrix.
    -
    mediump_umat3x3 umat3x3
    Unsigned integer 3x3 matrix.
    -
    detail::tmat3x2< int, highp > highp_imat3x2
    High-precision signed integer 3x2 matrix.
    -
    mediump_umat2 umat2
    Unsigned integer 2x2 matrix.
    -
    detail::tmat3x3< int, mediump > mediump_imat3
    Medium-precision signed integer 3x3 matrix.
    -
    mediump_umat2x2 umat2x2
    Unsigned integer 2x2 matrix.
    -
    detail::tmat3x3< int, highp > highp_imat3
    High-precision signed integer 3x3 matrix.
    -
    detail::tmat3x3< int, mediump > mediump_imat3x3
    Medium-precision signed integer 3x3 matrix.
    -
    detail::tmat4x3< uint, mediump > mediump_umat4x3
    Medium-precision unsigned integer 4x3 matrix.
    -
    mediump_umat4x4 umat4x4
    Unsigned integer 4x4 matrix.
    -
    mediump_imat3 imat3
    Signed integer 3x3 matrix.
    -
    mediump_imat2x2 imat2x2
    Signed integer 2x2 matrix.
    -
    detail::tmat3x3< int, highp > highp_imat3x3
    High-precision signed integer 3x3 matrix.
    -
    detail::tmat4x4< uint, mediump > mediump_umat4
    Medium-precision unsigned integer 4x4 matrix.
    -
    detail::tmat3x4< uint, mediump > mediump_umat3x4
    Medium-precision unsigned integer 3x4 matrix.
    -
    detail::tmat4x3< int, highp > highp_imat4x3
    High-precision signed integer 4x3 matrix.
    -
    detail::tmat4x4< uint, lowp > lowp_umat4x4
    Low-precision unsigned integer 4x4 matrix.
    -
    detail::tmat2x2< uint, highp > highp_umat2x2
    High-precision unsigned integer 2x2 matrix.
    -
    detail::tmat4x4< uint, mediump > mediump_umat4x4
    Medium-precision unsigned integer 4x4 matrix.
    -
    detail::tmat4x2< int, lowp > lowp_imat4x2
    Low-precision signed integer 4x2 matrix.
    -
    detail::tmat2x3< uint, lowp > lowp_umat2x3
    Low-precision unsigned integer 2x3 matrix.
    -
    detail::tmat3x3< int, lowp > lowp_imat3x3
    Low-precision signed integer 3x3 matrix.
    -
    mediump_umat2x4 umat2x4
    Unsigned integer 2x4 matrix.
    -
    mediump_umat2x3 umat2x3
    Unsigned integer 2x3 matrix.
    -
    detail::tmat3x4< uint, highp > highp_umat3x4
    High-precision unsigned integer 3x4 matrix.
    -
    detail::tmat4x4< int, lowp > lowp_imat4
    Low-precision signed integer 4x4 matrix.
    -
    detail::tmat3x3< uint, highp > highp_umat3x3
    High-precision unsigned integer 3x3 matrix.
    -
    detail::tmat2x3< int, highp > highp_imat2x3
    High-precision signed integer 2x3 matrix.
    -
    mediump_imat3x4 imat3x4
    Signed integer 3x4 matrix.
    +
    109 #include "matrix_operation.inl"
    +
    GLM_FUNC_DECL tmat3x4< T, P > diagonal3x4(tvec3< T, P > const &v)
    Build a diagonal matrix.
    +
    GLM_FUNC_DECL tmat4x3< T, P > diagonal4x3(tvec3< T, P > const &v)
    Build a diagonal matrix.
    +
    GLM_FUNC_DECL tmat4x4< T, P > diagonal4x4(tvec4< T, P > const &v)
    Build a diagonal matrix.
    +
    GLM_FUNC_DECL tmat2x4< T, P > diagonal2x4(tvec2< T, P > const &v)
    Build a diagonal matrix.
    +
    GLM_FUNC_DECL tmat3x3< T, P > diagonal3x3(tvec3< T, P > const &v)
    Build a diagonal matrix.
    +
    GLM_FUNC_DECL tmat4x2< T, P > diagonal4x2(tvec2< T, P > const &v)
    Build a diagonal matrix.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tmat2x3< T, P > diagonal2x3(tvec2< T, P > const &v)
    Build a diagonal matrix.
    +
    GLM_FUNC_DECL tmat2x2< T, P > diagonal2x2(tvec2< T, P > const &v)
    Build a diagonal matrix.
    +
    GLM_FUNC_DECL tmat3x2< T, P > diagonal3x2(tvec2< T, P > const &v)
    Build a diagonal matrix.
    diff --git a/doc/api/a00075.html b/doc/api/a00075.html index d4a8f038..023eca0e 100644 --- a/doc/api/a00075.html +++ b/doc/api/a00075.html @@ -3,8 +3,8 @@ - -GLM: matrix_interpolation.hpp File Reference + +0.9.6: matrix_query.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,57 +41,65 @@
    -
    matrix_interpolation.hpp File Reference
    +
    matrix_query.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    void axisAngle (detail::tmat4x4< T, P > const &mat, detail::tvec3< T, P > &axis, T &angle)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > axisAngleMatrix (detail::tvec3< T, P > const &axis, T const angle)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > extractMatrixRotation (detail::tmat4x4< T, P > const &mat)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > interpolate (detail::tmat4x4< T, P > const &m1, detail::tmat4x4< T, P > const &m2, T const delta)
     
    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL bool isIdentity (matType< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNormalized (tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNormalized (tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNormalized (tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNull (tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNull (tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNull (tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL bool isOrthogonal (matType< T, P > const &m, T const &epsilon)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_interpolation

    -
    Date
    2011-03-05 / 2011-06-07
    -
    Author
    Ghenadii Ursachi (the.a.nosp@m.ster.nosp@m.oth@g.nosp@m.mail.nosp@m..com)
    -
    See Also
    GLM Core (dependence)
    +

    GLM_GTX_matrix_query

    +
    Date
    2007-03-05 / 2011-08-28
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_vector_query (dependence)
    -

    Definition in file matrix_interpolation.hpp.

    +

    Definition in file matrix_query.hpp.

    diff --git a/doc/api/a00075_source.html b/doc/api/a00075_source.html index 558af6fc..f87cbf57 100644 --- a/doc/api/a00075_source.html +++ b/doc/api/a00075_source.html @@ -3,8 +3,8 @@ - -GLM: matrix_interpolation.hpp Source File + +0.9.6: matrix_query.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,66 +41,68 @@
    -
    matrix_interpolation.hpp
    +
    matrix_query.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_matrix_interpolation
    -
    39 #define GLM_GTX_matrix_interpolation
    -
    40 
    +
    39 #pragma once
    +
    40 
    41 // Dependency:
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_matrix_interpolation extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename T, precision P>
    -
    56  void axisAngle(
    -
    57  detail::tmat4x4<T, P> const & mat,
    -
    58  detail::tvec3<T, P> & axis,
    -
    59  T & angle);
    -
    60 
    -
    63  template <typename T, precision P>
    -
    64  detail::tmat4x4<T, P> axisAngleMatrix(
    -
    65  detail::tvec3<T, P> const & axis,
    -
    66  T const angle);
    -
    67 
    -
    70  template <typename T, precision P>
    -
    71  detail::tmat4x4<T, P> extractMatrixRotation(
    -
    72  detail::tmat4x4<T, P> const & mat);
    -
    73 
    -
    77  template <typename T, precision P>
    -
    78  detail::tmat4x4<T, P> interpolate(
    -
    79  detail::tmat4x4<T, P> const & m1,
    -
    80  detail::tmat4x4<T, P> const & m2,
    -
    81  T const delta);
    -
    82 
    -
    84 }//namespace glm
    -
    85 
    -
    86 #include "matrix_interpolation.inl"
    -
    87 
    -
    88 #endif//GLM_GTX_matrix_interpolation
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    detail::tmat4x4< T, P > extractMatrixRotation(detail::tmat4x4< T, P > const &mat)
    Extracts the rotation part of a matrix.
    -
    void axisAngle(detail::tmat4x4< T, P > const &mat, detail::tvec3< T, P > &axis, T &angle)
    Get the axis and angle of the rotation from a matrix.
    -
    detail::tmat4x4< T, P > interpolate(detail::tmat4x4< T, P > const &m1, detail::tmat4x4< T, P > const &m2, T const delta)
    Build a interpolation of 4 * 4 matrixes.
    -
    detail::tmat4x4< T, P > axisAngleMatrix(detail::tvec3< T, P > const &axis, T const angle)
    Build a matrix from axis and angle.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > axis(detail::tquat< T, P > const &x)
    Returns the q rotation axis.
    +
    43 #include "../gtx/vector_query.hpp"
    +
    44 #include <limits>
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    47 # pragma message("GLM: GLM_GTX_matrix_query extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    57  template<typename T, precision P>
    +
    58  GLM_FUNC_DECL bool isNull(tmat2x2<T, P> const & m, T const & epsilon);
    +
    59 
    +
    62  template<typename T, precision P>
    +
    63  GLM_FUNC_DECL bool isNull(tmat3x3<T, P> const & m, T const & epsilon);
    +
    64 
    +
    67  template<typename T, precision P>
    +
    68  GLM_FUNC_DECL bool isNull(tmat4x4<T, P> const & m, T const & epsilon);
    +
    69 
    +
    72  template<typename T, precision P, template <typename, precision> class matType>
    +
    73  GLM_FUNC_DECL bool isIdentity(matType<T, P> const & m, T const & epsilon);
    +
    74 
    +
    77  template<typename T, precision P>
    +
    78  GLM_FUNC_DECL bool isNormalized(tmat2x2<T, P> const & m, T const & epsilon);
    +
    79 
    +
    82  template<typename T, precision P>
    +
    83  GLM_FUNC_DECL bool isNormalized(tmat3x3<T, P> const & m, T const & epsilon);
    +
    84 
    +
    87  template<typename T, precision P>
    +
    88  GLM_FUNC_DECL bool isNormalized(tmat4x4<T, P> const & m, T const & epsilon);
    +
    89 
    +
    92  template<typename T, precision P, template <typename, precision> class matType>
    +
    93  GLM_FUNC_DECL bool isOrthogonal(matType<T, P> const & m, T const & epsilon);
    +
    94 
    +
    96 }//namespace glm
    +
    97 
    +
    98 #include "matrix_query.inl"
    +
    GLM_FUNC_DECL bool isNormalized(tmat4x4< T, P > const &m, T const &epsilon)
    Return whether a matrix is a normalized matrix.
    +
    GLM_FUNC_DECL bool isNull(tmat4x4< T, P > const &m, T const &epsilon)
    Return whether a matrix is a null matrix.
    +
    GLM_FUNC_DECL genType epsilon()
    Return the epsilon constant for floating point types.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL bool isIdentity(matType< T, P > const &m, T const &epsilon)
    Return whether a matrix is an identity matrix.
    +
    GLM_FUNC_DECL bool isOrthogonal(matType< T, P > const &m, T const &epsilon)
    Return whether a matrix is an orthonormalized matrix.
    diff --git a/doc/api/a00076.html b/doc/api/a00076.html index 4479d163..bea02102 100644 --- a/doc/api/a00076.html +++ b/doc/api/a00076.html @@ -3,8 +3,8 @@ - -GLM: matrix_inverse.hpp File Reference + +0.9.6: matrix_transform.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,52 +41,96 @@
    -
    matrix_inverse.hpp File Reference
    +
    matrix_transform.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_QUALIFIER genType affineInverse (genType const &m)
     
    template<typename genType >
    GLM_FUNC_QUALIFIER
    -genType::value_type 
    inverseTranspose (genType const &m)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    frustum (T left, T right, T bottom, T top, T near, T far)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    infinitePerspective (T fovy, T aspect, T near)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > lookAt (tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    ortho (T left, T right, T bottom, T top, T zNear, T zFar)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    ortho (T left, T right, T bottom, T top)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    perspective (T fovy, T aspect, T near, T far)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    perspectiveFov (T fov, T width, T height, T near, T far)
     
    template<typename T , precision P, typename U >
    GLM_FUNC_DECL tmat4x4< T, P > pickMatrix (tvec2< T, P > const &center, tvec2< T, P > const &delta, tvec4< U, P > const &viewport)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL tvec3< T, P > project (tvec3< T, P > const &obj, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rotate (tmat4x4< T, P > const &m, T angle, tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > scale (tmat4x4< T, P > const &m, tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > translate (tmat4x4< T, P > const &m, tvec3< T, P > const &v)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    tweakedInfinitePerspective (T fovy, T aspect, T near)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    tweakedInfinitePerspective (T fovy, T aspect, T near, T ep)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL tvec3< T, P > unProject (tvec3< T, P > const &win, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_matrix_inverse

    -
    Date
    2005-12-21 / 2011-06-05
    +

    GLM_GTC_matrix_transform

    +
    Date
    2009-04-29 / 2011-05-16
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_transform
    +
    +GLM_GTX_transform2
    -

    Definition in file matrix_inverse.hpp.

    +

    Definition in file matrix_transform.hpp.

    diff --git a/doc/api/a00076_source.html b/doc/api/a00076_source.html index 4107b9a1..caacced2 100644 --- a/doc/api/a00076_source.html +++ b/doc/api/a00076_source.html @@ -3,8 +3,8 @@ - -GLM: matrix_inverse.hpp Source File + +0.9.6: matrix_transform.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,48 +41,151 @@
    -
    matrix_inverse.hpp
    +
    matrix_transform.hpp
    Go to the documentation of this file.
    1 
    -
    37 #ifndef GLM_GTC_matrix_inverse
    -
    38 #define GLM_GTC_matrix_inverse
    -
    39 
    -
    40 // Dependencies
    -
    41 #include "../detail/setup.hpp"
    -
    42 
    -
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    44 # pragma message("GLM: GLM_GTC_matrix_inverse extension included")
    -
    45 #endif
    -
    46 
    -
    47 namespace glm
    -
    48 {
    -
    51 
    -
    57  template <typename genType>
    -
    58  GLM_FUNC_QUALIFIER genType affineInverse(genType const & m);
    -
    59 
    -
    65  template <typename genType>
    -
    66  GLM_FUNC_QUALIFIER typename genType::value_type inverseTranspose(
    -
    67  genType const & m);
    -
    68 
    -
    70 }//namespace glm
    -
    71 
    -
    72 #include "matrix_inverse.inl"
    -
    73 
    -
    74 #endif//GLM_GTC_matrix_inverse
    -
    GLM_FUNC_QUALIFIER genType affineInverse(genType const &m)
    Fast matrix inverse for affine matrix.
    -
    GLM_FUNC_QUALIFIER genType::value_type inverseTranspose(genType const &m)
    Compute the inverse transpose of a matrix.
    +
    46 #pragma once
    +
    47 
    +
    48 // Dependencies
    +
    49 #include "../mat4x4.hpp"
    +
    50 #include "../vec2.hpp"
    +
    51 #include "../vec3.hpp"
    +
    52 #include "../vec4.hpp"
    +
    53 #include "../gtc/constants.hpp"
    +
    54 
    +
    55 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    56 # pragma message("GLM: GLM_GTC_matrix_transform extension included")
    +
    57 #endif
    +
    58 
    +
    59 namespace glm
    +
    60 {
    +
    63 
    +
    82  template <typename T, precision P>
    +
    83  GLM_FUNC_DECL tmat4x4<T, P> translate(
    +
    84  tmat4x4<T, P> const & m,
    +
    85  tvec3<T, P> const & v);
    +
    86 
    +
    96  template <typename T, precision P>
    +
    97  GLM_FUNC_DECL tmat4x4<T, P> rotate(
    +
    98  tmat4x4<T, P> const & m,
    +
    99  T angle,
    +
    100  tvec3<T, P> const & axis);
    +
    101 
    +
    110  template <typename T, precision P>
    +
    111  GLM_FUNC_DECL tmat4x4<T, P> scale(
    +
    112  tmat4x4<T, P> const & m,
    +
    113  tvec3<T, P> const & v);
    +
    114 
    +
    126  template <typename T>
    +
    127  GLM_FUNC_DECL tmat4x4<T, defaultp> ortho(
    +
    128  T left,
    +
    129  T right,
    +
    130  T bottom,
    +
    131  T top,
    +
    132  T zNear,
    +
    133  T zFar);
    +
    134 
    +
    144  template <typename T>
    +
    145  GLM_FUNC_DECL tmat4x4<T, defaultp> ortho(
    +
    146  T left,
    +
    147  T right,
    +
    148  T bottom,
    +
    149  T top);
    +
    150 
    +
    161  template <typename T>
    +
    162  GLM_FUNC_DECL tmat4x4<T, defaultp> frustum(
    +
    163  T left,
    +
    164  T right,
    +
    165  T bottom,
    +
    166  T top,
    +
    167  T near,
    +
    168  T far);
    +
    169 
    +
    178  template <typename T>
    +
    179  GLM_FUNC_DECL tmat4x4<T, defaultp> perspective(
    +
    180  T fovy,
    +
    181  T aspect,
    +
    182  T near,
    +
    183  T far);
    +
    184 
    +
    194  template <typename T>
    +
    195  GLM_FUNC_DECL tmat4x4<T, defaultp> perspectiveFov(
    +
    196  T fov,
    +
    197  T width,
    +
    198  T height,
    +
    199  T near,
    +
    200  T far);
    +
    201 
    +
    209  template <typename T>
    +
    210  GLM_FUNC_DECL tmat4x4<T, defaultp> infinitePerspective(
    +
    211  T fovy, T aspect, T near);
    +
    212 
    +
    220  template <typename T>
    +
    221  GLM_FUNC_DECL tmat4x4<T, defaultp> tweakedInfinitePerspective(
    +
    222  T fovy, T aspect, T near);
    +
    223 
    +
    232  template <typename T>
    +
    233  GLM_FUNC_DECL tmat4x4<T, defaultp> tweakedInfinitePerspective(
    +
    234  T fovy, T aspect, T near, T ep);
    +
    235 
    +
    246  template <typename T, typename U, precision P>
    +
    247  GLM_FUNC_DECL tvec3<T, P> project(
    +
    248  tvec3<T, P> const & obj,
    +
    249  tmat4x4<T, P> const & model,
    +
    250  tmat4x4<T, P> const & proj,
    +
    251  tvec4<U, P> const & viewport);
    +
    252 
    +
    263  template <typename T, typename U, precision P>
    +
    264  GLM_FUNC_DECL tvec3<T, P> unProject(
    +
    265  tvec3<T, P> const & win,
    +
    266  tmat4x4<T, P> const & model,
    +
    267  tmat4x4<T, P> const & proj,
    +
    268  tvec4<U, P> const & viewport);
    +
    269 
    +
    278  template <typename T, precision P, typename U>
    +
    279  GLM_FUNC_DECL tmat4x4<T, P> pickMatrix(
    +
    280  tvec2<T, P> const & center,
    +
    281  tvec2<T, P> const & delta,
    +
    282  tvec4<U, P> const & viewport);
    +
    283 
    +
    291  template <typename T, precision P>
    +
    292  GLM_FUNC_DECL tmat4x4<T, P> lookAt(
    +
    293  tvec3<T, P> const & eye,
    +
    294  tvec3<T, P> const & center,
    +
    295  tvec3<T, P> const & up);
    +
    296 
    +
    298 }//namespace glm
    +
    299 
    +
    300 #include "matrix_transform.inl"
    +
    GLM_FUNC_DECL tvec3< T, P > unProject(tvec3< T, P > const &win, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)
    Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
    +
    GLM_FUNC_DECL tmat4x4< T, P > lookAt(tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)
    Build a look at view matrix.
    +
    GLM_FUNC_DECL tmat4x4< T, P > translate(tmat4x4< T, P > const &m, tvec3< T, P > const &v)
    Builds a translation 4 * 4 matrix created from a vector of 3 components.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > frustum(T left, T right, T bottom, T top, T near, T far)
    Creates a frustum matrix.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)
    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics har...
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > infinitePerspective(T fovy, T aspect, T near)
    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > perspective(T fovy, T aspect, T near, T far)
    Creates a matrix for a symetric perspective-view frustum.
    +
    GLM_FUNC_DECL tmat4x4< T, P > rotate(tmat4x4< T, P > const &m, T angle, tvec3< T, P > const &axis)
    Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > ortho(T left, T right, T bottom, T top)
    Creates a matrix for projecting two-dimensional coordinates onto the screen.
    +
    GLM_FUNC_DECL vecType proj(vecType const &x, vecType const &Normal)
    Projects x on Normal.
    +
    GLM_FUNC_DECL tmat4x4< T, P > pickMatrix(tvec2< T, P > const &center, tvec2< T, P > const &delta, tvec4< U, P > const &viewport)
    Define a picking region.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tvec3< T, P > project(tvec3< T, P > const &obj, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)
    Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
    +
    GLM_FUNC_DECL tmat4x4< T, P > scale(tmat4x4< T, P > const &m, tvec3< T, P > const &v)
    Builds a scale 4 * 4 matrix created from 3 scalars.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)
    Returns the q rotation axis.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > perspectiveFov(T fov, T width, T height, T near, T far)
    Builds a perspective projection matrix based on a field of view.
    diff --git a/doc/api/a00077.html b/doc/api/a00077.html index e1701842..81e6a0f7 100644 --- a/doc/api/a00077.html +++ b/doc/api/a00077.html @@ -3,8 +3,8 @@ - -GLM: matrix_major_storage.hpp File Reference + +0.9.6: matrix_transform_2d.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,83 +41,54 @@
    -
    matrix_major_storage.hpp File Reference
    +
    matrix_transform_2d.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tmat2x2< T, P > colMajor2 (detail::tvec2< T, P > const &v1, detail::tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > colMajor2 (detail::tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > colMajor3 (detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > colMajor3 (detail::tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > colMajor4 (detail::tvec4< T, P > const &v1, detail::tvec4< T, P > const &v2, detail::tvec4< T, P > const &v3, detail::tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > colMajor4 (detail::tmat4x4< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > rowMajor2 (detail::tvec2< T, P > const &v1, detail::tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > rowMajor2 (detail::tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > rowMajor3 (detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > rowMajor3 (detail::tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > rowMajor4 (detail::tvec4< T, P > const &v1, detail::tvec4< T, P > const &v2, detail::tvec4< T, P > const &v3, detail::tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > rowMajor4 (detail::tmat4x4< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > rotate (tmat3x3< T, P > const &m, T angle)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > scale (tmat3x3< T, P > const &m, tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > shearX (tmat3x3< T, P > const &m, T y)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > shearY (tmat3x3< T, P > const &m, T x)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > translate (tmat3x3< T, P > const &m, tvec2< T, P > const &v)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_major_storage

    -
    Date
    2006-04-19 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_extented_min_max (dependence)
    +

    GLM_GTX_matrix_transform_2d

    +
    Date
    2014-02-20
    +
    Author
    Miguel Ángel Pérez Martínez
    +
    See also
    GLM Core (dependence)
    -

    Definition in file matrix_major_storage.hpp.

    +

    Definition in file matrix_transform_2d.hpp.

    diff --git a/doc/api/a00077_source.html b/doc/api/a00077_source.html index dc6a851a..24e5f4f8 100644 --- a/doc/api/a00077_source.html +++ b/doc/api/a00077_source.html @@ -3,8 +3,8 @@ - -GLM: matrix_major_storage.hpp Source File + +0.9.6: matrix_transform_2d.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,105 +41,70 @@
    -
    matrix_major_storage.hpp
    +
    matrix_transform_2d.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_matrix_major_storage
    -
    40 #define GLM_GTX_matrix_major_storage
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../mat3x3.hpp"
    +
    42 #include "../vec2.hpp"
    +
    43 
    44 
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_matrix_major_storage extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    +
    46 # pragma message("GLM: GLM_GTX_matrix_transform_2d extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    50 {
    -
    53 
    -
    56  template <typename T, precision P>
    -
    57  detail::tmat2x2<T, P> rowMajor2(
    -
    58  detail::tvec2<T, P> const & v1,
    -
    59  detail::tvec2<T, P> const & v2);
    -
    60 
    -
    63  template <typename T, precision P>
    -
    64  detail::tmat2x2<T, P> rowMajor2(
    -
    65  detail::tmat2x2<T, P> const & m);
    -
    66 
    -
    69  template <typename T, precision P>
    -
    70  detail::tmat3x3<T, P> rowMajor3(
    -
    71  detail::tvec3<T, P> const & v1,
    -
    72  detail::tvec3<T, P> const & v2,
    -
    73  detail::tvec3<T, P> const & v3);
    -
    74 
    -
    77  template <typename T, precision P>
    -
    78  detail::tmat3x3<T, P> rowMajor3(
    -
    79  detail::tmat3x3<T, P> const & m);
    +
    53 
    +
    58  template <typename T, precision P>
    +
    59  GLM_FUNC_QUALIFIER tmat3x3<T, P> translate(
    +
    60  tmat3x3<T, P> const & m,
    +
    61  tvec2<T, P> const & v);
    +
    62 
    +
    67  template <typename T, precision P>
    +
    68  GLM_FUNC_QUALIFIER tmat3x3<T, P> rotate(
    +
    69  tmat3x3<T, P> const & m,
    +
    70  T angle);
    +
    71 
    +
    76  template <typename T, precision P>
    +
    77  GLM_FUNC_QUALIFIER tmat3x3<T, P> scale(
    +
    78  tmat3x3<T, P> const & m,
    +
    79  tvec2<T, P> const & v);
    80 
    -
    83  template <typename T, precision P>
    -
    84  detail::tmat4x4<T, P> rowMajor4(
    -
    85  detail::tvec4<T, P> const & v1,
    -
    86  detail::tvec4<T, P> const & v2,
    -
    87  detail::tvec4<T, P> const & v3,
    -
    88  detail::tvec4<T, P> const & v4);
    +
    85  template <typename T, precision P>
    +
    86  GLM_FUNC_QUALIFIER tmat3x3<T, P> shearX(
    +
    87  tmat3x3<T, P> const & m,
    +
    88  T y);
    89 
    -
    92  template <typename T, precision P>
    -
    93  detail::tmat4x4<T, P> rowMajor4(
    -
    94  detail::tmat4x4<T, P> const & m);
    -
    95 
    -
    98  template <typename T, precision P>
    -
    99  detail::tmat2x2<T, P> colMajor2(
    -
    100  detail::tvec2<T, P> const & v1,
    -
    101  detail::tvec2<T, P> const & v2);
    -
    102 
    -
    105  template <typename T, precision P>
    -
    106  detail::tmat2x2<T, P> colMajor2(
    -
    107  detail::tmat2x2<T, P> const & m);
    -
    108 
    -
    111  template <typename T, precision P>
    -
    112  detail::tmat3x3<T, P> colMajor3(
    -
    113  detail::tvec3<T, P> const & v1,
    -
    114  detail::tvec3<T, P> const & v2,
    -
    115  detail::tvec3<T, P> const & v3);
    -
    116 
    -
    119  template <typename T, precision P>
    -
    120  detail::tmat3x3<T, P> colMajor3(
    -
    121  detail::tmat3x3<T, P> const & m);
    -
    122 
    -
    125  template <typename T, precision P>
    -
    126  detail::tmat4x4<T, P> colMajor4(
    -
    127  detail::tvec4<T, P> const & v1,
    -
    128  detail::tvec4<T, P> const & v2,
    -
    129  detail::tvec4<T, P> const & v3,
    -
    130  detail::tvec4<T, P> const & v4);
    -
    131 
    -
    134  template <typename T, precision P>
    -
    135  detail::tmat4x4<T, P> colMajor4(
    -
    136  detail::tmat4x4<T, P> const & m);
    -
    137 
    -
    139 }//namespace glm
    -
    140 
    -
    141 #include "matrix_major_storage.inl"
    -
    142 
    -
    143 #endif//GLM_GTX_matrix_major_storage
    -
    detail::tmat4x4< T, P > rowMajor4(detail::tvec4< T, P > const &v1, detail::tvec4< T, P > const &v2, detail::tvec4< T, P > const &v3, detail::tvec4< T, P > const &v4)
    Build a row major matrix from row vectors.
    -
    detail::tmat2x2< T, P > rowMajor2(detail::tvec2< T, P > const &v1, detail::tvec2< T, P > const &v2)
    Build a row major matrix from row vectors.
    -
    detail::tmat3x3< T, P > rowMajor3(detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
    Build a row major matrix from row vectors.
    -
    detail::tmat2x2< T, P > colMajor2(detail::tvec2< T, P > const &v1, detail::tvec2< T, P > const &v2)
    Build a column major matrix from column vectors.
    -
    detail::tmat3x3< T, P > colMajor3(detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
    Build a column major matrix from column vectors.
    -
    detail::tmat4x4< T, P > colMajor4(detail::tvec4< T, P > const &v1, detail::tvec4< T, P > const &v2, detail::tvec4< T, P > const &v3, detail::tvec4< T, P > const &v4)
    Build a column major matrix from column vectors.
    +
    94  template <typename T, precision P>
    +
    95  GLM_FUNC_QUALIFIER tmat3x3<T, P> shearY(
    +
    96  tmat3x3<T, P> const & m,
    +
    97  T x);
    +
    98 
    +
    100 }//namespace glm
    +
    101 
    +
    102 #include "matrix_transform_2d.inl"
    +
    GLM_FUNC_QUALIFIER tmat3x3< T, P > translate(tmat3x3< T, P > const &m, tvec2< T, P > const &v)
    Builds a translation 3 * 3 matrix created from a vector of 2 components.
    +
    GLM_FUNC_QUALIFIER tmat3x3< T, P > rotate(tmat3x3< T, P > const &m, T angle)
    Builds a rotation 3 * 3 matrix created from an angle.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_QUALIFIER tmat3x3< T, P > scale(tmat3x3< T, P > const &m, tvec2< T, P > const &v)
    Builds a scale 3 * 3 matrix created from a vector of 2 components.
    +
    GLM_FUNC_QUALIFIER tmat3x3< T, P > shearX(tmat3x3< T, P > const &m, T y)
    Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_QUALIFIER tmat3x3< T, P > shearY(tmat3x3< T, P > const &m, T x)
    Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.
    diff --git a/doc/api/a00078.html b/doc/api/a00078.html index f8088e02..b8af7f9b 100644 --- a/doc/api/a00078.html +++ b/doc/api/a00078.html @@ -3,8 +3,8 @@ - -GLM: matrix_operation.hpp File Reference + +0.9.6: mixed_product.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,72 +41,43 @@
    -
    matrix_operation.hpp File Reference
    +
    mixed_product.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +

    Functions

    template<typename T , precision P>
    detail::tmat2x2< T, P > diagonal2x2 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat2x3< T, P > diagonal2x3 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat2x4< T, P > diagonal2x4 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat3x2< T, P > diagonal3x2 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > diagonal3x3 (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat3x4< T, P > diagonal3x4 (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x2< T, P > diagonal4x2 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x3< T, P > diagonal4x3 (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > diagonal4x4 (detail::tvec4< T, P > const &v)
     
    +template<typename T , precision P>
    GLM_FUNC_DECL T mixedProduct (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_operation

    -
    Date
    2009-08-29 / 2011-06-07
    +

    GLM_GTX_mixed_producte

    +
    Date
    2007-04-03 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file matrix_operation.hpp.

    +

    Definition in file mixed_product.hpp.

    diff --git a/doc/api/a00078_source.html b/doc/api/a00078_source.html index d39a15b4..819b75a2 100644 --- a/doc/api/a00078_source.html +++ b/doc/api/a00078_source.html @@ -3,8 +3,8 @@ - -GLM: matrix_operation.hpp Source File + +0.9.6: mixed_product.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,84 +41,44 @@
    -
    matrix_operation.hpp
    +
    mixed_product.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_matrix_operation
    -
    39 #define GLM_GTX_matrix_operation
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_matrix_operation extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename T, precision P>
    -
    56  detail::tmat2x2<T, P> diagonal2x2(
    -
    57  detail::tvec2<T, P> const & v);
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_mixed_product extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    53  template <typename T, precision P>
    +
    54  GLM_FUNC_DECL T mixedProduct(
    +
    55  tvec3<T, P> const & v1,
    +
    56  tvec3<T, P> const & v2,
    +
    57  tvec3<T, P> const & v3);
    58 
    -
    61  template <typename T, precision P>
    -
    62  detail::tmat2x3<T, P> diagonal2x3(
    -
    63  detail::tvec2<T, P> const & v);
    -
    64 
    -
    67  template <typename T, precision P>
    -
    68  detail::tmat2x4<T, P> diagonal2x4(
    -
    69  detail::tvec2<T, P> const & v);
    -
    70 
    -
    73  template <typename T, precision P>
    -
    74  detail::tmat3x2<T, P> diagonal3x2(
    -
    75  detail::tvec2<T, P> const & v);
    -
    76 
    -
    79  template <typename T, precision P>
    -
    80  detail::tmat3x3<T, P> diagonal3x3(
    -
    81  detail::tvec3<T, P> const & v);
    -
    82 
    -
    85  template <typename T, precision P>
    -
    86  detail::tmat3x4<T, P> diagonal3x4(
    -
    87  detail::tvec3<T, P> const & v);
    -
    88 
    -
    91  template <typename T, precision P>
    -
    92  detail::tmat4x2<T, P> diagonal4x2(
    -
    93  detail::tvec2<T, P> const & v);
    -
    94 
    -
    97  template <typename T, precision P>
    -
    98  detail::tmat4x3<T, P> diagonal4x3(
    -
    99  detail::tvec3<T, P> const & v);
    -
    100 
    -
    103  template <typename T, precision P>
    -
    104  detail::tmat4x4<T, P> diagonal4x4(
    -
    105  detail::tvec4<T, P> const & v);
    -
    106 
    -
    108 }//namespace glm
    -
    109 
    -
    110 #include "matrix_operation.inl"
    -
    111 
    -
    112 #endif//GLM_GTX_matrix_operation
    -
    detail::tmat4x3< T, P > diagonal4x3(detail::tvec3< T, P > const &v)
    Build a diagonal matrix.
    -
    detail::tmat2x3< T, P > diagonal2x3(detail::tvec2< T, P > const &v)
    Build a diagonal matrix.
    -
    detail::tmat3x4< T, P > diagonal3x4(detail::tvec3< T, P > const &v)
    Build a diagonal matrix.
    -
    detail::tmat3x2< T, P > diagonal3x2(detail::tvec2< T, P > const &v)
    Build a diagonal matrix.
    -
    detail::tmat4x4< T, P > diagonal4x4(detail::tvec4< T, P > const &v)
    Build a diagonal matrix.
    -
    detail::tmat3x3< T, P > diagonal3x3(detail::tvec3< T, P > const &v)
    Build a diagonal matrix.
    -
    detail::tmat2x4< T, P > diagonal2x4(detail::tvec2< T, P > const &v)
    Build a diagonal matrix.
    -
    detail::tmat4x2< T, P > diagonal4x2(detail::tvec2< T, P > const &v)
    Build a diagonal matrix.
    -
    detail::tmat2x2< T, P > diagonal2x2(detail::tvec2< T, P > const &v)
    Build a diagonal matrix.
    +
    60 }// namespace glm
    +
    61 
    +
    62 #include "mixed_product.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL T mixedProduct(tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)
    Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)
    diff --git a/doc/api/a00079.html b/doc/api/a00079.html index 3c8ad56b..4c27cdcc 100644 --- a/doc/api/a00079.html +++ b/doc/api/a00079.html @@ -3,8 +3,8 @@ - -GLM: matrix_query.hpp File Reference + +0.9.6: multiple.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,71 +41,57 @@
    -
    matrix_query.hpp File Reference
    +
    multiple.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +

    Functions

    template<typename T , precision P, template< typename, precision > class matType>
    bool isIdentity (matType< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNormalized (detail::tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNormalized (detail::tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNormalized (detail::tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNull (detail::tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNull (detail::tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNull (detail::tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class matType>
    bool isOrthogonal (matType< T, P > const &m, T const &epsilon)
     
    template<typename genType >
    GLM_DEPRECATED GLM_FUNC_DECL
    +genType 
    higherMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_DEPRECATED GLM_FUNC_DECL
    +vecType< T, P > 
    higherMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     
    template<typename genType >
    GLM_DEPRECATED GLM_FUNC_DECL
    +genType 
    lowerMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_DEPRECATED GLM_FUNC_DECL
    +vecType< T, P > 
    lowerMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_matrix_query

    -
    Date
    2007-03-05 / 2011-08-28
    +

    GLM_GTX_multiple

    +
    Date
    2009-10-26 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -GLM_GTX_vector_query (dependence)
    +GLM_GTX_extented_min_max (dependence)
    -

    Definition in file matrix_query.hpp.

    +

    Definition in file multiple.hpp.

    diff --git a/doc/api/a00079_source.html b/doc/api/a00079_source.html index c32d3575..73774273 100644 --- a/doc/api/a00079_source.html +++ b/doc/api/a00079_source.html @@ -3,8 +3,8 @@ - -GLM: matrix_query.hpp Source File + +0.9.6: multiple.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,70 +41,57 @@
    -
    matrix_query.hpp
    +
    multiple.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_matrix_query
    -
    40 #define GLM_GTX_matrix_query
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 #include "../gtx/vector_query.hpp"
    -
    45 #include <limits>
    -
    46 
    -
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    48 # pragma message("GLM: GLM_GTX_matrix_query extension included")
    -
    49 #endif
    -
    50 
    -
    51 namespace glm
    -
    52 {
    -
    55 
    -
    58  template<typename T, precision P>
    -
    59  bool isNull(detail::tmat2x2<T, P> const & m, T const & epsilon);
    -
    60 
    -
    63  template<typename T, precision P>
    -
    64  bool isNull(detail::tmat3x3<T, P> const & m, T const & epsilon);
    -
    65 
    -
    68  template<typename T, precision P>
    -
    69  bool isNull(detail::tmat4x4<T, P> const & m, T const & epsilon);
    -
    70 
    -
    73  template<typename T, precision P, template <typename, precision> class matType>
    -
    74  bool isIdentity(matType<T, P> const & m, T const & epsilon);
    -
    75 
    -
    78  template<typename T, precision P>
    -
    79  bool isNormalized(detail::tmat2x2<T, P> const & m, T const & epsilon);
    -
    80 
    -
    83  template<typename T, precision P>
    -
    84  bool isNormalized(detail::tmat3x3<T, P> const & m, T const & epsilon);
    -
    85 
    -
    88  template<typename T, precision P>
    -
    89  bool isNormalized(detail::tmat4x4<T, P> const & m, T const & epsilon);
    -
    90 
    -
    93  template<typename T, precision P, template <typename, precision> class matType>
    -
    94  bool isOrthogonal(matType<T, P> const & m, T const & epsilon);
    -
    95 
    -
    97 }//namespace glm
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../gtc/round.hpp"
    +
    43 
    +
    44 #pragma message("GLM: GLM_GTX_multiple extension is deprecated, use GLM_GTC_round instead.")
    +
    45 
    +
    46 namespace glm
    +
    47 {
    +
    50 
    +
    58  template <typename genType>
    +
    59  GLM_DEPRECATED GLM_FUNC_DECL genType higherMultiple(
    +
    60  genType Source,
    +
    61  genType Multiple);
    +
    62 
    +
    70  template <typename T, precision P, template <typename, precision> class vecType>
    +
    71  GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> higherMultiple(
    +
    72  vecType<T, P> const & Source,
    +
    73  vecType<T, P> const & Multiple);
    +
    74 
    +
    82  template <typename genType>
    +
    83  GLM_DEPRECATED GLM_FUNC_DECL genType lowerMultiple(
    +
    84  genType Source,
    +
    85  genType Multiple);
    +
    86 
    +
    94  template <typename T, precision P, template <typename, precision> class vecType>
    +
    95  GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> lowerMultiple(
    +
    96  vecType<T, P> const & Source,
    +
    97  vecType<T, P> const & Multiple);
    98 
    -
    99 #include "matrix_query.inl"
    -
    100 
    -
    101 #endif//GLM_GTX_matrix_query
    -
    GLM_FUNC_DECL genType epsilon()
    Return the epsilon constant for floating point types.
    -
    bool isOrthogonal(matType< T, P > const &m, T const &epsilon)
    Return whether a matrix is an orthonormalized matrix.
    -
    bool isNormalized(detail::tmat2x2< T, P > const &m, T const &epsilon)
    Return whether a matrix is a normalized matrix.
    -
    bool isNull(detail::tmat2x2< T, P > const &m, T const &epsilon)
    Return whether a matrix a null matrix.
    -
    bool isIdentity(matType< T, P > const &m, T const &epsilon)
    Return whether a matrix is an identity matrix.
    +
    100 }//namespace glm
    +
    101 
    +
    102 #include "multiple.inl"
    +
    GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > lowerMultiple(vecType< T, P > const &Source, vecType< T, P > const &Multiple)
    Lower multiple number of Source.
    +
    GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > higherMultiple(vecType< T, P > const &Source, vecType< T, P > const &Multiple)
    Higher multiple number of Source.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00080.html b/doc/api/a00080.html index eced8059..11c15fa3 100644 --- a/doc/api/a00080.html +++ b/doc/api/a00080.html @@ -3,8 +3,8 @@ - -GLM: matrix_transform.hpp File Reference + +0.9.6: noise.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,103 +41,48 @@
    -
    matrix_transform.hpp File Reference
    +
    noise.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + +

    Functions

    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    frustum (T const &left, T const &right, T const &bottom, T const &top, T const &near, T const &far)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    infinitePerspective (T fovy, T aspect, T near)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    lookAt (detail::tvec3< T, P > const &eye, detail::tvec3< T, P > const &center, detail::tvec3< T, P > const &up)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    ortho (T const &left, T const &right, T const &bottom, T const &top, T const &zNear, T const &zFar)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    ortho (T const &left, T const &right, T const &bottom, T const &top)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    perspective (T const &fovy, T const &aspect, T const &near, T const &far)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    perspectiveFov (T const &fov, T const &width, T const &height, T const &near, T const &far)
     
    template<typename T , precision P, typename U >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    pickMatrix (detail::tvec2< T, P > const &center, detail::tvec2< T, P > const &delta, detail::tvec4< U, P > const &viewport)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > project (detail::tvec3< T, P > const &obj, detail::tmat4x4< T, P > const &model, detail::tmat4x4< T, P > const &proj, detail::tvec4< U, P > const &viewport)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    rotate (detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    scale (detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    translate (detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    tweakedInfinitePerspective (T fovy, T aspect, T near)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > unProject (detail::tvec3< T, P > const &win, detail::tmat4x4< T, P > const &model, detail::tmat4x4< T, P > const &proj, detail::tvec4< U, P > const &viewport)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T perlin (vecType< T, P > const &p)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T perlin (vecType< T, P > const &p, vecType< T, P > const &rep)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T simplex (vecType< T, P > const &p)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_matrix_transform

    -
    Date
    2009-04-29 / 2011-05-16
    +

    GLM_GTC_noise

    +
    Date
    2011-04-21 / 2011-09-27
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_transform
    -
    -GLM_GTX_transform2
    +
    See also
    GLM Core (dependence)
    -

    Definition in file matrix_transform.hpp.

    +

    Definition in file noise.hpp.

    diff --git a/doc/api/a00080_source.html b/doc/api/a00080_source.html index f290beb0..bfcf0aa3 100644 --- a/doc/api/a00080_source.html +++ b/doc/api/a00080_source.html @@ -3,8 +3,8 @@ - -GLM: matrix_transform.hpp Source File + +0.9.6: noise.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,148 +41,53 @@
    -
    matrix_transform.hpp
    +
    noise.hpp
    Go to the documentation of this file.
    1 
    -
    46 #ifndef GLM_GTC_matrix_transform
    -
    47 #define GLM_GTC_matrix_transform
    -
    48 
    -
    49 // Dependency:
    -
    50 #include "../mat4x4.hpp"
    -
    51 #include "../vec2.hpp"
    -
    52 #include "../vec3.hpp"
    -
    53 #include "../vec4.hpp"
    -
    54 
    -
    55 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    56 # pragma message("GLM: GLM_GTC_matrix_transform extension included")
    -
    57 #endif
    -
    58 
    -
    59 namespace glm
    -
    60 {
    -
    63 
    -
    84  template <typename T, precision P>
    -
    85  GLM_FUNC_DECL detail::tmat4x4<T, P> translate(
    -
    86  detail::tmat4x4<T, P> const & m,
    -
    87  detail::tvec3<T, P> const & v);
    -
    88 
    -
    100  template <typename T, precision P>
    -
    101  GLM_FUNC_DECL detail::tmat4x4<T, P> rotate(
    -
    102  detail::tmat4x4<T, P> const & m,
    -
    103  T const & angle,
    -
    104  detail::tvec3<T, P> const & axis);
    -
    105 
    -
    116  template <typename T, precision P>
    -
    117  GLM_FUNC_DECL detail::tmat4x4<T, P> scale(
    -
    118  detail::tmat4x4<T, P> const & m,
    -
    119  detail::tvec3<T, P> const & v);
    -
    120 
    -
    132  template <typename T>
    -
    133  GLM_FUNC_DECL detail::tmat4x4<T, defaultp> ortho(
    -
    134  T const & left,
    -
    135  T const & right,
    -
    136  T const & bottom,
    -
    137  T const & top,
    -
    138  T const & zNear,
    -
    139  T const & zFar);
    -
    140 
    -
    150  template <typename T>
    -
    151  GLM_FUNC_DECL detail::tmat4x4<T, defaultp> ortho(
    -
    152  T const & left,
    -
    153  T const & right,
    -
    154  T const & bottom,
    -
    155  T const & top);
    -
    156 
    -
    167  template <typename T, precision P>
    -
    168  GLM_FUNC_DECL detail::tmat4x4<T, P> frustum(
    -
    169  T const & left,
    -
    170  T const & right,
    -
    171  T const & bottom,
    -
    172  T const & top,
    -
    173  T const & near,
    -
    174  T const & far);
    -
    175 
    -
    184  template <typename T, precision P>
    -
    185  GLM_FUNC_DECL detail::tmat4x4<T, P> perspective(
    -
    186  T const & fovy,
    -
    187  T const & aspect,
    -
    188  T const & near,
    -
    189  T const & far);
    -
    190 
    -
    200  template <typename T, precision P>
    -
    201  GLM_FUNC_DECL detail::tmat4x4<T, P> perspectiveFov(
    -
    202  T const & fov,
    -
    203  T const & width,
    -
    204  T const & height,
    -
    205  T const & near,
    -
    206  T const & far);
    -
    207 
    -
    215  template <typename T, precision P>
    -
    216  GLM_FUNC_DECL detail::tmat4x4<T, P> infinitePerspective(
    -
    217  T fovy, T aspect, T near);
    -
    218 
    -
    226  template <typename T, precision P>
    -
    227  GLM_FUNC_DECL detail::tmat4x4<T, P> tweakedInfinitePerspective(
    -
    228  T fovy, T aspect, T near);
    -
    229 
    -
    239  template <typename T, typename U, precision P>
    -
    240  GLM_FUNC_DECL detail::tvec3<T, P> project(
    -
    241  detail::tvec3<T, P> const & obj,
    -
    242  detail::tmat4x4<T, P> const & model,
    -
    243  detail::tmat4x4<T, P> const & proj,
    -
    244  detail::tvec4<U, P> const & viewport);
    -
    245 
    -
    255  template <typename T, typename U, precision P>
    -
    256  GLM_FUNC_DECL detail::tvec3<T, P> unProject(
    -
    257  detail::tvec3<T, P> const & win,
    -
    258  detail::tmat4x4<T, P> const & model,
    -
    259  detail::tmat4x4<T, P> const & proj,
    -
    260  detail::tvec4<U, P> const & viewport);
    -
    261 
    -
    270  template <typename T, precision P, typename U>
    -
    271  GLM_FUNC_DECL detail::tmat4x4<T, P> pickMatrix(
    -
    272  detail::tvec2<T, P> const & center,
    -
    273  detail::tvec2<T, P> const & delta,
    -
    274  detail::tvec4<U, P> const & viewport);
    -
    275 
    -
    283  template <typename T, precision P>
    -
    284  GLM_FUNC_DECL detail::tmat4x4<T, P> lookAt(
    -
    285  detail::tvec3<T, P> const & eye,
    -
    286  detail::tvec3<T, P> const & center,
    -
    287  detail::tvec3<T, P> const & up);
    -
    288 
    -
    290 }//namespace glm
    -
    291 
    -
    292 #include "matrix_transform.inl"
    -
    293 
    -
    294 #endif//GLM_GTC_matrix_transform
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > rotate(detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
    Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
    -
    vecType proj(vecType const &x, vecType const &Normal)
    Projects x on Normal.
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > scale(detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
    Builds a scale 4 * 4 matrix created from 3 scalars.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > tweakedInfinitePerspective(T fovy, T aspect, T near)
    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics har...
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > translate(detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
    Builds a translation 4 * 4 matrix created from a vector of 3 components.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > perspective(T const &fovy, T const &aspect, T const &near, T const &far)
    Creates a matrix for a symetric perspective-view frustum.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > pickMatrix(detail::tvec2< T, P > const &center, detail::tvec2< T, P > const &delta, detail::tvec4< U, P > const &viewport)
    Define a picking region.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > infinitePerspective(T fovy, T aspect, T near)
    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, defaultp > ortho(T const &left, T const &right, T const &bottom, T const &top, T const &zNear, T const &zFar)
    Creates a matrix for an orthographic parallel viewing volume.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > axis(detail::tquat< T, P > const &x)
    Returns the q rotation axis.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > unProject(detail::tvec3< T, P > const &win, detail::tmat4x4< T, P > const &model, detail::tmat4x4< T, P > const &proj, detail::tvec4< U, P > const &viewport)
    Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > perspectiveFov(T const &fov, T const &width, T const &height, T const &near, T const &far)
    Builds a perspective projection matrix based on a field of view.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > lookAt(detail::tvec3< T, P > const &eye, detail::tvec3< T, P > const &center, detail::tvec3< T, P > const &up)
    Build a look at view matrix.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > frustum(T const &left, T const &right, T const &bottom, T const &top, T const &near, T const &far)
    Creates a frustum matrix.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > project(detail::tvec3< T, P > const &obj, detail::tmat4x4< T, P > const &model, detail::tmat4x4< T, P > const &proj, detail::tvec4< U, P > const &viewport)
    Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
    +
    41 #pragma once
    +
    42 
    +
    43 // Dependencies
    +
    44 #include "../detail/setup.hpp"
    +
    45 #include "../detail/precision.hpp"
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    48 # pragma message("GLM: GLM_GTC_noise extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    +
    52 {
    +
    55 
    +
    58  template <typename T, precision P, template<typename, precision> class vecType>
    +
    59  GLM_FUNC_DECL T perlin(
    +
    60  vecType<T, P> const & p);
    +
    61 
    +
    64  template <typename T, precision P, template<typename, precision> class vecType>
    +
    65  GLM_FUNC_DECL T perlin(
    +
    66  vecType<T, P> const & p,
    +
    67  vecType<T, P> const & rep);
    +
    68 
    +
    71  template <typename T, precision P, template<typename, precision> class vecType>
    +
    72  GLM_FUNC_DECL T simplex(
    +
    73  vecType<T, P> const & p);
    +
    74 
    +
    76 }//namespace glm
    +
    77 
    +
    78 #include "noise.inl"
    +
    GLM_FUNC_DECL T simplex(vecType< T, P > const &p)
    Simplex noise.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL T perlin(vecType< T, P > const &p, vecType< T, P > const &rep)
    Periodic perlin noise.
    diff --git a/doc/api/a00081.html b/doc/api/a00081.html index af3aa450..73e8d628 100644 --- a/doc/api/a00081.html +++ b/doc/api/a00081.html @@ -3,8 +3,8 @@ - -GLM: mixed_product.hpp File Reference + +0.9.6: norm.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,49 +41,71 @@
    -
    mixed_product.hpp File Reference
    +
    norm.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    -template<typename T , precision P>
    mixedProduct (detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
     
    template<typename T >
    GLM_FUNC_DECL T distance2 (T const &p0, T const &p1)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type distance2 (genType const &p0, genType const &p1)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T l1Norm (tvec3< T, P > const &x, tvec3< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T l1Norm (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T l2Norm (tvec3< T, P > const &x, tvec3< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T l2Norm (tvec3< T, P > const &x)
     
    template<typename T >
    GLM_FUNC_DECL T length2 (T const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type length2 (genType const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T lxNorm (tvec3< T, P > const &x, tvec3< T, P > const &y, unsigned int Depth)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T lxNorm (tvec3< T, P > const &x, unsigned int Depth)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_mixed_producte

    -
    Date
    2007-04-03 / 2011-06-07
    +

    GLM_GTX_norm

    +
    Date
    2005-12-21 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_quaternion (dependence)
    -

    Definition in file mixed_product.hpp.

    +

    Definition in file norm.hpp.

    diff --git a/doc/api/a00081_source.html b/doc/api/a00081_source.html index 12b4f139..99fc8c7f 100644 --- a/doc/api/a00081_source.html +++ b/doc/api/a00081_source.html @@ -3,8 +3,8 @@ - -GLM: mixed_product.hpp Source File + +0.9.6: norm.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,46 +41,90 @@
    -
    mixed_product.hpp
    +
    norm.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_mixed_product
    -
    39 #define GLM_GTX_mixed_product
    -
    40 
    +
    39 #pragma once
    +
    40 
    41 // Dependency:
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_mixed_product extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    54  template <typename T, precision P>
    -
    55  T mixedProduct(
    -
    56  detail::tvec3<T, P> const & v1,
    -
    57  detail::tvec3<T, P> const & v2,
    -
    58  detail::tvec3<T, P> const & v3);
    +
    43 #include "../gtx/quaternion.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    46 # pragma message("GLM: GLM_GTX_norm extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename T>
    +
    57  GLM_FUNC_DECL T length2(
    +
    58  T const & x);
    59 
    -
    61 }// namespace glm
    -
    62 
    -
    63 #include "mixed_product.inl"
    -
    64 
    -
    65 #endif//GLM_GTX_mixed_product
    -
    T mixedProduct(detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
    Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)
    +
    62  template <typename genType>
    +
    63  GLM_FUNC_DECL typename genType::value_type length2(
    +
    64  genType const & x);
    +
    65 
    +
    68  template <typename T>
    +
    69  GLM_FUNC_DECL T distance2(
    +
    70  T const & p0,
    +
    71  T const & p1);
    +
    72 
    +
    75  template <typename genType>
    +
    76  GLM_FUNC_DECL typename genType::value_type distance2(
    +
    77  genType const & p0,
    +
    78  genType const & p1);
    +
    79 
    +
    82  template <typename T, precision P>
    +
    83  GLM_FUNC_DECL T l1Norm(
    +
    84  tvec3<T, P> const & x,
    +
    85  tvec3<T, P> const & y);
    +
    86 
    +
    89  template <typename T, precision P>
    +
    90  GLM_FUNC_DECL T l1Norm(
    +
    91  tvec3<T, P> const & v);
    +
    92 
    +
    95  template <typename T, precision P>
    +
    96  GLM_FUNC_DECL T l2Norm(
    +
    97  tvec3<T, P> const & x,
    +
    98  tvec3<T, P> const & y);
    +
    99 
    +
    102  template <typename T, precision P>
    +
    103  GLM_FUNC_DECL T l2Norm(
    +
    104  tvec3<T, P> const & x);
    +
    105 
    +
    108  template <typename T, precision P>
    +
    109  GLM_FUNC_DECL T lxNorm(
    +
    110  tvec3<T, P> const & x,
    +
    111  tvec3<T, P> const & y,
    +
    112  unsigned int Depth);
    +
    113 
    +
    116  template <typename T, precision P>
    +
    117  GLM_FUNC_DECL T lxNorm(
    +
    118  tvec3<T, P> const & x,
    +
    119  unsigned int Depth);
    +
    120 
    +
    122 }//namespace glm
    +
    123 
    +
    124 #include "norm.inl"
    +
    GLM_FUNC_DECL genType::value_type distance2(genType const &p0, genType const &p1)
    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).
    +
    GLM_FUNC_DECL genType::value_type length2(genType const &x)
    Returns the squared length of x.
    +
    GLM_FUNC_DECL T lxNorm(tvec3< T, P > const &x, unsigned int Depth)
    Returns the L norm of v.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL T l1Norm(tvec3< T, P > const &v)
    Returns the L1 norm of v.
    +
    GLM_FUNC_DECL T l2Norm(tvec3< T, P > const &x)
    Returns the L2 norm of v.
    diff --git a/doc/api/a00082.html b/doc/api/a00082.html index 3c2889b3..28d83bf0 100644 --- a/doc/api/a00082.html +++ b/doc/api/a00082.html @@ -3,8 +3,8 @@ - -GLM: multiple.hpp File Reference + +0.9.6: normal.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,53 +41,44 @@
    -
    multiple.hpp File Reference
    +
    normal.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - + + +

    Functions

    template<typename genType >
    genType higherMultiple (genType const &Source, genType const &Multiple)
     
    template<typename genType >
    genType lowerMultiple (genType const &Source, genType const &Multiple)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > triangleNormal (tvec3< T, P > const &p1, tvec3< T, P > const &p2, tvec3< T, P > const &p3)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_multiple

    -
    Date
    2009-10-26 / 2011-06-07
    +

    GLM_GTX_normal

    +
    Date
    2005-12-21 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max (dependence)
    +GLM_GTX_extented_min_max (dependence)
    -

    Definition in file multiple.hpp.

    +

    Definition in file normal.hpp.

    diff --git a/doc/api/a00082_source.html b/doc/api/a00082_source.html index b8639ee5..ab4ae800 100644 --- a/doc/api/a00082_source.html +++ b/doc/api/a00082_source.html @@ -3,8 +3,8 @@ - -GLM: multiple.hpp Source File + +0.9.6: normal.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,51 +41,44 @@
    -
    multiple.hpp
    +
    normal.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_multiple
    -
    40 #define GLM_GTX_multiple
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_multiple extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    61  template <typename genType>
    -
    62  genType higherMultiple(
    -
    63  genType const & Source,
    -
    64  genType const & Multiple);
    -
    65 
    -
    73  template <typename genType>
    -
    74  genType lowerMultiple(
    -
    75  genType const & Source,
    -
    76  genType const & Multiple);
    -
    77 
    -
    79 }//namespace glm
    -
    80 
    -
    81 #include "multiple.inl"
    -
    82 
    -
    83 #endif//GLM_GTX_multiple
    -
    genType lowerMultiple(genType const &Source, genType const &Multiple)
    Lower multiple number of Source.
    -
    genType higherMultiple(genType const &Source, genType const &Multiple)
    Higher multiple number of Source.
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_normal extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T, precision P>
    +
    56  GLM_FUNC_DECL tvec3<T, P> triangleNormal(
    +
    57  tvec3<T, P> const & p1,
    +
    58  tvec3<T, P> const & p2,
    +
    59  tvec3<T, P> const & p3);
    +
    60 
    +
    62 }//namespace glm
    +
    63 
    +
    64 #include "normal.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tvec3< T, P > triangleNormal(tvec3< T, P > const &p1, tvec3< T, P > const &p2, tvec3< T, P > const &p3)
    Computes triangle normal from triangle points.
    diff --git a/doc/api/a00083.html b/doc/api/a00083.html index b9501bb0..a892af6d 100644 --- a/doc/api/a00083.html +++ b/doc/api/a00083.html @@ -3,8 +3,8 @@ - -GLM: noise.hpp File Reference + +0.9.6: normalize_dot.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,54 +41,47 @@
    -
    gtc/noise.hpp File Reference
    +
    normalize_dot.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - + + + + + +

    Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    perlin (vecType< T, P > const &p)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    perlin (vecType< T, P > const &p, vecType< T, P > const &rep)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    simplex (vecType< T, P > const &p)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type fastNormalizeDot (genType const &x, genType const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type normalizeDot (genType const &x, genType const &y)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_noise

    -
    Date
    2011-04-21 / 2011-09-27
    +

    GLM_GTX_normalize_dot

    +
    Date
    2007-09-28 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_fast_square_root (dependence)
    -

    Definition in file gtc/noise.hpp.

    +

    Definition in file normalize_dot.hpp.

    diff --git a/doc/api/a00083_source.html b/doc/api/a00083_source.html index d819247f..3cb5a0c8 100644 --- a/doc/api/a00083_source.html +++ b/doc/api/a00083_source.html @@ -3,8 +3,8 @@ - -GLM: noise.hpp Source File + +0.9.6: normalize_dot.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,55 +41,50 @@
    -
    gtc/noise.hpp
    +
    normalize_dot.hpp
    Go to the documentation of this file.
    1 
    -
    41 #ifndef GLM_GTC_noise
    -
    42 #define GLM_GTC_noise
    -
    43 
    -
    44 // Dependencies
    -
    45 #include "../detail/setup.hpp"
    -
    46 #include "../detail/precision.hpp"
    -
    47 
    -
    48 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    49 # pragma message("GLM: GLM_GTC_noise extension included")
    -
    50 #endif
    -
    51 
    -
    52 namespace glm
    -
    53 {
    -
    56 
    -
    59  template <typename T, precision P, template<typename, precision> class vecType>
    -
    60  T perlin(
    -
    61  vecType<T, P> const & p);
    -
    62 
    -
    65  template <typename T, precision P, template<typename, precision> class vecType>
    -
    66  T perlin(
    -
    67  vecType<T, P> const & p,
    -
    68  vecType<T, P> const & rep);
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include "../gtx/fast_square_root.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    46 # pragma message("GLM: GLM_GTX_normalize_dot extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    57  template <typename genType>
    +
    58  GLM_FUNC_DECL typename genType::value_type normalizeDot(
    +
    59  genType const & x,
    +
    60  genType const & y);
    +
    61 
    +
    65  template <typename genType>
    +
    66  GLM_FUNC_DECL typename genType::value_type fastNormalizeDot(
    +
    67  genType const & x,
    +
    68  genType const & y);
    69 
    -
    72  template <typename T, precision P, template<typename, precision> class vecType>
    -
    73  T simplex(
    -
    74  vecType<T, P> const & p);
    -
    75 
    -
    77 }//namespace glm
    -
    78 
    -
    79 #include "noise.inl"
    -
    80 
    -
    81 #endif//GLM_GTC_noise
    -
    T simplex(vecType< T, P > const &p)
    Simplex noise.
    -
    T perlin(vecType< T, P > const &p)
    Classic perlin noise.
    +
    71 }//namespace glm
    +
    72 
    +
    73 #include "normalize_dot.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType::value_type normalizeDot(genType const &x, genType const &y)
    Normalize parameters and returns the dot product of x and y.
    +
    GLM_FUNC_DECL genType::value_type fastNormalizeDot(genType const &x, genType const &y)
    Normalize parameters and returns the dot product of x and y.
    diff --git a/doc/api/a00084.html b/doc/api/a00084.html new file mode 100644 index 00000000..a04c8093 --- /dev/null +++ b/doc/api/a00084.html @@ -0,0 +1,113 @@ + + + + + + +0.9.6: number_precision.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    number_precision.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +typedef f32 f32mat1
     
    +typedef f32 f32mat1x1
     
    +typedef f32 f32vec1
     
    +typedef f64 f64mat1
     
    +typedef f64 f64mat1x1
     
    +typedef f64 f64vec1
     
    +typedef u16 u16vec1
     
    +typedef u32 u32vec1
     
    +typedef u64 u64vec1
     
    +typedef u8 u8vec1
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_number_precision

    +
    Date
    2007-05-10 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTC_type_precision (dependence)
    +
    +GLM_GTC_quaternion (dependence)
    + +

    Definition in file number_precision.hpp.

    +
    + + + + diff --git a/doc/api/a00084_source.html b/doc/api/a00084_source.html index df2858f0..6e520352 100644 --- a/doc/api/a00084_source.html +++ b/doc/api/a00084_source.html @@ -3,8 +3,8 @@ - -GLM: noise.hpp Source File + +0.9.6: number_precision.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,75 @@
    -
    gtx/noise.hpp
    +
    number_precision.hpp
    -
    1 
    -
    24 #if(defined(GLM_MESSAGES))
    -
    25 # pragma message("GLM: GLM_GTX_random extension is deprecated, include GLM_GTC_random (glm/gtc/noise.hpp) instead")
    -
    26 #endif
    -
    27 
    -
    28 // Promoted:
    -
    29 #include "../gtc/noise.hpp"
    +Go to the documentation of this file.
    1 
    +
    40 #pragma once
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/type_precision.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    47 # pragma message("GLM: GLM_GTX_number_precision extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm{
    +
    51 namespace gtx
    +
    52 {
    +
    54  // Unsigned int vector types
    +
    55 
    +
    58 
    +
    59  typedef u8 u8vec1;
    +
    60  typedef u16 u16vec1;
    +
    61  typedef u32 u32vec1;
    +
    62  typedef u64 u64vec1;
    +
    63 
    +
    65  // Float vector types
    +
    66 
    +
    67  typedef f32 f32vec1;
    +
    68  typedef f64 f64vec1;
    +
    69 
    +
    71  // Float matrix types
    +
    72 
    +
    73  typedef f32 f32mat1;
    +
    74  typedef f32 f32mat1x1;
    +
    75  typedef f64 f64mat1;
    +
    76  typedef f64 f64mat1x1;
    +
    77 
    +
    79 }//namespace gtx
    +
    80 }//namespace glm
    +
    81 
    +
    82 #include "number_precision.inl"
    +
    detail::uint64 u64
    64 bit unsigned integer type.
    Definition: fwd.hpp:934
    +
    detail::uint32 u32
    32 bit unsigned integer type.
    Definition: fwd.hpp:930
    +
    detail::uint16 u16
    16 bit unsigned integer type.
    Definition: fwd.hpp:926
    +
    highp_float64_t f64
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1537
    +
    u16 u16vec1
    16bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
    +
    detail::uint8 u8
    8 bit unsigned integer type.
    Definition: fwd.hpp:922
    +
    u8 u8vec1
    8bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
    +
    Definition: _noise.hpp:31
    +
    u64 u64vec1
    64bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
    +
    f32 f32mat1x1
    Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    +
    u32 u32vec1
    32bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
    +
    f32 f32mat1
    Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    +
    f32 f32vec1
    Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    +
    f64 f64mat1
    Double-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    +
    f64 f64vec1
    Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    +
    f64 f64mat1x1
    Double-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    +
    highp_float32_t f32
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1533
    diff --git a/doc/api/a00085.html b/doc/api/a00085.html index b0938931..372740b6 100644 --- a/doc/api/a00085.html +++ b/doc/api/a00085.html @@ -3,8 +3,8 @@ - -GLM: norm.hpp File Reference + +0.9.6: optimum_pow.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,77 +41,59 @@
    -
    norm.hpp File Reference
    +
    optimum_pow.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    distance2 (T const &p0, T const &p1)
     
    template<typename genType >
    genType::value_type distance2 (genType const &p0, genType const &p1)
     
    template<typename T , precision P>
    l1Norm (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
     
    template<typename T , precision P>
    l1Norm (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    l2Norm (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
     
    template<typename T , precision P>
    l2Norm (detail::tvec3< T, P > const &x)
     
    template<typename T >
    length2 (T const &x)
     
    template<typename genType >
    genType::value_type length2 (genType const &x)
     
    template<typename T , precision P>
    lxNorm (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y, unsigned int Depth)
     
    template<typename T , precision P>
    lxNorm (detail::tvec3< T, P > const &x, unsigned int Depth)
     
    template<typename genType >
    GLM_FUNC_DECL genType pow2 (const genType &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType pow3 (const genType &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType pow4 (const genType &x)
     
    GLM_FUNC_DECL bool powOfTwo (int num)
     
    template<precision P>
    GLM_FUNC_DECL tvec2< bool, P > powOfTwo (tvec2< int, P > const &x)
     
    template<precision P>
    GLM_FUNC_DECL tvec3< bool, P > powOfTwo (tvec3< int, P > const &x)
     
    template<precision P>
    GLM_FUNC_DECL tvec4< bool, P > powOfTwo (tvec4< int, P > const &x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_norm

    +

    GLM_GTX_optimum_pow

    Date
    2005-12-21 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_quaternion (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file norm.hpp.

    +

    Definition in file optimum_pow.hpp.

    diff --git a/doc/api/a00085_source.html b/doc/api/a00085_source.html index d339c0c7..56d9eda7 100644 --- a/doc/api/a00085_source.html +++ b/doc/api/a00085_source.html @@ -3,8 +3,8 @@ - -GLM: norm.hpp Source File + +0.9.6: optimum_pow.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,92 +41,63 @@
    -
    norm.hpp
    +
    optimum_pow.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_norm
    -
    40 #define GLM_GTX_norm
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 #include "../gtx/quaternion.hpp"
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_norm extension included")
    -
    48 #endif
    -
    49 
    -
    50 namespace glm
    -
    51 {
    -
    54 
    -
    57  template <typename T>
    -
    58  T length2(
    -
    59  T const & x);
    -
    60 
    -
    63  template <typename genType>
    -
    64  typename genType::value_type length2(
    -
    65  genType const & x);
    -
    66 
    -
    69  template <typename T>
    -
    70  T distance2(
    -
    71  T const & p0,
    -
    72  T const & p1);
    -
    73 
    -
    76  template <typename genType>
    -
    77  typename genType::value_type distance2(
    -
    78  genType const & p0,
    -
    79  genType const & p1);
    -
    80 
    -
    83  template <typename T, precision P>
    -
    84  T l1Norm(
    -
    85  detail::tvec3<T, P> const & x,
    -
    86  detail::tvec3<T, P> const & y);
    -
    87 
    -
    90  template <typename T, precision P>
    -
    91  T l1Norm(
    -
    92  detail::tvec3<T, P> const & v);
    -
    93 
    -
    96  template <typename T, precision P>
    -
    97  T l2Norm(
    -
    98  detail::tvec3<T, P> const & x,
    -
    99  detail::tvec3<T, P> const & y);
    -
    100 
    -
    103  template <typename T, precision P>
    -
    104  T l2Norm(
    -
    105  detail::tvec3<T, P> const & x);
    -
    106 
    -
    109  template <typename T, precision P>
    -
    110  T lxNorm(
    -
    111  detail::tvec3<T, P> const & x,
    -
    112  detail::tvec3<T, P> const & y,
    -
    113  unsigned int Depth);
    -
    114 
    -
    117  template <typename T, precision P>
    -
    118  T lxNorm(
    -
    119  detail::tvec3<T, P> const & x,
    -
    120  unsigned int Depth);
    -
    121 
    -
    123 }//namespace glm
    -
    124 
    -
    125 #include "norm.inl"
    -
    126 
    -
    127 #endif//GLM_GTX_norm
    -
    T distance2(T const &p0, T const &p1)
    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).
    -
    T l1Norm(detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
    Returns the L1 norm between x and y.
    -
    T l2Norm(detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
    Returns the L2 norm between x and y.
    -
    T length2(T const &x)
    Returns the squared length of x.
    -
    T lxNorm(detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y, unsigned int Depth)
    Returns the L norm between x and y.
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_optimum_pow extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm{
    +
    48 namespace gtx
    +
    49 {
    +
    52 
    +
    55  template <typename genType>
    +
    56  GLM_FUNC_DECL genType pow2(const genType& x);
    +
    57 
    +
    60  template <typename genType>
    +
    61  GLM_FUNC_DECL genType pow3(const genType& x);
    +
    62 
    +
    65  template <typename genType>
    +
    66  GLM_FUNC_DECL genType pow4(const genType& x);
    +
    67 
    +
    70  GLM_FUNC_DECL bool powOfTwo(int num);
    +
    71 
    +
    74  template <precision P>
    +
    75  GLM_FUNC_DECL tvec2<bool, P> powOfTwo(tvec2<int, P> const & x);
    +
    76 
    +
    79  template <precision P>
    +
    80  GLM_FUNC_DECL tvec3<bool, P> powOfTwo(tvec3<int, P> const & x);
    +
    81 
    +
    84  template <precision P>
    +
    85  GLM_FUNC_DECL tvec4<bool, P> powOfTwo(tvec4<int, P> const & x);
    +
    86 
    +
    88 }//namespace gtx
    +
    89 }//namespace glm
    +
    90 
    +
    91 #include "optimum_pow.inl"
    +
    GLM_FUNC_DECL genType pow3(const genType &x)
    Returns x raised to the power of 3.
    +
    GLM_FUNC_DECL genType pow4(const genType &x)
    Returns x raised to the power of 4.
    +
    GLM_FUNC_DECL tvec4< bool, P > powOfTwo(tvec4< int, P > const &x)
    Checks to determine if the parameter component are power of 2 numbers.
    +
    GLM_FUNC_DECL genType pow2(const genType &x)
    Returns x raised to the power of 2.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00086.html b/doc/api/a00086.html index 7c149730..a1990be3 100644 --- a/doc/api/a00086.html +++ b/doc/api/a00086.html @@ -3,8 +3,8 @@ - -GLM: normal.hpp File Reference + +0.9.6: orthonormalize.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,50 +41,47 @@
    -
    normal.hpp File Reference
    +
    orthonormalize.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - + + + + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > triangleNormal (detail::tvec3< T, P > const &p1, detail::tvec3< T, P > const &p2, detail::tvec3< T, P > const &p3)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > orthonormalize (const tmat3x3< T, P > &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > orthonormalize (const tvec3< T, P > &x, const tvec3< T, P > &y)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_normal

    +

    GLM_GTX_orthonormalize

    Date
    2005-12-21 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max (dependence)
    +GLM_GTX_extented_min_max (dependence)
    -

    Definition in file normal.hpp.

    +

    Definition in file orthonormalize.hpp.

    diff --git a/doc/api/a00086_source.html b/doc/api/a00086_source.html index 7d39e47b..b72f78fe 100644 --- a/doc/api/a00086_source.html +++ b/doc/api/a00086_source.html @@ -3,8 +3,8 @@ - -GLM: normal.hpp Source File + +0.9.6: orthonormalize.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,46 +41,47 @@
    -
    normal.hpp
    +
    orthonormalize.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_normal
    -
    40 #define GLM_GTX_normal
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_normal extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    56  template <typename T, precision P>
    -
    57  detail::tvec3<T, P> triangleNormal(
    -
    58  detail::tvec3<T, P> const & p1,
    -
    59  detail::tvec3<T, P> const & p2,
    -
    60  detail::tvec3<T, P> const & p3);
    -
    61 
    -
    63 }//namespace glm
    -
    64 
    -
    65 #include "normal.inl"
    -
    66 
    -
    67 #endif//GLM_GTX_normal
    -
    detail::tvec3< T, P > triangleNormal(detail::tvec3< T, P > const &p1, detail::tvec3< T, P > const &p2, detail::tvec3< T, P > const &p3)
    Computes triangle normal from triangle points.
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_orthonormalize extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename T, precision P>
    +
    56  GLM_FUNC_DECL tmat3x3<T, P> orthonormalize(
    +
    57  const tmat3x3<T, P>& m);
    +
    58 
    +
    61  template <typename T, precision P>
    +
    62  GLM_FUNC_DECL tvec3<T, P> orthonormalize(
    +
    63  const tvec3<T, P>& x,
    +
    64  const tvec3<T, P>& y);
    +
    65 
    +
    67 }//namespace glm
    +
    68 
    +
    69 #include "orthonormalize.inl"
    +
    GLM_FUNC_DECL tvec3< T, P > orthonormalize(const tvec3< T, P > &x, const tvec3< T, P > &y)
    Orthonormalizes x according y.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00087.html b/doc/api/a00087.html index b9030f1f..6d05a3ab 100644 --- a/doc/api/a00087.html +++ b/doc/api/a00087.html @@ -3,8 +3,8 @@ - -GLM: normalize_dot.hpp File Reference + +0.9.6: packing.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,53 +41,99 @@
    -
    normalize_dot.hpp File Reference
    +
    gtc/packing.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    genType::value_type fastNormalizeDot (genType const &x, genType const &y)
     
    template<typename genType >
    genType::value_type normalizeDot (genType const &x, genType const &y)
     
    GLM_FUNC_DECL uint32 packF2x11_1x10 (vec3 const &v)
     
    GLM_FUNC_DECL uint16 packHalf1x16 (float v)
     
    GLM_FUNC_DECL uint64 packHalf4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packI3x10_1x2 (ivec4 const &v)
     
    GLM_FUNC_DECL uint16 packSnorm1x16 (float v)
     
    GLM_FUNC_DECL uint8 packSnorm1x8 (float s)
     
    GLM_FUNC_DECL uint16 packSnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packSnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packSnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packU3x10_1x2 (uvec4 const &v)
     
    GLM_FUNC_DECL uint16 packUnorm1x16 (float v)
     
    GLM_FUNC_DECL uint8 packUnorm1x8 (float v)
     
    GLM_FUNC_DECL uint16 packUnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packUnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packUnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL vec3 unpackF2x11_1x10 (uint32 p)
     
    GLM_FUNC_DECL float unpackHalf1x16 (uint16 v)
     
    GLM_FUNC_DECL vec4 unpackHalf4x16 (uint64 p)
     
    GLM_FUNC_DECL ivec4 unpackI3x10_1x2 (uint32 p)
     
    GLM_FUNC_DECL float unpackSnorm1x16 (uint16 p)
     
    GLM_FUNC_DECL float unpackSnorm1x8 (uint8 p)
     
    GLM_FUNC_DECL vec2 unpackSnorm2x8 (uint16 p)
     
    GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2 (uint32 p)
     
    GLM_FUNC_DECL vec4 unpackSnorm4x16 (uint64 const &p)
     
    GLM_FUNC_DECL uvec4 unpackU3x10_1x2 (uint32 p)
     
    GLM_FUNC_DECL float unpackUnorm1x16 (uint16 p)
     
    GLM_FUNC_DECL float unpackUnorm1x8 (uint8 p)
     
    GLM_FUNC_DECL vec2 unpackUnorm2x8 (uint16 p)
     
    GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2 (uint32 p)
     
    GLM_FUNC_DECL vec4 unpackUnorm4x16 (uint64 p)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_normalize_dot

    -
    Date
    2007-09-28 / 2011-06-07
    +

    GLM_GTC_packing

    +
    Date
    2013-08-08 / 2013-08-08
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_fast_square_root (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file normalize_dot.hpp.

    +

    Definition in file gtc/packing.hpp.

    diff --git a/doc/api/a00087_source.html b/doc/api/a00087_source.html index cad118a4..28505795 100644 --- a/doc/api/a00087_source.html +++ b/doc/api/a00087_source.html @@ -3,8 +3,8 @@ - -GLM: normalize_dot.hpp Source File + +0.9.6: packing.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,52 +41,133 @@
    -
    normalize_dot.hpp
    +
    gtc/packing.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_normalize_dot
    -
    40 #define GLM_GTX_normalize_dot
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 #include "../gtx/fast_square_root.hpp"
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_normalize_dot extension included")
    -
    48 #endif
    -
    49 
    -
    50 namespace glm
    -
    51 {
    -
    54 
    -
    58  template <typename genType>
    -
    59  typename genType::value_type normalizeDot(
    -
    60  genType const & x,
    -
    61  genType const & y);
    -
    62 
    -
    66  template <typename genType>
    -
    67  typename genType::value_type fastNormalizeDot(
    -
    68  genType const & x,
    -
    69  genType const & y);
    -
    70 
    -
    72 }//namespace glm
    -
    73 
    -
    74 #include "normalize_dot.inl"
    -
    75 
    -
    76 #endif//GLM_GTX_normalize_dot
    -
    genType::value_type fastNormalizeDot(genType const &x, genType const &y)
    Normalize parameters and returns the dot product of x and y.
    -
    genType::value_type normalizeDot(genType const &x, genType const &y)
    Normalize parameters and returns the dot product of x and y.
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "type_precision.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTC_packing extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    64  GLM_FUNC_DECL uint8 packUnorm1x8(float v);
    +
    65 
    +
    76  GLM_FUNC_DECL float unpackUnorm1x8(uint8 p);
    +
    77 
    +
    92  GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const & v);
    +
    93 
    +
    108  GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p);
    +
    109 
    +
    121  GLM_FUNC_DECL uint8 packSnorm1x8(float s);
    +
    122 
    +
    134  GLM_FUNC_DECL float unpackSnorm1x8(uint8 p);
    +
    135 
    +
    150  GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const & v);
    +
    151 
    +
    166  GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p);
    +
    167 
    +
    179  GLM_FUNC_DECL uint16 packUnorm1x16(float v);
    +
    180 
    +
    192  GLM_FUNC_DECL float unpackUnorm1x16(uint16 p);
    +
    193 
    +
    208  GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const & v);
    +
    209 
    +
    224  GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p);
    +
    225 
    +
    237  GLM_FUNC_DECL uint16 packSnorm1x16(float v);
    +
    238 
    +
    250  GLM_FUNC_DECL float unpackSnorm1x16(uint16 p);
    +
    251 
    +
    266  GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const & v);
    +
    267 
    +
    282  GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 const & p);
    +
    283 
    +
    293  GLM_FUNC_DECL uint16 packHalf1x16(float v);
    +
    294 
    +
    304  GLM_FUNC_DECL float unpackHalf1x16(uint16 v);
    +
    305 
    +
    317  GLM_FUNC_DECL uint64 packHalf4x16(vec4 const & v);
    +
    318 
    +
    330  GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p);
    +
    331 
    +
    343  GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const & v);
    +
    344 
    +
    354  GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p);
    +
    355 
    +
    367  GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const & v);
    +
    368 
    +
    378  GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p);
    +
    379 
    +
    396  GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const & v);
    +
    397 
    +
    413  GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p);
    +
    414 
    +
    431  GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const & v);
    +
    432 
    +
    448  GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p);
    +
    449 
    +
    459  GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const & v);
    +
    460 
    +
    469  GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p);
    +
    470 
    +
    472 }// namespace glm
    +
    473 
    +
    474 #include "packing.inl"
    +
    GLM_FUNC_DECL float unpackHalf1x16(uint16 v)
    Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into ...
    +
    GLM_FUNC_DECL uint8 packSnorm1x8(float s)
    First, converts the normalized floating-point value v into 8-bit integer value.
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 const &p)
    First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.
    +
    GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p)
    First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.
    +
    GLM_FUNC_DECL uint16 packSnorm1x16(float v)
    First, converts the normalized floating-point value v into 16-bit integer value.
    +
    GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const &v)
    Returns an unsigned integer obtained by converting the components of a four-component signed integer ...
    +
    GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const &v)
    Returns an unsigned integer obtained by converting the components of a four-component unsigned intege...
    +
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    +
    GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p)
    First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
    +
    GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p)
    Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigne...
    +
    GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p)
    First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.
    +
    highp_uvec4 uvec4
    4 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:482
    +
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    +
    GLM_FUNC_DECL float unpackUnorm1x8(uint8 p)
    Convert a single 8-bit integer to a normalized floating-point value.
    +
    GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const &v)
    First, converts each component of the normalized floating-point value v into 16-bit integer values...
    +
    GLM_FUNC_DECL float unpackSnorm1x16(uint16 p)
    First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.
    +
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    +
    GLM_FUNC_DECL uint16 packUnorm1x16(float v)
    First, converts the normalized floating-point value v into a 16-bit integer value.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p)
    First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
    +
    GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p)
    First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.
    +
    GLM_FUNC_DECL uint16 packHalf1x16(float v)
    Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 1...
    +
    GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const &v)
    First, converts the first three components of the normalized floating-point value v into 10-bit unsig...
    +
    GLM_FUNC_DECL float unpackUnorm1x16(uint16 p)
    First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.
    +
    GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const &v)
    First, converts the first two components of the normalized floating-point value v into 11-bit signles...
    +
    GLM_FUNC_DECL uint64 packHalf4x16(vec4 const &v)
    Returns an unsigned integer obtained by converting the components of a four-component floating-point ...
    +
    GLM_FUNC_DECL float unpackSnorm1x8(uint8 p)
    First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.
    +
    GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const &v)
    First, converts each component of the normalized floating-point value v into 8-bit integer values...
    +
    GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p)
    Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers...
    +
    GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p)
    Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers...
    +
    GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const &v)
    First, converts the first three components of the normalized floating-point value v into 10-bit signe...
    +
    GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const &v)
    First, converts each component of the normalized floating-point value v into 8-bit integer values...
    +
    GLM_FUNC_DECL uint8 packUnorm1x8(float v)
    First, converts the normalized floating-point value v into a 8-bit integer value. ...
    +
    highp_ivec4 ivec4
    4 components vector of signed integer numbers.
    Definition: type_vec.hpp:454
    +
    GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p)
    First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...
    +
    GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const &v)
    First, converts each component of the normalized floating-point value v into 16-bit integer values...
    diff --git a/doc/api/a00088.html b/doc/api/a00088.html index 92cb8634..9518b77c 100644 --- a/doc/api/a00088.html +++ b/doc/api/a00088.html @@ -3,8 +3,8 @@ - -GLM: number_precision.hpp File Reference + +0.9.6: packing.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,79 +41,32 @@
    -
    -
    number_precision.hpp File Reference
    +
    packing.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    -typedef f32 f32mat1
     
    -typedef f32 f32mat1x1
     
    -typedef f32 f32vec1
     
    -typedef f64 f64mat1
     
    -typedef f64 f64mat1x1
     
    -typedef f64 f64vec1
     
    -typedef u16 u16vec1
     
    -typedef u32 u32vec1
     
    -typedef u64 u64vec1
     
    -typedef u8 u8vec1
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_number_precision

    -
    Date
    2007-05-10 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTC_type_precision (dependence)
    -
    -GLM_GTC_quaternion (dependence)
    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    -

    Definition in file number_precision.hpp.

    +

    Definition in file packing.hpp.

    diff --git a/doc/api/a00088_source.html b/doc/api/a00088_source.html index 0d344c67..497e07b8 100644 --- a/doc/api/a00088_source.html +++ b/doc/api/a00088_source.html @@ -3,8 +3,8 @@ - -GLM: number_precision.hpp Source File + +0.9.6: packing.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,77 +41,25 @@
    -
    number_precision.hpp
    +
    packing.hpp
    Go to the documentation of this file.
    1 
    -
    40 #ifndef GLM_GTX_number_precision
    -
    41 #define GLM_GTX_number_precision
    -
    42 
    -
    43 // Dependency:
    -
    44 #include "../glm.hpp"
    -
    45 #include "../gtc/type_precision.hpp"
    -
    46 
    -
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    48 # pragma message("GLM: GLM_GTX_number_precision extension included")
    -
    49 #endif
    -
    50 
    -
    51 namespace glm{
    -
    52 namespace gtx
    -
    53 {
    -
    55  // Unsigned int vector types
    -
    56 
    -
    59 
    -
    60  typedef u8 u8vec1;
    -
    61  typedef u16 u16vec1;
    -
    62  typedef u32 u32vec1;
    -
    63  typedef u64 u64vec1;
    -
    64 
    -
    66  // Float vector types
    -
    67 
    -
    68  typedef f32 f32vec1;
    -
    69  typedef f64 f64vec1;
    -
    70 
    -
    72  // Float matrix types
    -
    73 
    -
    74  typedef f32 f32mat1;
    -
    75  typedef f32 f32mat1x1;
    -
    76  typedef f64 f64mat1;
    -
    77  typedef f64 f64mat1x1;
    -
    78 
    -
    80 }//namespace gtx
    -
    81 }//namespace glm
    -
    82 
    -
    83 #include "number_precision.inl"
    -
    84 
    -
    85 #endif//GLM_GTX_number_precision
    -
    highp_u16vec1 u16vec1
    Default precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1071
    -
    highp_u64vec1 u64vec1
    Default precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1309
    -
    highp_float32_t f32
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1523
    -
    detail::uint8 u8
    8 bit unsigned integer type.
    Definition: fwd.hpp:911
    -
    f32 f32mat1
    Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    -
    highp_f64vec1 f64vec1
    Default double-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2530
    -
    f64 f64mat1x1
    Double-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    -
    f64 f64mat1
    Double-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    -
    detail::uint64 u64
    64 bit unsigned integer type.
    Definition: fwd.hpp:923
    -
    detail::uint32 u32
    32 bit unsigned integer type.
    Definition: fwd.hpp:919
    -
    highp_f32vec1 f32vec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2423
    -
    highp_u8vec1 u8vec1
    Default precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:991
    -
    highp_float64_t f64
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1527
    -
    highp_u32vec1 u32vec1
    Default precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1150
    -
    detail::uint16 u16
    16 bit unsigned integer type.
    Definition: fwd.hpp:915
    -
    f32 f32mat1x1
    Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/func_packing.hpp"
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00089.html b/doc/api/a00089.html deleted file mode 100644 index 041f67bd..00000000 --- a/doc/api/a00089.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - -GLM: optimum_pow.hpp File Reference - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    - -
    -
    optimum_pow.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename genType >
    genType pow2 (const genType &x)
     
    template<typename genType >
    genType pow3 (const genType &x)
     
    template<typename genType >
    genType pow4 (const genType &x)
     
    bool powOfTwo (int num)
     
    template<precision P>
    detail::tvec2< bool, P > powOfTwo (detail::tvec2< int, P > const &x)
     
    template<precision P>
    detail::tvec3< bool, P > powOfTwo (detail::tvec3< int, P > const &x)
     
    template<precision P>
    detail::tvec4< bool, P > powOfTwo (detail::tvec4< int, P > const &x)
     
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_optimum_pow

    -
    Date
    2005-12-21 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    - -

    Definition in file optimum_pow.hpp.

    -
    - - - - diff --git a/doc/api/a00089_source.html b/doc/api/a00089_source.html index 05129d81..1a7ece45 100644 --- a/doc/api/a00089_source.html +++ b/doc/api/a00089_source.html @@ -3,8 +3,8 @@ - -GLM: optimum_pow.hpp Source File + +0.9.6: pages.doxy Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,65 +41,21 @@
    -
    optimum_pow.hpp
    +
    pages.doxy
    -Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_optimum_pow
    -
    39 #define GLM_GTX_optimum_pow
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_optimum_pow extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm{
    -
    49 namespace gtx
    -
    50 {
    -
    53 
    -
    56  template <typename genType>
    -
    57  genType pow2(const genType& x);
    -
    58 
    -
    61  template <typename genType>
    -
    62  genType pow3(const genType& x);
    -
    63 
    -
    66  template <typename genType>
    -
    67  genType pow4(const genType& x);
    -
    68 
    -
    71  bool powOfTwo(int num);
    -
    72 
    -
    75  template <precision P>
    -
    76  detail::tvec2<bool, P> powOfTwo(detail::tvec2<int, P> const & x);
    -
    77 
    -
    80  template <precision P>
    -
    81  detail::tvec3<bool, P> powOfTwo(detail::tvec3<int, P> const & x);
    -
    82 
    -
    85  template <precision P>
    -
    86  detail::tvec4<bool, P> powOfTwo(detail::tvec4<int, P> const & x);
    -
    87 
    -
    89 }//namespace gtx
    -
    90 }//namespace glm
    -
    91 
    -
    92 #include "optimum_pow.inl"
    -
    93 
    -
    94 #endif//GLM_GTX_optimum_pow
    -
    genType pow3(const genType &x)
    Returns x raised to the power of 3.
    -
    genType pow4(const genType &x)
    Returns x raised to the power of 4.
    -
    genType pow2(const genType &x)
    Returns x raised to the power of 2.
    -
    bool powOfTwo(int num)
    Checks if the parameter is a power of 2 number.
    +
    1 
    diff --git a/doc/api/a00090.html b/doc/api/a00090.html index a0b9b8aa..d4bc77b3 100644 --- a/doc/api/a00090.html +++ b/doc/api/a00090.html @@ -3,8 +3,8 @@ - -GLM: orthonormalize.hpp File Reference + +0.9.6: perpendicular.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,53 +41,44 @@
    -
    orthonormalize.hpp File Reference
    +
    perpendicular.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - + + +

    Functions

    template<typename T , precision P>
    detail::tmat3x3< T, P > orthonormalize (const detail::tmat3x3< T, P > &m)
     
    template<typename T , precision P>
    detail::tvec3< T, P > orthonormalize (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y)
     
    template<typename vecType >
    GLM_FUNC_DECL vecType perp (vecType const &x, vecType const &Normal)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_orthonormalize

    +

    GLM_GTX_perpendicular

    Date
    2005-12-21 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max (dependence)
    +GLM_GTX_projection (dependence)
    -

    Definition in file orthonormalize.hpp.

    +

    Definition in file perpendicular.hpp.

    diff --git a/doc/api/a00090_source.html b/doc/api/a00090_source.html index 9e016ecf..098cfcfb 100644 --- a/doc/api/a00090_source.html +++ b/doc/api/a00090_source.html @@ -3,8 +3,8 @@ - -GLM: orthonormalize.hpp Source File + +0.9.6: perpendicular.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,49 +41,44 @@
    -
    orthonormalize.hpp
    +
    perpendicular.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_orthonormalize
    -
    40 #define GLM_GTX_orthonormalize
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include "../gtx/projection.hpp"
    44 
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_orthonormalize extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    +
    46 # pragma message("GLM: GLM_GTX_perpendicular extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    50 {
    53 
    -
    56  template <typename T, precision P>
    -
    57  detail::tmat3x3<T, P> orthonormalize(
    -
    58  const detail::tmat3x3<T, P>& m);
    -
    59 
    -
    62  template <typename T, precision P>
    -
    63  detail::tvec3<T, P> orthonormalize(
    -
    64  const detail::tvec3<T, P>& x,
    -
    65  const detail::tvec3<T, P>& y);
    -
    66 
    -
    68 }//namespace glm
    -
    69 
    -
    70 #include "orthonormalize.inl"
    -
    71 
    -
    72 #endif//GLM_GTX_orthonormalize
    -
    detail::tmat3x3< T, P > orthonormalize(const detail::tmat3x3< T, P > &m)
    Returns the orthonormalized matrix of m.
    +
    56  template <typename vecType>
    +
    57  GLM_FUNC_DECL vecType perp(
    +
    58  vecType const & x,
    +
    59  vecType const & Normal);
    +
    60 
    +
    62 }//namespace glm
    +
    63 
    +
    64 #include "perpendicular.inl"
    +
    GLM_FUNC_DECL vecType perp(vecType const &x, vecType const &Normal)
    Projects x a perpendicular axis of Normal.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00091.html b/doc/api/a00091.html index 60e765f3..ebf6e91f 100644 --- a/doc/api/a00091.html +++ b/doc/api/a00091.html @@ -3,8 +3,8 @@ - -GLM: packing.hpp File Reference + +0.9.6: polar_coordinates.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,105 +41,45 @@
    -
    gtc/packing.hpp File Reference
    +
    polar_coordinates.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + +

    Functions

    GLM_FUNC_DECL uint32 packF2x11_1x10 (vec3 const &v)
     
    GLM_FUNC_DECL uint16 packHalf1x16 (float const &v)
     
    GLM_FUNC_DECL uint64 packHalf4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packI3x10_1x2 (ivec4 const &v)
     
    GLM_FUNC_DECL uint16 packSnorm1x16 (float const &v)
     
    GLM_FUNC_DECL uint8 packSnorm1x8 (float const &s)
     
    GLM_FUNC_DECL uint16 packSnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packSnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packSnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packU3x10_1x2 (uvec4 const &v)
     
    GLM_FUNC_DECL uint16 packUnorm1x16 (float const &v)
     
    GLM_FUNC_DECL uint8 packUnorm1x8 (float const &v)
     
    GLM_FUNC_DECL uint16 packUnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packUnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packUnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL vec3 unpackF2x11_1x10 (uint32 const &p)
     
    GLM_FUNC_DECL float unpackHalf1x16 (uint16 const &v)
     
    GLM_FUNC_DECL vec4 unpackHalf4x16 (uint64 const &p)
     
    GLM_FUNC_DECL ivec4 unpackI3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL float unpackSnorm1x16 (uint16 const &p)
     
    GLM_FUNC_DECL float unpackSnorm1x8 (uint8 const &p)
     
    GLM_FUNC_DECL vec2 unpackSnorm2x8 (uint16 const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm4x16 (uint64 const &p)
     
    GLM_FUNC_DECL uvec4 unpackU3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL float unpackUnorm1x16 (uint16 const &p)
     
    GLM_FUNC_DECL float unpackUnorm1x8 (uint8 const &p)
     
    GLM_FUNC_DECL vec2 unpackUnorm2x8 (uint16 const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm4x16 (uint64 const &p)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > euclidean (tvec2< T, P > const &polar)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > polar (tvec3< T, P > const &euclidean)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_packing

    -
    Date
    2013-08-08 / 2013-08-08
    +

    GLM_GTX_polar_coordinates

    +
    Date
    2007-03-06 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file gtc/packing.hpp.

    +

    Definition in file polar_coordinates.hpp.

    diff --git a/doc/api/a00091_source.html b/doc/api/a00091_source.html index b2a39f44..88b18540 100644 --- a/doc/api/a00091_source.html +++ b/doc/api/a00091_source.html @@ -3,8 +3,8 @@ - -GLM: packing.hpp Source File + +0.9.6: polar_coordinates.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,140 +41,47 @@
    -
    gtc/packing.hpp
    +
    polar_coordinates.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTC_packing
    -
    40 #define GLM_GTC_packing
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "type_precision.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTC_packing extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    65  GLM_FUNC_DECL uint8 packUnorm1x8(float const & v);
    -
    66 
    -
    77  GLM_FUNC_DECL float unpackUnorm1x8(uint8 const & p);
    -
    78 
    -
    93  GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const & v);
    -
    94 
    -
    109  GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 const & p);
    -
    110 
    -
    122  GLM_FUNC_DECL uint8 packSnorm1x8(float const & s);
    -
    123 
    -
    135  GLM_FUNC_DECL float unpackSnorm1x8(uint8 const & p);
    -
    136 
    -
    151  GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const & v);
    -
    152 
    -
    167  GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 const & p);
    -
    168 
    -
    180  GLM_FUNC_DECL uint16 packUnorm1x16(float const & v);
    -
    181 
    -
    193  GLM_FUNC_DECL float unpackUnorm1x16(uint16 const & p);
    -
    194 
    -
    209  GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const & v);
    -
    210 
    -
    225  GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 const & p);
    -
    226 
    -
    238  GLM_FUNC_DECL uint16 packSnorm1x16(float const & v);
    -
    239 
    -
    251  GLM_FUNC_DECL float unpackSnorm1x16(uint16 const & p);
    -
    252 
    -
    267  GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const & v);
    -
    268 
    -
    283  GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 const & p);
    -
    284 
    -
    294  GLM_FUNC_DECL uint16 packHalf1x16(float const & v);
    -
    295 
    -
    305  GLM_FUNC_DECL float unpackHalf1x16(uint16 const & v);
    -
    306 
    -
    318  GLM_FUNC_DECL uint64 packHalf4x16(vec4 const & v);
    -
    319 
    -
    331  GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 const & p);
    -
    332 
    -
    344  GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const & v);
    -
    345 
    -
    355  GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 const & p);
    -
    356 
    -
    368  GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const & v);
    -
    369 
    -
    379  GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 const & p);
    -
    380 
    -
    397  GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const & v);
    -
    398 
    -
    414  GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 const & p);
    -
    415 
    -
    432  GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const & v);
    -
    433 
    -
    449  GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 const & p);
    -
    450 
    -
    460  GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const & v);
    -
    461 
    -
    470  GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 const & p);
    -
    471 
    -
    473 }// namespace glm
    -
    474 
    -
    475 #include "packing.inl"
    -
    476 
    -
    477 #endif//GLM_GTC_packing
    -
    478 
    -
    highp_ivec4 ivec4
    4 components vector of signed integer numbers.
    Definition: type_vec.hpp:454
    -
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    -
    detail::uint32 uint32
    32 bit unsigned integer type.
    Definition: type_int.hpp:96
    -
    GLM_FUNC_DECL float unpackUnorm1x16(uint16 const &p)
    First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.
    -
    GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const &v)
    First, converts each component of the normalized floating-point value v into 8-bit integer values...
    -
    GLM_FUNC_DECL uint16 packSnorm1x16(float const &v)
    First, converts the normalized floating-point value v into 16-bit integer value.
    -
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    -
    GLM_FUNC_DECL uint8 packSnorm1x8(float const &s)
    First, converts the normalized floating-point value v into 8-bit integer value.
    -
    GLM_FUNC_DECL float unpackUnorm1x8(uint8 const &p)
    Convert a single 8-bit integer to a normalized floating-point value.
    -
    GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const &v)
    First, converts the first three components of the normalized floating-point value v into 10-bit unsig...
    -
    GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const &v)
    First, converts each component of the normalized floating-point value v into 16-bit integer values...
    -
    GLM_FUNC_DECL float unpackSnorm1x16(uint16 const &p)
    First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.
    -
    GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const &v)
    Returns an unsigned integer obtained by converting the components of a four-component signed integer ...
    -
    detail::uint64 uint64
    64 bit unsigned integer type.
    Definition: type_int.hpp:97
    -
    GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 const &p)
    First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.
    -
    GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 const &p)
    First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
    -
    GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const &v)
    First, converts the first three components of the normalized floating-point value v into 10-bit signe...
    -
    GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 const &p)
    First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...
    -
    GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const &v)
    Returns an unsigned integer obtained by converting the components of a four-component unsigned intege...
    -
    OpenGL Mathematics (glm.g-truc.net)
    -
    GLM_FUNC_DECL float unpackSnorm1x8(uint8 const &p)
    First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.
    -
    GLM_FUNC_DECL uint16 packHalf1x16(float const &v)
    Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 1...
    -
    GLM_FUNC_DECL uint16 packUnorm1x16(float const &v)
    First, converts the normalized floating-point value v into a 16-bit integer value.
    -
    detail::uint8 uint8
    8 bit unsigned integer type.
    Definition: type_int.hpp:94
    -
    GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const &v)
    First, converts each component of the normalized floating-point value v into 8-bit integer values...
    -
    GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 const &p)
    Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers...
    -
    GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 const &p)
    First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.
    -
    GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 const &p)
    First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
    -
    GLM_FUNC_DECL uint64 packHalf4x16(vec4 const &v)
    Returns an unsigned integer obtained by converting the components of a four-component floating-point ...
    -
    GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 const &p)
    Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers...
    -
    GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 const &p)
    First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.
    -
    highp_uvec4 uvec4
    4 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:482
    -
    GLM_FUNC_DECL float unpackHalf1x16(uint16 const &v)
    Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into ...
    -
    GLM_FUNC_DECL uint8 packUnorm1x8(float const &v)
    First, converts the normalized floating-point value v into a 8-bit integer value. ...
    -
    detail::uint16 uint16
    16 bit unsigned integer type.
    Definition: type_int.hpp:95
    -
    GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 const &p)
    First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.
    -
    GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const &v)
    First, converts each component of the normalized floating-point value v into 16-bit integer values...
    -
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    -
    GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 const &p)
    Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigne...
    -
    GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const &v)
    First, converts the first two components of the normalized floating-point value v into 11-bit signles...
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_polar_coordinates extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    55  template <typename T, precision P>
    +
    56  GLM_FUNC_DECL tvec3<T, P> polar(
    +
    57  tvec3<T, P> const & euclidean);
    +
    58 
    +
    62  template <typename T, precision P>
    +
    63  GLM_FUNC_DECL tvec3<T, P> euclidean(
    +
    64  tvec2<T, P> const & polar);
    +
    65 
    +
    67 }//namespace glm
    +
    68 
    +
    69 #include "polar_coordinates.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tvec3< T, P > euclidean(tvec2< T, P > const &polar)
    Convert Polar to Euclidean coordinates.
    +
    GLM_FUNC_DECL tvec3< T, P > polar(tvec3< T, P > const &euclidean)
    Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude...
    diff --git a/doc/api/a00092.html b/doc/api/a00092.html index 25ea59da..f75771a6 100644 --- a/doc/api/a00092.html +++ b/doc/api/a00092.html @@ -3,8 +3,8 @@ - -GLM: packing.hpp File Reference + +0.9.6: precision.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,12 +41,12 @@
    -
    packing.hpp File Reference
    +
    precision.hpp File Reference
    @@ -58,17 +56,17 @@

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    +

    GLM Core

    +
    Date
    2013-04-01 / 2013-04-01
    Author
    Christophe Riccio
    -

    Definition in file packing.hpp.

    +

    Definition in file precision.hpp.

    diff --git a/doc/api/a00092_source.html b/doc/api/a00092_source.html index f66ce4f9..b485ef3c 100644 --- a/doc/api/a00092_source.html +++ b/doc/api/a00092_source.html @@ -3,8 +3,8 @@ - -GLM: packing.hpp Source File + +0.9.6: precision.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,34 @@
    -
    packing.hpp
    +
    precision.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_PACKING_INCLUDED
    -
    30 #define GLM_PACKING_INCLUDED
    -
    31 
    -
    32 #include "detail/func_packing.hpp"
    -
    33 
    -
    34 #endif//GLM_PACKING_INCLUDED
    +
    29 #pragma once
    +
    30 
    +
    31 namespace glm
    +
    32 {
    +
    33  enum precision
    +
    34  {
    +
    35  highp,
    +
    36  mediump,
    +
    37  lowp,
    +
    38  defaultp = highp
    +
    39  };
    +
    40 }//namespace glm
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00093.html b/doc/api/a00093.html new file mode 100644 index 00000000..b7d62d1f --- /dev/null +++ b/doc/api/a00093.html @@ -0,0 +1,82 @@ + + + + + + +0.9.6: projection.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    projection.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + +

    +Functions

    template<typename vecType >
    GLM_FUNC_DECL vecType proj (vecType const &x, vecType const &Normal)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_projection

    +
    Date
    2005-12-21 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file projection.hpp.

    +
    + + + + diff --git a/doc/api/a00093_source.html b/doc/api/a00093_source.html index 5c60406f..71ad17f4 100644 --- a/doc/api/a00093_source.html +++ b/doc/api/a00093_source.html @@ -3,8 +3,8 @@ - -GLM: pages.doxy Source File + +0.9.6: projection.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,21 +41,43 @@
    -
    pages.doxy
    +
    projection.hpp
    -
    1 
    +Go to the documentation of this file.
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_projection extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename vecType>
    +
    55  GLM_FUNC_DECL vecType proj(
    +
    56  vecType const & x,
    +
    57  vecType const & Normal);
    +
    58 
    +
    60 }//namespace glm
    +
    61 
    +
    62 #include "projection.inl"
    +
    GLM_FUNC_DECL vecType proj(vecType const &x, vecType const &Normal)
    Projects x on Normal.
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00094.html b/doc/api/a00094.html index 11fc0aa4..8f431252 100644 --- a/doc/api/a00094.html +++ b/doc/api/a00094.html @@ -3,8 +3,8 @@ - -GLM: perpendicular.hpp File Reference + +0.9.6: quaternion.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,50 +41,121 @@
    -
    perpendicular.hpp File Reference
    +
    gtc/quaternion.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename vecType >
    vecType perp (vecType const &x, vecType const &Normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T angle (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > angleAxis (T const &angle, tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > axis (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > conjugate (tquat< T, P > const &q)
     
    template<typename T , precision P, template< typename, precision > class quatType>
    GLM_FUNC_DECL T dot (quatType< T, P > const &x, quatType< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > equal (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > eulerAngles (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > greaterThan (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > greaterThanEqual (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > inverse (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T length (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > lerp (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > lessThan (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > lessThanEqual (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > mat3_cast (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > mat4_cast (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > mix (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > normalize (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > notEqual (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T pitch (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > quat_cast (tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > quat_cast (tmat4x4< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T roll (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > rotate (tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > slerp (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T yaw (tquat< T, P > const &x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_perpendicular

    -
    Date
    2005-12-21 / 2011-06-07
    +

    GLM_GTC_quaternion

    +
    Date
    2009-05-21 / 2012-12-20
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -GLM_GTX_projection (dependence)
    +gtc_half_float (dependence) +
    +GLM_GTC_constants (dependence)
    -

    Definition in file perpendicular.hpp.

    +

    Definition in file gtc/quaternion.hpp.

    diff --git a/doc/api/a00094_source.html b/doc/api/a00094_source.html index 5507394a..308d5428 100644 --- a/doc/api/a00094_source.html +++ b/doc/api/a00094_source.html @@ -3,8 +3,8 @@ - -GLM: perpendicular.hpp Source File + +0.9.6: quaternion.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,46 +41,232 @@
    -
    perpendicular.hpp
    +
    gtc/quaternion.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_perpendicular
    -
    40 #define GLM_GTX_perpendicular
    -
    41 
    +
    40 #pragma once
    +
    41 
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 #include "../gtx/projection.hpp"
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_perpendicular extension included")
    -
    48 #endif
    -
    49 
    -
    50 namespace glm
    -
    51 {
    -
    54 
    -
    57  template <typename vecType>
    -
    58  vecType perp(
    -
    59  vecType const & x,
    -
    60  vecType const & Normal);
    -
    61 
    -
    63 }//namespace glm
    -
    64 
    -
    65 #include "perpendicular.inl"
    +
    43 #include "../mat3x3.hpp"
    +
    44 #include "../mat4x4.hpp"
    +
    45 #include "../vec3.hpp"
    +
    46 #include "../vec4.hpp"
    +
    47 #include "../gtc/constants.hpp"
    +
    48 
    +
    49 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    50 # pragma message("GLM: GLM_GTC_quaternion extension included")
    +
    51 #endif
    +
    52 
    +
    53 namespace glm
    +
    54 {
    +
    57 
    +
    58  template <typename T, precision P>
    +
    59  struct tquat
    +
    60  {
    +
    61  typedef T value_type;
    +
    62  typedef tvec4<bool, P> bool_type;
    +
    63 
    +
    64  public:
    +
    65  T x, y, z, w;
    66 
    -
    67 #endif//GLM_GTX_perpendicular
    -
    vecType perp(vecType const &x, vecType const &Normal)
    Projects x a perpendicular axis of Normal.
    +
    67 #if GLM_FORCE_SIZE_FUNC
    +
    68  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    70 #else
    +
    71  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    73 #endif//GLM_FORCE_SIZE_FUNC
    +
    74 
    +
    76  // Accesses
    +
    77 
    +
    78  GLM_FUNC_DECL T & operator[](length_t i);
    +
    79  GLM_FUNC_DECL T const & operator[](length_t i) const;
    +
    80 
    +
    82  // Implicit basic constructors
    +
    83 
    +
    84  GLM_FUNC_DECL tquat();
    +
    85  template <precision Q>
    +
    86  GLM_FUNC_DECL tquat(tquat<T, Q> const & q);
    +
    87 
    +
    89  // Explicit basic constructors
    +
    90 
    +
    91  GLM_FUNC_DECL explicit tquat(ctor);
    +
    92  GLM_FUNC_DECL explicit tquat(T const & s, tvec3<T, P> const & v);
    +
    93  GLM_FUNC_DECL tquat(T const & w, T const & x, T const & y, T const & z);
    +
    94 
    +
    96  // Convertions
    +
    97 
    +
    98 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    99  template <typename U, precision Q>
    +
    100  GLM_FUNC_DECL explicit tquat(tquat<U, Q> const & q);
    +
    101 # else
    +
    102  template <typename U, precision Q>
    +
    103  GLM_FUNC_DECL tquat(tquat<U, Q> const & q);
    +
    104 # endif
    +
    105 
    +
    106  // explicit conversion operators
    +
    107  GLM_FUNC_DECL explicit operator tmat3x3<T, P>();
    +
    108  GLM_FUNC_DECL explicit operator tmat4x4<T, P>();
    +
    109 
    +
    116  GLM_FUNC_DECL explicit tquat(tvec3<T, P> const & u, tvec3<T, P> const & v);
    +
    117 
    +
    119  GLM_FUNC_DECL explicit tquat(tvec3<T, P> const & eulerAngles);
    +
    120  GLM_FUNC_DECL explicit tquat(tmat3x3<T, P> const & m);
    +
    121  GLM_FUNC_DECL explicit tquat(tmat4x4<T, P> const & m);
    +
    122 
    +
    124  // Operators
    +
    125  GLM_FUNC_DECL tquat<T, P> & operator+=(tquat<T, P> const & q);
    +
    126  GLM_FUNC_DECL tquat<T, P> & operator*=(tquat<T, P> const & q);
    +
    127  GLM_FUNC_DECL tquat<T, P> & operator*=(T const & s);
    +
    128  GLM_FUNC_DECL tquat<T, P> & operator/=(T const & s);
    +
    129  };
    +
    130 
    +
    131  template <typename T, precision P>
    +
    132  GLM_FUNC_DECL tquat<T, P> operator-(tquat<T, P> const & q);
    +
    133 
    +
    134  template <typename T, precision P>
    +
    135  GLM_FUNC_DECL tquat<T, P> operator+(tquat<T, P> const & q, tquat<T, P> const & p);
    +
    136 
    +
    137  template <typename T, precision P>
    +
    138  GLM_FUNC_DECL tquat<T, P> operator*(tquat<T, P> const & q, tquat<T, P> const & p);
    +
    139 
    +
    140  template <typename T, precision P>
    +
    141  GLM_FUNC_DECL tvec3<T, P> operator*(tquat<T, P> const & q, tvec3<T, P> const & v);
    +
    142 
    +
    143  template <typename T, precision P>
    +
    144  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, tquat<T, P> const & q);
    +
    145 
    +
    146  template <typename T, precision P>
    +
    147  GLM_FUNC_DECL tvec4<T, P> operator*(tquat<T, P> const & q, tvec4<T, P> const & v);
    +
    148 
    +
    149  template <typename T, precision P>
    +
    150  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, tquat<T, P> const & q);
    +
    151 
    +
    152  template <typename T, precision P>
    +
    153  GLM_FUNC_DECL tquat<T, P> operator*(tquat<T, P> const & q, T const & s);
    +
    154 
    +
    155  template <typename T, precision P>
    +
    156  GLM_FUNC_DECL tquat<T, P> operator*(T const & s, tquat<T, P> const & q);
    +
    157 
    +
    158  template <typename T, precision P>
    +
    159  GLM_FUNC_DECL tquat<T, P> operator/(tquat<T, P> const & q, T const & s);
    +
    160 
    +
    164  template <typename T, precision P>
    +
    165  GLM_FUNC_DECL T length(tquat<T, P> const & q);
    +
    166 
    +
    170  template <typename T, precision P>
    +
    171  GLM_FUNC_DECL tquat<T, P> normalize(tquat<T, P> const & q);
    +
    172 
    +
    176  template <typename T, precision P, template <typename, precision> class quatType>
    +
    177  GLM_FUNC_DECL T dot(quatType<T, P> const & x, quatType<T, P> const & y);
    +
    178 
    +
    189  template <typename T, precision P>
    +
    190  GLM_FUNC_DECL tquat<T, P> mix(tquat<T, P> const & x, tquat<T, P> const & y, T const & a);
    +
    191 
    +
    200  template <typename T, precision P>
    +
    201  GLM_FUNC_DECL tquat<T, P> lerp(tquat<T, P> const & x, tquat<T, P> const & y, T const & a);
    +
    202 
    +
    211  template <typename T, precision P>
    +
    212  GLM_FUNC_DECL tquat<T, P> slerp(tquat<T, P> const & x, tquat<T, P> const & y, T const & a);
    +
    213 
    +
    217  template <typename T, precision P>
    +
    218  GLM_FUNC_DECL tquat<T, P> conjugate(tquat<T, P> const & q);
    +
    219 
    +
    223  template <typename T, precision P>
    +
    224  GLM_FUNC_DECL tquat<T, P> inverse(tquat<T, P> const & q);
    +
    225 
    +
    233  template <typename T, precision P>
    +
    234  GLM_FUNC_DECL tquat<T, P> rotate(tquat<T, P> const & q, T const & angle, tvec3<T, P> const & axis);
    +
    235 
    +
    240  template <typename T, precision P>
    +
    241  GLM_FUNC_DECL tvec3<T, P> eulerAngles(tquat<T, P> const & x);
    +
    242 
    +
    246  template <typename T, precision P>
    +
    247  GLM_FUNC_DECL T roll(tquat<T, P> const & x);
    +
    248 
    +
    252  template <typename T, precision P>
    +
    253  GLM_FUNC_DECL T pitch(tquat<T, P> const & x);
    +
    254 
    +
    258  template <typename T, precision P>
    +
    259  GLM_FUNC_DECL T yaw(tquat<T, P> const & x);
    +
    260 
    +
    264  template <typename T, precision P>
    +
    265  GLM_FUNC_DECL tmat3x3<T, P> mat3_cast(tquat<T, P> const & x);
    +
    266 
    +
    270  template <typename T, precision P>
    +
    271  GLM_FUNC_DECL tmat4x4<T, P> mat4_cast(tquat<T, P> const & x);
    +
    272 
    +
    276  template <typename T, precision P>
    +
    277  GLM_FUNC_DECL tquat<T, P> quat_cast(tmat3x3<T, P> const & x);
    +
    278 
    +
    282  template <typename T, precision P>
    +
    283  GLM_FUNC_DECL tquat<T, P> quat_cast(tmat4x4<T, P> const & x);
    +
    284 
    +
    288  template <typename T, precision P>
    +
    289  GLM_FUNC_DECL T angle(tquat<T, P> const & x);
    +
    290 
    +
    294  template <typename T, precision P>
    +
    295  GLM_FUNC_DECL tvec3<T, P> axis(tquat<T, P> const & x);
    +
    296 
    +
    303  template <typename T, precision P>
    +
    304  GLM_FUNC_DECL tquat<T, P> angleAxis(T const & angle, tvec3<T, P> const & axis);
    +
    305 
    +
    311  template <typename T, precision P>
    +
    312  GLM_FUNC_DECL tvec4<bool, P> lessThan(tquat<T, P> const & x, tquat<T, P> const & y);
    +
    313 
    +
    319  template <typename T, precision P>
    +
    320  GLM_FUNC_DECL tvec4<bool, P> lessThanEqual(tquat<T, P> const & x, tquat<T, P> const & y);
    +
    321 
    +
    327  template <typename T, precision P>
    +
    328  GLM_FUNC_DECL tvec4<bool, P> greaterThan(tquat<T, P> const & x, tquat<T, P> const & y);
    +
    329 
    +
    335  template <typename T, precision P>
    +
    336  GLM_FUNC_DECL tvec4<bool, P> greaterThanEqual(tquat<T, P> const & x, tquat<T, P> const & y);
    +
    337 
    +
    343  template <typename T, precision P>
    +
    344  GLM_FUNC_DECL tvec4<bool, P> equal(tquat<T, P> const & x, tquat<T, P> const & y);
    +
    345 
    +
    351  template <typename T, precision P>
    +
    352  GLM_FUNC_DECL tvec4<bool, P> notEqual(tquat<T, P> const & x, tquat<T, P> const & y);
    +
    354 } //namespace glm
    +
    355 
    +
    356 #include "quaternion.inl"
    +
    GLM_FUNC_DECL tquat< T, P > normalize(tquat< T, P > const &q)
    Returns the normalized quaternion.
    +
    GLM_FUNC_DECL tvec4< bool, P > greaterThanEqual(tquat< T, P > const &x, tquat< T, P > const &y)
    Returns the component-wise comparison of result x >= y.
    +
    GLM_FUNC_DECL T yaw(tquat< T, P > const &x)
    Returns yaw value of euler angles expressed in radians.
    +
    GLM_FUNC_DECL tquat< T, P > inverse(tquat< T, P > const &q)
    Returns the q inverse.
    +
    GLM_FUNC_DECL tvec4< bool, P > lessThanEqual(tquat< T, P > const &x, tquat< T, P > const &y)
    Returns the component-wise comparison of result x <= y.
    +
    GLM_FUNC_DECL tvec4< bool, P > lessThan(tquat< T, P > const &x, tquat< T, P > const &y)
    Returns the component-wise comparison result of x < y.
    +
    GLM_FUNC_DECL tvec4< bool, P > notEqual(tquat< T, P > const &x, tquat< T, P > const &y)
    Returns the component-wise comparison of result x != y.
    +
    GLM_FUNC_DECL tquat< T, P > lerp(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
    Linear interpolation of two quaternions.
    +
    GLM_FUNC_DECL tquat< T, P > quat_cast(tmat4x4< T, P > const &x)
    Converts a 4 * 4 matrix to a quaternion.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tquat< T, P > mix(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
    Spherical linear interpolation of two quaternions.
    +
    GLM_FUNC_DECL tvec3< T, P > eulerAngles(tquat< T, P > const &x)
    Returns euler angles, yitch as x, yaw as y, roll as z.
    +
    GLM_FUNC_DECL tquat< T, P > conjugate(tquat< T, P > const &q)
    Returns the q conjugate.
    +
    GLM_FUNC_DECL tvec4< bool, P > equal(tquat< T, P > const &x, tquat< T, P > const &y)
    Returns the component-wise comparison of result x == y.
    +
    GLM_FUNC_DECL tquat< T, P > slerp(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
    Spherical linear interpolation of two quaternions.
    +
    GLM_FUNC_DECL T dot(quatType< T, P > const &x, quatType< T, P > const &y)
    Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...
    +
    GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    +
    GLM_FUNC_DECL tquat< T, P > angleAxis(T const &angle, tvec3< T, P > const &axis)
    Build a quaternion from an angle and a normalized axis.
    +
    GLM_FUNC_DECL tmat3x3< T, P > mat3_cast(tquat< T, P > const &x)
    Converts a quaternion to a 3 * 3 matrix.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_DECL T roll(tquat< T, P > const &x)
    Returns roll value of euler angles expressed in radians.
    +
    GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)
    Returns the q rotation axis.
    +
    GLM_FUNC_DECL tquat< T, P > rotate(tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)
    Rotates a quaternion from a vector of 3 components axis and an angle.
    +
    GLM_FUNC_DECL T pitch(tquat< T, P > const &x)
    Returns pitch value of euler angles expressed in radians.
    +
    GLM_FUNC_DECL T length(tquat< T, P > const &q)
    Returns the length of the quaternion.
    +
    GLM_FUNC_DECL tvec4< bool, P > greaterThan(tquat< T, P > const &x, tquat< T, P > const &y)
    Returns the component-wise comparison of result x > y.
    diff --git a/doc/api/a00095.html b/doc/api/a00095.html index dca96884..68cdfaf3 100644 --- a/doc/api/a00095.html +++ b/doc/api/a00095.html @@ -3,8 +3,8 @@ - -GLM: polar_coordinates.hpp File Reference + +0.9.6: quaternion.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,51 +41,95 @@
    -
    polar_coordinates.hpp File Reference
    +
    gtx/quaternion.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > euclidean (detail::tvec2< T, P > const &polar)
     
    template<typename T , precision P>
    detail::tvec3< T, P > polar (detail::tvec3< T, P > const &euclidean)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > cross (tquat< T, P > const &q, tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > cross (tvec3< T, P > const &v, tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > exp (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T extractRealComponent (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > fastMix (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > intermediate (tquat< T, P > const &prev, tquat< T, P > const &curr, tquat< T, P > const &next)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T length2 (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > log (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > pow (tquat< T, P > const &x, T const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotate (tquat< T, P > const &q, tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotate (tquat< T, P > const &q, tvec4< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > rotation (tvec3< T, P > const &orig, tvec3< T, P > const &dest)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > shortMix (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > squad (tquat< T, P > const &q1, tquat< T, P > const &q2, tquat< T, P > const &s1, tquat< T, P > const &s2, T const &h)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > toMat3 (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > toMat4 (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > toQuat (tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > toQuat (tmat4x4< T, P > const &x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_polar_coordinates

    -
    Date
    2007-03-06 / 2011-06-07
    +

    GLM_GTX_quaternion

    +
    Date
    2005-12-21 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_extented_min_max (dependence)
    -

    Definition in file polar_coordinates.hpp.

    +

    Definition in file gtx/quaternion.hpp.

    diff --git a/doc/api/a00095_source.html b/doc/api/a00095_source.html index 96c878c8..c7e8a9d1 100644 --- a/doc/api/a00095_source.html +++ b/doc/api/a00095_source.html @@ -3,8 +3,8 @@ - -GLM: polar_coordinates.hpp Source File + +0.9.6: quaternion.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,49 +41,149 @@
    -
    polar_coordinates.hpp
    +
    gtx/quaternion.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_polar_coordinates
    -
    39 #define GLM_GTX_polar_coordinates
    -
    40 
    +
    39 #pragma once
    +
    40 
    41 // Dependency:
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_polar_coordinates extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    56  template <typename T, precision P>
    -
    57  detail::tvec3<T, P> polar(
    -
    58  detail::tvec3<T, P> const & euclidean);
    -
    59 
    -
    63  template <typename T, precision P>
    -
    64  detail::tvec3<T, P> euclidean(
    -
    65  detail::tvec2<T, P> const & polar);
    -
    66 
    -
    68 }//namespace glm
    -
    69 
    -
    70 #include "polar_coordinates.inl"
    +
    43 #include "../gtc/constants.hpp"
    +
    44 #include "../gtc/quaternion.hpp"
    +
    45 #include "../gtx/norm.hpp"
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    48 # pragma message("GLM: GLM_GTX_quaternion extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    +
    52 {
    +
    55 
    +
    59  template<typename T, precision P>
    +
    60  GLM_FUNC_DECL tvec3<T, P> cross(
    +
    61  tquat<T, P> const & q,
    +
    62  tvec3<T, P> const & v);
    +
    63 
    +
    67  template<typename T, precision P>
    +
    68  GLM_FUNC_DECL tvec3<T, P> cross(
    +
    69  tvec3<T, P> const & v,
    +
    70  tquat<T, P> const & q);
    71 
    -
    72 #endif//GLM_GTX_polar_coordinates
    -
    detail::tvec3< T, P > euclidean(detail::tvec2< T, P > const &polar)
    Convert Polar to Euclidean coordinates.
    -
    detail::tvec3< T, P > polar(detail::tvec3< T, P > const &euclidean)
    Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude...
    +
    76  template<typename T, precision P>
    +
    77  GLM_FUNC_DECL tquat<T, P> squad(
    +
    78  tquat<T, P> const & q1,
    +
    79  tquat<T, P> const & q2,
    +
    80  tquat<T, P> const & s1,
    +
    81  tquat<T, P> const & s2,
    +
    82  T const & h);
    +
    83 
    +
    87  template<typename T, precision P>
    +
    88  GLM_FUNC_DECL tquat<T, P> intermediate(
    +
    89  tquat<T, P> const & prev,
    +
    90  tquat<T, P> const & curr,
    +
    91  tquat<T, P> const & next);
    +
    92 
    +
    96  template<typename T, precision P>
    +
    97  GLM_FUNC_DECL tquat<T, P> exp(
    +
    98  tquat<T, P> const & q);
    +
    99 
    +
    103  template<typename T, precision P>
    +
    104  GLM_FUNC_DECL tquat<T, P> log(
    +
    105  tquat<T, P> const & q);
    +
    106 
    +
    110  template<typename T, precision P>
    +
    111  GLM_FUNC_DECL tquat<T, P> pow(
    +
    112  tquat<T, P> const & x,
    +
    113  T const & y);
    +
    114 
    +
    118  //template<typename T, precision P>
    +
    119  //tquat<T, P> sqrt(
    +
    120  // tquat<T, P> const & q);
    +
    121 
    +
    125  template<typename T, precision P>
    +
    126  GLM_FUNC_DECL tvec3<T, P> rotate(
    +
    127  tquat<T, P> const & q,
    +
    128  tvec3<T, P> const & v);
    +
    129 
    +
    133  template<typename T, precision P>
    +
    134  GLM_FUNC_DECL tvec4<T, P> rotate(
    +
    135  tquat<T, P> const & q,
    +
    136  tvec4<T, P> const & v);
    +
    137 
    +
    141  template<typename T, precision P>
    +
    142  GLM_FUNC_DECL T extractRealComponent(
    +
    143  tquat<T, P> const & q);
    +
    144 
    +
    148  template<typename T, precision P>
    +
    149  GLM_FUNC_DECL tmat3x3<T, P> toMat3(
    +
    150  tquat<T, P> const & x){return mat3_cast(x);}
    +
    151 
    +
    155  template<typename T, precision P>
    +
    156  GLM_FUNC_DECL tmat4x4<T, P> toMat4(
    +
    157  tquat<T, P> const & x){return mat4_cast(x);}
    +
    158 
    +
    162  template<typename T, precision P>
    +
    163  GLM_FUNC_DECL tquat<T, P> toQuat(
    +
    164  tmat3x3<T, P> const & x){return quat_cast(x);}
    +
    165 
    +
    169  template<typename T, precision P>
    +
    170  GLM_FUNC_DECL tquat<T, P> toQuat(
    +
    171  tmat4x4<T, P> const & x){return quat_cast(x);}
    +
    172 
    +
    176  template<typename T, precision P>
    +
    177  GLM_FUNC_DECL tquat<T, P> shortMix(
    +
    178  tquat<T, P> const & x,
    +
    179  tquat<T, P> const & y,
    +
    180  T const & a);
    +
    181 
    +
    185  template<typename T, precision P>
    +
    186  GLM_FUNC_DECL tquat<T, P> fastMix(
    +
    187  tquat<T, P> const & x,
    +
    188  tquat<T, P> const & y,
    +
    189  T const & a);
    +
    190 
    +
    196  template<typename T, precision P>
    +
    197  GLM_FUNC_DECL tquat<T, P> rotation(
    +
    198  tvec3<T, P> const & orig,
    +
    199  tvec3<T, P> const & dest);
    +
    200 
    +
    204  template<typename T, precision P>
    +
    205  GLM_FUNC_DECL T length2(tquat<T, P> const & q);
    +
    206 
    +
    208 }//namespace glm
    +
    209 
    +
    210 #include "quaternion.inl"
    +
    GLM_FUNC_DECL tmat4x4< T, P > toMat4(tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    +
    GLM_FUNC_DECL tquat< T, P > shortMix(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
    Quaternion interpolation using the rotation short path.
    +
    GLM_FUNC_DECL tmat3x3< T, P > toMat3(tquat< T, P > const &x)
    Converts a quaternion to a 3 * 3 matrix.
    +
    GLM_FUNC_DECL tquat< T, P > intermediate(tquat< T, P > const &prev, tquat< T, P > const &curr, tquat< T, P > const &next)
    Returns an intermediate control point for squad interpolation.
    +
    GLM_FUNC_DECL tquat< T, P > pow(tquat< T, P > const &x, T const &y)
    Returns x raised to the y power.
    +
    GLM_FUNC_DECL T length2(tquat< T, P > const &q)
    Returns the squared length of x.
    +
    GLM_FUNC_DECL tquat< T, P > rotation(tvec3< T, P > const &orig, tvec3< T, P > const &dest)
    Compute the rotation between two vectors.
    +
    GLM_FUNC_DECL tquat< T, P > toQuat(tmat4x4< T, P > const &x)
    Converts a 4 * 4 matrix to a quaternion.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tvec3< T, P > cross(tvec3< T, P > const &v, tquat< T, P > const &q)
    Compute a cross product between a vector and a quaternion.
    +
    GLM_FUNC_DECL tvec4< T, P > rotate(tquat< T, P > const &q, tvec4< T, P > const &v)
    Rotates a 4 components vector by a quaternion.
    +
    GLM_FUNC_DECL tquat< T, P > fastMix(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
    Quaternion normalized linear interpolation.
    +
    GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    +
    GLM_FUNC_DECL tquat< T, P > exp(tquat< T, P > const &q)
    Returns a exp of a quaternion.
    +
    GLM_FUNC_DECL T extractRealComponent(tquat< T, P > const &q)
    Extract the real component of a quaternion.
    +
    GLM_FUNC_DECL tmat3x3< T, P > mat3_cast(tquat< T, P > const &x)
    Converts a quaternion to a 3 * 3 matrix.
    +
    GLM_FUNC_DECL tquat< T, P > squad(tquat< T, P > const &q1, tquat< T, P > const &q2, tquat< T, P > const &s1, tquat< T, P > const &s2, T const &h)
    Compute a point on a path according squad equation.
    +
    GLM_FUNC_DECL tquat< T, P > quat_cast(tmat3x3< T, P > const &x)
    Converts a 3 * 3 matrix to a quaternion.
    +
    GLM_FUNC_DECL tquat< T, P > log(tquat< T, P > const &q)
    Returns a log of a quaternion.
    diff --git a/doc/api/a00096.html b/doc/api/a00096.html new file mode 100644 index 00000000..63ef1db8 --- /dev/null +++ b/doc/api/a00096.html @@ -0,0 +1,101 @@ + + + + + + +0.9.6: random.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    random.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    GLM_FUNC_DECL tvec3< T, defaultp > ballRand (T Radius)
     
    template<typename T >
    GLM_FUNC_DECL tvec2< T, defaultp > circularRand (T Radius)
     
    template<typename T >
    GLM_FUNC_DECL tvec2< T, defaultp > diskRand (T Radius)
     
    template<typename genType >
    GLM_FUNC_DECL genType gaussRand (genType Mean, genType Deviation)
     
    template<typename genTYpe >
    GLM_FUNC_DECL genTYpe linearRand (genTYpe Min, genTYpe Max)
     
    template<typename T >
    GLM_FUNC_DECL tvec3< T, defaultp > sphericalRand (T Radius)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTC_random

    +
    Date
    2011-09-18 / 2011-09-18
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +gtc_half_float (dependence)
    +
    +gtx_random (extended)
    + +

    Definition in file random.hpp.

    +
    + + + + diff --git a/doc/api/a00096_source.html b/doc/api/a00096_source.html index cf2d1aa2..511e7c3c 100644 --- a/doc/api/a00096_source.html +++ b/doc/api/a00096_source.html @@ -3,8 +3,8 @@ - -GLM: precision.hpp Source File + +0.9.6: random.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,36 +41,75 @@
    -
    precision.hpp
    +
    random.hpp
    -
    1 
    -
    29 #ifndef GLM_CORE_PRECISION_INCLUDED
    -
    30 #define GLM_CORE_PRECISION_INCLUDED
    -
    31 
    -
    32 namespace glm
    -
    33 {
    -
    34  enum precision
    -
    35  {
    -
    36  highp,
    -
    37  mediump,
    -
    38  lowp,
    -
    39  defaultp = highp
    -
    40  };
    -
    41 }//namespace glm
    -
    42 
    -
    43 #endif//GLM_CORE_PRECISION_INCLUDED
    +Go to the documentation of this file.
    1 
    +
    40 #pragma once
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../vec2.hpp"
    +
    44 #include "../vec3.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    47 # pragma message("GLM: GLM_GTC_random extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    54 
    +
    61  template <typename genTYpe>
    +
    62  GLM_FUNC_DECL genTYpe linearRand(
    +
    63  genTYpe Min,
    +
    64  genTYpe Max);
    +
    65 
    +
    66  template <typename T, precision P, template <typename, precision> class vecType>
    +
    67  GLM_FUNC_DECL vecType<T, P> linearRand(
    +
    68  vecType<T, P> const & Min,
    +
    69  vecType<T, P> const & Max);
    +
    70 
    +
    76  template <typename genType>
    +
    77  GLM_FUNC_DECL genType gaussRand(
    +
    78  genType Mean,
    +
    79  genType Deviation);
    +
    80 
    +
    85  template <typename T>
    +
    86  GLM_FUNC_DECL tvec2<T, defaultp> circularRand(
    +
    87  T Radius);
    +
    88 
    +
    93  template <typename T>
    +
    94  GLM_FUNC_DECL tvec3<T, defaultp> sphericalRand(
    +
    95  T Radius);
    +
    96 
    +
    101  template <typename T>
    +
    102  GLM_FUNC_DECL tvec2<T, defaultp> diskRand(
    +
    103  T Radius);
    +
    104 
    +
    109  template <typename T>
    +
    110  GLM_FUNC_DECL tvec3<T, defaultp> ballRand(
    +
    111  T Radius);
    +
    112 
    +
    114 }//namespace glm
    +
    115 
    +
    116 #include "random.inl"
    +
    GLM_FUNC_DECL tvec3< T, defaultp > ballRand(T Radius)
    Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of...
    +
    GLM_FUNC_DECL tvec2< T, defaultp > circularRand(T Radius)
    Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius...
    +
    GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation)
    Generate random numbers in the interval [Min, Max], according a gaussian distribution.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genTYpe linearRand(genTYpe Min, genTYpe Max)
    Generate random numbers in the interval [Min, Max], according a linear distribution.
    +
    GLM_FUNC_DECL tvec3< T, defaultp > sphericalRand(T Radius)
    Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius...
    +
    GLM_FUNC_DECL tvec2< T, defaultp > diskRand(T Radius)
    Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a...
    diff --git a/doc/api/a00097.html b/doc/api/a00097.html index f7dc68ad..40ee8abe 100644 --- a/doc/api/a00097.html +++ b/doc/api/a00097.html @@ -3,8 +3,8 @@ - -GLM: projection.hpp File Reference + +0.9.6: range.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,48 +41,32 @@
    -
    -
    projection.hpp File Reference
    +
    range.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - -

    -Functions

    template<typename vecType >
    vecType proj (vecType const &x, vecType const &Normal)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_projection

    -
    Date
    2005-12-21 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +

    GLM_GTX_range

    +
    Date
    2014-09-19 / 2014-09-19
    +
    Author
    Joshua Moerman
    -

    Definition in file projection.hpp.

    +

    Definition in file range.hpp.

    diff --git a/doc/api/a00097_source.html b/doc/api/a00097_source.html index eef59d8e..e614e5ac 100644 --- a/doc/api/a00097_source.html +++ b/doc/api/a00097_source.html @@ -3,8 +3,8 @@ - -GLM: projection.hpp Source File + +0.9.6: range.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,45 +41,82 @@
    -
    projection.hpp
    +
    range.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_projection
    -
    39 #define GLM_GTX_projection
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_projection extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename vecType>
    -
    56  vecType proj(
    -
    57  vecType const & x,
    -
    58  vecType const & Normal);
    -
    59 
    -
    61 }//namespace glm
    +
    37 #pragma once
    +
    38 
    +
    39 // Dependencies
    +
    40 #include "../detail/setup.hpp"
    +
    41 
    +
    42 #if !GLM_HAS_RANGE_FOR
    +
    43 # error "GLM_GTX_range requires C++11 suppport or 'range for'"
    +
    44 #endif
    +
    45 
    +
    46 #include "../gtc/type_ptr.hpp"
    +
    47 
    +
    48 namespace glm{
    +
    49 namespace detail
    +
    50 {
    +
    51  /* The glm types provide a .length() member, but for matrices
    +
    52  this only defines the number of columns, so we need to work around this */
    +
    53  template <typename T, precision P>
    +
    54  detail::component_count_t number_of_elements_(tvec2<T, P> const & v){
    +
    55  return detail::component_count(v);
    +
    56  }
    +
    57 
    +
    58  template <typename T, precision P>
    +
    59  detail::component_count_t number_of_elements_(tvec3<T, P> const & v){
    +
    60  return detail::component_count(v);
    +
    61  }
    62 
    -
    63 #include "projection.inl"
    -
    64 
    -
    65 #endif//GLM_GTX_projection
    -
    vecType proj(vecType const &x, vecType const &Normal)
    Projects x on Normal.
    +
    63  template <typename T, precision P>
    +
    64  detail::component_count_t number_of_elements_(tvec4<T, P> const & v){
    +
    65  return detail::component_count(v);
    +
    66  }
    +
    67 
    +
    68  template <typename genType>
    +
    69  detail::component_count_t number_of_elements_(genType const & m){
    +
    70  return detail::component_count(m) * detail::component_count(m[0]);
    +
    71  }
    +
    72 }//namespace
    +
    73 
    +
    76 
    +
    77  template <typename genType>
    +
    78  const typename genType::value_type * begin(genType const & v){
    +
    79  return value_ptr(v);
    +
    80  }
    +
    81 
    +
    82  template <typename genType>
    +
    83  const typename genType::value_type * end(genType const & v){
    +
    84  return begin(v) + detail::number_of_elements_(v);
    +
    85  }
    +
    86 
    +
    87  template <typename genType>
    +
    88  typename genType::value_type * begin(genType& v){
    +
    89  return value_ptr(v);
    +
    90  }
    +
    91 
    +
    92  template <typename genType>
    +
    93  typename genType::value_type * end(genType& v){
    +
    94  return begin(v) + detail::number_of_elements_(v);
    +
    95  }
    +
    96 
    +
    98 }//namespace glm
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &vec)
    Return the constant address to the data of the input parameter.
    diff --git a/doc/api/a00098.html b/doc/api/a00098.html index 0720d17e..23f6b355 100644 --- a/doc/api/a00098.html +++ b/doc/api/a00098.html @@ -3,8 +3,8 @@ - -GLM: quaternion.hpp File Reference + +0.9.6: raw_data.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,135 +41,47 @@
    -
    gtc/quaternion.hpp File Reference
    +
    raw_data.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + +

    -Functions

    template<typename T , precision P>
    GLM_FUNC_DECL T angle (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > angleAxis (T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > axis (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > conjugate (detail::tquat< T, P > const &q)
     
    template<typename T , precision P, template< typename, precision > class quatType>
    GLM_FUNC_DECL T dot (quatType< T, P > const &x, quatType< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    equal (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > eulerAngles (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    greaterThan (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    greaterThanEqual (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > inverse (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T length (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > lerp (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    lessThan (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    lessThanEqual (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat3x3
    -< T, P > 
    mat3_cast (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    mat4_cast (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > mix (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > normalize (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    notEqual (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T pitch (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > quat_cast (detail::tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > quat_cast (detail::tmat4x4< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T roll (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > rotate (detail::tquat< T, P > const &q, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > slerp (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T yaw (detail::tquat< T, P > const &x)
     

    +Typedefs

    typedef detail::uint8 byte
     
    typedef detail::uint32 dword
     
    typedef detail::uint64 qword
     
    typedef detail::uint16 word
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_quaternion

    -
    Date
    2009-05-21 / 2012-12-20
    +

    GLM_GTX_raw_data

    +
    Date
    2008-11-19 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -gtc_half_float (dependence)
    -
    -GLM_GTC_constants (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file gtc/quaternion.hpp.

    +

    Definition in file raw_data.hpp.

    diff --git a/doc/api/a00098_source.html b/doc/api/a00098_source.html index 71b41d5e..fb37a78f 100644 --- a/doc/api/a00098_source.html +++ b/doc/api/a00098_source.html @@ -3,8 +3,8 @@ - -GLM: quaternion.hpp Source File + +0.9.6: raw_data.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,290 +41,50 @@
    -
    gtc/quaternion.hpp
    +
    raw_data.hpp
    Go to the documentation of this file.
    1 
    -
    40 #ifndef GLM_GTC_quaternion
    -
    41 #define GLM_GTC_quaternion
    -
    42 
    -
    43 // Dependency:
    -
    44 #include "../mat3x3.hpp"
    -
    45 #include "../mat4x4.hpp"
    -
    46 #include "../vec3.hpp"
    -
    47 #include "../vec4.hpp"
    -
    48 #include "../gtc/constants.hpp"
    -
    49 
    -
    50 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    51 # pragma message("GLM: GLM_GTC_quaternion extension included")
    -
    52 #endif
    -
    53 
    -
    54 namespace glm{
    -
    55 namespace detail
    -
    56 {
    -
    57  template <typename T, precision P>
    -
    58  struct tquat
    -
    59  {
    -
    60  enum ctor{null};
    -
    61 
    -
    62  typedef tvec4<bool, P> bool_type;
    -
    63 
    -
    64  public:
    -
    65  T x, y, z, w;
    -
    66 
    -
    67  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependencies
    +
    41 #include "../detail/setup.hpp"
    +
    42 #include "../detail/type_int.hpp"
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_raw_data extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  typedef detail::uint8 byte;
    +
    56 
    +
    59  typedef detail::uint16 word;
    +
    60 
    +
    63  typedef detail::uint32 dword;
    +
    64 
    +
    67  typedef detail::uint64 qword;
    68 
    -
    69  // Constructors
    -
    70  GLM_FUNC_DECL tquat();
    -
    71  template <typename U, precision Q>
    -
    72  GLM_FUNC_DECL explicit tquat(
    -
    73  tquat<U, Q> const & q);
    -
    74  GLM_FUNC_DECL explicit tquat(
    -
    75  T const & s,
    -
    76  tvec3<T, P> const & v);
    -
    77  GLM_FUNC_DECL explicit tquat(
    -
    78  T const & w,
    -
    79  T const & x,
    -
    80  T const & y,
    -
    81  T const & z);
    -
    82 
    -
    83 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    84  template <typename U>
    -
    85  GLM_FUNC_DECL tquat(std::initializer_list<U> l);
    -
    86 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    87 
    -
    88  // Convertions
    -
    89 
    -
    96  GLM_FUNC_DECL explicit tquat(
    -
    97  detail::tvec3<T, P> const & u,
    -
    98  detail::tvec3<T, P> const & v);
    -
    100  GLM_FUNC_DECL explicit tquat(
    -
    101  tvec3<T, P> const & eulerAngles);
    -
    102  GLM_FUNC_DECL explicit tquat(
    -
    103  tmat3x3<T, P> const & m);
    -
    104  GLM_FUNC_DECL explicit tquat(
    -
    105  tmat4x4<T, P> const & m);
    -
    106 
    -
    107  // Accesses
    -
    108  GLM_FUNC_DECL T & operator[](length_t i);
    -
    109  GLM_FUNC_DECL T const & operator[](length_t i) const;
    -
    110 
    -
    111  // Operators
    -
    112  GLM_FUNC_DECL tquat<T, P> & operator+=(tquat<T, P> const & q);
    -
    113  GLM_FUNC_DECL tquat<T, P> & operator*=(tquat<T, P> const & q);
    -
    114  GLM_FUNC_DECL tquat<T, P> & operator*=(T const & s);
    -
    115  GLM_FUNC_DECL tquat<T, P> & operator/=(T const & s);
    -
    116  };
    -
    117 
    -
    118  template <typename T, precision P>
    -
    119  GLM_FUNC_DECL detail::tquat<T, P> operator- (
    -
    120  detail::tquat<T, P> const & q);
    -
    121 
    -
    122  template <typename T, precision P>
    -
    123  GLM_FUNC_DECL detail::tquat<T, P> operator+ (
    -
    124  detail::tquat<T, P> const & q,
    -
    125  detail::tquat<T, P> const & p);
    -
    126 
    -
    127  template <typename T, precision P>
    -
    128  GLM_FUNC_DECL detail::tquat<T, P> operator* (
    -
    129  detail::tquat<T, P> const & q,
    -
    130  detail::tquat<T, P> const & p);
    -
    131 
    -
    132  template <typename T, precision P>
    -
    133  GLM_FUNC_DECL detail::tvec3<T, P> operator* (
    -
    134  detail::tquat<T, P> const & q,
    -
    135  detail::tvec3<T, P> const & v);
    -
    136 
    -
    137  template <typename T, precision P>
    -
    138  GLM_FUNC_DECL detail::tvec3<T, P> operator* (
    -
    139  detail::tvec3<T, P> const & v,
    -
    140  detail::tquat<T, P> const & q);
    -
    141 
    -
    142  template <typename T, precision P>
    -
    143  GLM_FUNC_DECL detail::tvec4<T, P> operator* (
    -
    144  detail::tquat<T, P> const & q,
    -
    145  detail::tvec4<T, P> const & v);
    -
    146 
    -
    147  template <typename T, precision P>
    -
    148  GLM_FUNC_DECL detail::tvec4<T, P> operator* (
    -
    149  detail::tvec4<T, P> const & v,
    -
    150  detail::tquat<T, P> const & q);
    -
    151 
    -
    152  template <typename T, precision P>
    -
    153  GLM_FUNC_DECL detail::tquat<T, P> operator* (
    -
    154  detail::tquat<T, P> const & q,
    -
    155  T const & s);
    -
    156 
    -
    157  template <typename T, precision P>
    -
    158  GLM_FUNC_DECL detail::tquat<T, P> operator* (
    -
    159  T const & s,
    -
    160  detail::tquat<T, P> const & q);
    -
    161 
    -
    162  template <typename T, precision P>
    -
    163  GLM_FUNC_DECL detail::tquat<T, P> operator/ (
    -
    164  detail::tquat<T, P> const & q,
    -
    165  T const & s);
    -
    166 
    -
    167 } //namespace detail
    -
    168 
    -
    171 
    -
    175  template <typename T, precision P>
    -
    176  GLM_FUNC_DECL T length(
    -
    177  detail::tquat<T, P> const & q);
    -
    178 
    -
    182  template <typename T, precision P>
    -
    183  GLM_FUNC_DECL detail::tquat<T, P> normalize(
    -
    184  detail::tquat<T, P> const & q);
    -
    185 
    -
    189  template <typename T, precision P, template <typename, precision> class quatType>
    -
    190  GLM_FUNC_DECL T dot(
    -
    191  quatType<T, P> const & x,
    -
    192  quatType<T, P> const & y);
    -
    193 
    -
    204  template <typename T, precision P>
    -
    205  GLM_FUNC_DECL detail::tquat<T, P> mix(
    -
    206  detail::tquat<T, P> const & x,
    -
    207  detail::tquat<T, P> const & y,
    -
    208  T const & a);
    -
    209 
    -
    218  template <typename T, precision P>
    -
    219  GLM_FUNC_DECL detail::tquat<T, P> lerp(
    -
    220  detail::tquat<T, P> const & x,
    -
    221  detail::tquat<T, P> const & y,
    -
    222  T const & a);
    -
    223 
    -
    232  template <typename T, precision P>
    -
    233  GLM_FUNC_DECL detail::tquat<T, P> slerp(
    -
    234  detail::tquat<T, P> const & x,
    -
    235  detail::tquat<T, P> const & y,
    -
    236  T const & a);
    -
    237 
    -
    241  template <typename T, precision P>
    -
    242  GLM_FUNC_DECL detail::tquat<T, P> conjugate(
    -
    243  detail::tquat<T, P> const & q);
    -
    244 
    -
    248  template <typename T, precision P>
    -
    249  GLM_FUNC_DECL detail::tquat<T, P> inverse(
    -
    250  detail::tquat<T, P> const & q);
    -
    251 
    -
    259  template <typename T, precision P>
    -
    260  GLM_FUNC_DECL detail::tquat<T, P> rotate(
    -
    261  detail::tquat<T, P> const & q,
    -
    262  T const & angle,
    -
    263  detail::tvec3<T, P> const & axis);
    -
    264 
    -
    269  template <typename T, precision P>
    -
    270  GLM_FUNC_DECL detail::tvec3<T, P> eulerAngles(
    -
    271  detail::tquat<T, P> const & x);
    -
    272 
    -
    276  template <typename T, precision P>
    -
    277  GLM_FUNC_DECL T roll(detail::tquat<T, P> const & x);
    -
    278 
    -
    282  template <typename T, precision P>
    -
    283  GLM_FUNC_DECL T pitch(detail::tquat<T, P> const & x);
    -
    284 
    -
    288  template <typename T, precision P>
    -
    289  GLM_FUNC_DECL T yaw(detail::tquat<T, P> const & x);
    -
    290 
    -
    294  template <typename T, precision P>
    -
    295  GLM_FUNC_DECL detail::tmat3x3<T, P> mat3_cast(
    -
    296  detail::tquat<T, P> const & x);
    -
    297 
    -
    301  template <typename T, precision P>
    -
    302  GLM_FUNC_DECL detail::tmat4x4<T, P> mat4_cast(
    -
    303  detail::tquat<T, P> const & x);
    -
    304 
    -
    308  template <typename T, precision P>
    -
    309  GLM_FUNC_DECL detail::tquat<T, P> quat_cast(
    -
    310  detail::tmat3x3<T, P> const & x);
    -
    311 
    -
    315  template <typename T, precision P>
    -
    316  GLM_FUNC_DECL detail::tquat<T, P> quat_cast(
    -
    317  detail::tmat4x4<T, P> const & x);
    -
    318 
    -
    322  template <typename T, precision P>
    -
    323  GLM_FUNC_DECL T angle(detail::tquat<T, P> const & x);
    -
    324 
    -
    328  template <typename T, precision P>
    -
    329  GLM_FUNC_DECL detail::tvec3<T, P> axis(
    -
    330  detail::tquat<T, P> const & x);
    -
    331 
    -
    338  template <typename T, precision P>
    -
    339  GLM_FUNC_DECL detail::tquat<T, P> angleAxis(
    -
    340  T const & angle,
    -
    341  detail::tvec3<T, P> const & axis);
    -
    342 
    -
    348  template <typename T, precision P>
    -
    349  GLM_FUNC_DECL detail::tvec4<bool, P> lessThan(
    -
    350  detail::tquat<T, P> const & x,
    -
    351  detail::tquat<T, P> const & y);
    -
    352 
    -
    358  template <typename T, precision P>
    -
    359  GLM_FUNC_DECL detail::tvec4<bool, P> lessThanEqual(
    -
    360  detail::tquat<T, P> const & x,
    -
    361  detail::tquat<T, P> const & y);
    -
    362 
    -
    368  template <typename T, precision P>
    -
    369  GLM_FUNC_DECL detail::tvec4<bool, P> greaterThan(
    -
    370  detail::tquat<T, P> const & x,
    -
    371  detail::tquat<T, P> const & y);
    -
    372 
    -
    378  template <typename T, precision P>
    -
    379  GLM_FUNC_DECL detail::tvec4<bool, P> greaterThanEqual(
    -
    380  detail::tquat<T, P> const & x,
    -
    381  detail::tquat<T, P> const & y);
    -
    382 
    -
    388  template <typename T, precision P>
    -
    389  GLM_FUNC_DECL detail::tvec4<bool, P> equal(
    -
    390  detail::tquat<T, P> const & x,
    -
    391  detail::tquat<T, P> const & y);
    -
    392 
    -
    398  template <typename T, precision P>
    -
    399  GLM_FUNC_DECL detail::tvec4<bool, P> notEqual(
    -
    400  detail::tquat<T, P> const & x,
    -
    401  detail::tquat<T, P> const & y);
    -
    402 
    -
    404 } //namespace glm
    -
    405 
    -
    406 #include "quaternion.inl"
    -
    407 
    -
    408 #endif//GLM_GTC_quaternion
    -
    GLM_FUNC_DECL T dot(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the dot product of x and y, i.e., result = x * y.
    -
    GLM_FUNC_DECL vecType< T, P >::bool_type notEqual(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x == y.
    -
    GLM_FUNC_DECL detail::tquat< T, P > lerp(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Linear interpolation of two quaternions.
    -
    GLM_FUNC_DECL detail::tquat< T, P > angleAxis(T const &angle, detail::tvec3< T, P > const &axis)
    Build a quaternion from an angle and a normalized axis.
    -
    GLM_FUNC_DECL detail::tquat< T, P > quat_cast(detail::tmat3x3< T, P > const &x)
    Converts a 3 * 3 matrix to a quaternion.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > rotate(detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
    Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
    -
    GLM_FUNC_DECL genTypeT mix(genTypeT const &x, genTypeT const &y, genTypeU const &a)
    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > eulerAngles(detail::tquat< T, P > const &x)
    Returns euler angles, yitch as x, yaw as y, roll as z.
    -
    GLM_FUNC_DECL vecType< T, P >::bool_type greaterThanEqual(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x &gt;= y.
    -
    GLM_FUNC_DECL genType normalize(genType const &x)
    Returns a vector in the same direction as x but with length of 1.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > mat4_cast(detail::tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    -
    GLM_FUNC_DECL T roll(detail::tquat< T, P > const &x)
    Returns roll value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees ot...
    -
    GLM_FUNC_DECL detail::tvec4< bool, P > lessThan(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
    Returns the component-wise comparison result of x &lt; y.
    -
    GLM_FUNC_DECL detail::tmat3x3< T, P > mat3_cast(detail::tquat< T, P > const &x)
    Converts a quaternion to a 3 * 3 matrix.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > axis(detail::tquat< T, P > const &x)
    Returns the q rotation axis.
    -
    GLM_FUNC_DECL detail::tvec4< bool, P > equal(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
    Returns the component-wise comparison of result x == y.
    -
    GLM_FUNC_DECL detail::tquat< T, P > slerp(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Spherical linear interpolation of two quaternions.
    -
    GLM_FUNC_DECL T pitch(detail::tquat< T, P > const &x)
    Returns pitch value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees o...
    -
    GLM_FUNC_DECL detail::tquat< T, P > conjugate(detail::tquat< T, P > const &q)
    Returns the q conjugate.
    -
    GLM_FUNC_DECL vecType< T, P >::bool_type greaterThan(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison of result x &gt; y.
    -
    GLM_FUNC_DECL T yaw(detail::tquat< T, P > const &x)
    Returns yaw value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees oth...
    -
    GLM_FUNC_DECL detail::tquat< T, P > inverse(detail::tquat< T, P > const &q)
    Returns the q inverse.
    -
    GLM_FUNC_DECL vecType< T, P >::bool_type lessThanEqual(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the component-wise comparison result of x &lt; y.
    +
    70 }// namespace glm
    +
    71 
    +
    72 #include "raw_data.inl"
    +
    detail::uint32 dword
    Type for dword numbers.
    Definition: raw_data.hpp:63
    +
    detail::uint64 qword
    Type for qword numbers.
    Definition: raw_data.hpp:67
    +
    Definition: _noise.hpp:31
    +
    detail::uint16 word
    Type for word numbers.
    Definition: raw_data.hpp:59
    +
    detail::uint8 byte
    Type for byte numbers.
    Definition: raw_data.hpp:55
    diff --git a/doc/api/a00099.html b/doc/api/a00099.html index 26a7a3a5..5433db41 100644 --- a/doc/api/a00099.html +++ b/doc/api/a00099.html @@ -3,8 +3,8 @@ - -GLM: quaternion.hpp File Reference + +0.9.6: reciprocal.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,101 +41,75 @@
    -
    gtx/quaternion.hpp File Reference
    +
    reciprocal.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > cross (detail::tquat< T, P > const &q, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tvec3< T, P > cross (detail::tvec3< T, P > const &v, detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tquat< T, P > exp (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    extractRealComponent (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tquat< T, P > fastMix (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    detail::tquat< T, P > intermediate (detail::tquat< T, P > const &prev, detail::tquat< T, P > const &curr, detail::tquat< T, P > const &next)
     
    template<typename T , precision P>
    length2 (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tquat< T, P > log (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tquat< T, P > pow (detail::tquat< T, P > const &x, T const &y)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotate (detail::tquat< T, P > const &q, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotate (detail::tquat< T, P > const &q, detail::tvec4< T, P > const &v)
     
    template<typename T , precision P>
    detail::tquat< T, P > rotation (detail::tvec3< T, P > const &orig, detail::tvec3< T, P > const &dest)
     
    template<typename T , precision P>
    detail::tquat< T, P > shortMix (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    detail::tquat< T, P > squad (detail::tquat< T, P > const &q1, detail::tquat< T, P > const &q2, detail::tquat< T, P > const &s1, detail::tquat< T, P > const &s2, T const &h)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > toMat3 (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > toMat4 (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > toQuat (detail::tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > toQuat (detail::tmat4x4< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acot (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acoth (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsc (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsch (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asec (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asech (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType cot (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType coth (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType csc (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType csch (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sec (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sech (genType const &angle)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_quaternion

    -
    Date
    2005-12-21 / 2011-06-07
    +

    GLM_GTC_reciprocal

    +
    Date
    2008-10-09 / 2012-01-25
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_extented_min_max (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file gtx/quaternion.hpp.

    +

    Definition in file reciprocal.hpp.

    diff --git a/doc/api/a00099_source.html b/doc/api/a00099_source.html index f5508854..b793dabb 100644 --- a/doc/api/a00099_source.html +++ b/doc/api/a00099_source.html @@ -3,8 +3,8 @@ - -GLM: quaternion.hpp Source File + +0.9.6: reciprocal.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,151 +41,86 @@
    -
    gtx/quaternion.hpp
    +
    reciprocal.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_quaternion
    -
    40 #define GLM_GTX_quaternion
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 #include "../gtc/constants.hpp"
    -
    45 #include "../gtc/quaternion.hpp"
    -
    46 #include "../gtx/norm.hpp"
    -
    47 
    -
    48 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    49 # pragma message("GLM: GLM_GTX_quaternion extension included")
    -
    50 #endif
    -
    51 
    -
    52 namespace glm
    -
    53 {
    -
    56 
    -
    60  template<typename T, precision P>
    -
    61  detail::tvec3<T, P> cross(
    -
    62  detail::tquat<T, P> const & q,
    -
    63  detail::tvec3<T, P> const & v);
    -
    64 
    -
    68  template<typename T, precision P>
    -
    69  detail::tvec3<T, P> cross(
    -
    70  detail::tvec3<T, P> const & v,
    -
    71  detail::tquat<T, P> const & q);
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependencies
    +
    41 #include "../detail/setup.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTC_reciprocal extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    56  template <typename genType>
    +
    57  GLM_FUNC_DECL genType sec(genType const & angle);
    +
    58 
    +
    63  template <typename genType>
    +
    64  GLM_FUNC_DECL genType csc(genType const & angle);
    +
    65 
    +
    70  template <typename genType>
    +
    71  GLM_FUNC_DECL genType cot(genType const & angle);
    72 
    -
    77  template<typename T, precision P>
    -
    78  detail::tquat<T, P> squad(
    -
    79  detail::tquat<T, P> const & q1,
    -
    80  detail::tquat<T, P> const & q2,
    -
    81  detail::tquat<T, P> const & s1,
    -
    82  detail::tquat<T, P> const & s2,
    -
    83  T const & h);
    -
    84 
    -
    88  template<typename T, precision P>
    -
    89  detail::tquat<T, P> intermediate(
    -
    90  detail::tquat<T, P> const & prev,
    -
    91  detail::tquat<T, P> const & curr,
    -
    92  detail::tquat<T, P> const & next);
    -
    93 
    -
    97  template<typename T, precision P>
    -
    98  detail::tquat<T, P> exp(
    -
    99  detail::tquat<T, P> const & q);
    -
    100 
    -
    104  template<typename T, precision P>
    -
    105  detail::tquat<T, P> log(
    -
    106  detail::tquat<T, P> const & q);
    -
    107 
    -
    111  template<typename T, precision P>
    -
    112  detail::tquat<T, P> pow(
    -
    113  detail::tquat<T, P> const & x,
    -
    114  T const & y);
    -
    115 
    -
    119  //template<typename T, precision P>
    -
    120  //detail::tquat<T, P> sqrt(
    -
    121  // detail::tquat<T, P> const & q);
    -
    122 
    -
    126  template<typename T, precision P>
    -
    127  detail::tvec3<T, P> rotate(
    -
    128  detail::tquat<T, P> const & q,
    -
    129  detail::tvec3<T, P> const & v);
    -
    130 
    -
    134  template<typename T, precision P>
    -
    135  detail::tvec4<T, P> rotate(
    -
    136  detail::tquat<T, P> const & q,
    -
    137  detail::tvec4<T, P> const & v);
    -
    138 
    -
    142  template<typename T, precision P>
    - -
    144  detail::tquat<T, P> const & q);
    -
    145 
    -
    149  template<typename T, precision P>
    -
    150  detail::tmat3x3<T, P> toMat3(
    -
    151  detail::tquat<T, P> const & x){return mat3_cast(x);}
    -
    152 
    -
    156  template<typename T, precision P>
    -
    157  detail::tmat4x4<T, P> toMat4(
    -
    158  detail::tquat<T, P> const & x){return mat4_cast(x);}
    -
    159 
    -
    163  template<typename T, precision P>
    -
    164  detail::tquat<T, P> toQuat(
    -
    165  detail::tmat3x3<T, P> const & x){return quat_cast(x);}
    -
    166 
    -
    170  template<typename T, precision P>
    -
    171  detail::tquat<T, P> toQuat(
    -
    172  detail::tmat4x4<T, P> const & x){return quat_cast(x);}
    -
    173 
    -
    177  template<typename T, precision P>
    -
    178  detail::tquat<T, P> shortMix(
    -
    179  detail::tquat<T, P> const & x,
    -
    180  detail::tquat<T, P> const & y,
    -
    181  T const & a);
    -
    182 
    -
    186  template<typename T, precision P>
    -
    187  detail::tquat<T, P> fastMix(
    -
    188  detail::tquat<T, P> const & x,
    -
    189  detail::tquat<T, P> const & y,
    -
    190  T const & a);
    -
    191 
    -
    197  template<typename T, precision P>
    -
    198  detail::tquat<T, P> rotation(
    -
    199  detail::tvec3<T, P> const & orig,
    -
    200  detail::tvec3<T, P> const & dest);
    -
    201 
    -
    205  template<typename T, precision P>
    -
    206  T length2(detail::tquat<T, P> const & q);
    -
    207 
    -
    209 }//namespace glm
    -
    210 
    -
    211 #include "quaternion.inl"
    -
    212 
    -
    213 #endif//GLM_GTX_quaternion
    -
    detail::tquat< T, P > toQuat(detail::tmat3x3< T, P > const &x)
    Converts a 3 * 3 matrix to a quaternion.
    -
    T extractRealComponent(detail::tquat< T, P > const &q)
    Extract the real component of a quaternion.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > cross(detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
    Returns the cross product of x and y.
    -
    GLM_FUNC_DECL detail::tquat< T, P > quat_cast(detail::tmat3x3< T, P > const &x)
    Converts a 3 * 3 matrix to a quaternion.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > rotate(detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
    Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
    -
    detail::tmat4x4< T, P > toMat4(detail::tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    -
    GLM_FUNC_DECL genType exp(genType const &x)
    Returns the natural exponentiation of x, i.e., e^x.
    -
    detail::tquat< T, P > intermediate(detail::tquat< T, P > const &prev, detail::tquat< T, P > const &curr, detail::tquat< T, P > const &next)
    Returns an intermediate control point for squad interpolation.
    -
    detail::tquat< T, P > shortMix(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Quaternion interpolation using the rotation short path.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > mat4_cast(detail::tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    -
    T length2(T const &x)
    Returns the squared length of x.
    -
    detail::tmat3x3< T, P > toMat3(detail::tquat< T, P > const &x)
    Converts a quaternion to a 3 * 3 matrix.
    -
    detail::tquat< T, P > squad(detail::tquat< T, P > const &q1, detail::tquat< T, P > const &q2, detail::tquat< T, P > const &s1, detail::tquat< T, P > const &s2, T const &h)
    Compute a point on a path according squad equation.
    -
    GLM_FUNC_DECL genType pow(genType const &base, genType const &exponent)
    Returns &#39;base&#39; raised to the power &#39;exponent&#39;.
    -
    GLM_FUNC_DECL detail::tmat3x3< T, P > mat3_cast(detail::tquat< T, P > const &x)
    Converts a quaternion to a 3 * 3 matrix.
    -
    detail::tquat< T, P > fastMix(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Quaternion normalized linear interpolation.
    -
    detail::tquat< T, P > rotation(detail::tvec3< T, P > const &orig, detail::tvec3< T, P > const &dest)
    Compute the rotation between two vectors.
    -
    GLM_FUNC_DECL genType log(genType const &x)
    Returns the natural logarithm of x, i.e., returns the value y which satisfies the equation x = e^y...
    +
    76  template <typename genType>
    +
    77  GLM_FUNC_DECL genType asec(genType const & x);
    +
    78 
    +
    82  template <typename genType>
    +
    83  GLM_FUNC_DECL genType acsc(genType const & x);
    +
    84 
    +
    88  template <typename genType>
    +
    89  GLM_FUNC_DECL genType acot(genType const & x);
    +
    90 
    +
    94  template <typename genType>
    +
    95  GLM_FUNC_DECL genType sech(genType const & angle);
    +
    96 
    +
    100  template <typename genType>
    +
    101  GLM_FUNC_DECL genType csch(genType const & angle);
    +
    102 
    +
    106  template <typename genType>
    +
    107  GLM_FUNC_DECL genType coth(genType const & angle);
    +
    108 
    +
    112  template <typename genType>
    +
    113  GLM_FUNC_DECL genType asech(genType const & x);
    +
    114 
    +
    118  template <typename genType>
    +
    119  GLM_FUNC_DECL genType acsch(genType const & x);
    +
    120 
    +
    124  template <typename genType>
    +
    125  GLM_FUNC_DECL genType acoth(genType const & x);
    +
    126 
    +
    128 }//namespace glm
    +
    129 
    +
    130 #include "reciprocal.inl"
    +
    GLM_FUNC_DECL genType sech(genType const &angle)
    Secant hyperbolic function.
    +
    GLM_FUNC_DECL genType cot(genType const &angle)
    Cotangent function.
    +
    GLM_FUNC_DECL genType csch(genType const &angle)
    Cosecant hyperbolic function.
    +
    GLM_FUNC_DECL genType asech(genType const &x)
    Inverse secant hyperbolic function.
    +
    GLM_FUNC_DECL genType asec(genType const &x)
    Inverse secant function.
    +
    GLM_FUNC_DECL genType csc(genType const &angle)
    Cosecant function.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType sec(genType const &angle)
    Secant function.
    +
    GLM_FUNC_DECL genType acot(genType const &x)
    Inverse cotangent function.
    +
    GLM_FUNC_DECL genType acoth(genType const &x)
    Inverse cotangent hyperbolic function.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_DECL genType acsc(genType const &x)
    Inverse cosecant function.
    +
    GLM_FUNC_DECL genType acsch(genType const &x)
    Inverse cosecant hyperbolic function.
    +
    GLM_FUNC_DECL genType coth(genType const &angle)
    Cotangent hyperbolic function.
    diff --git a/doc/api/a00100.html b/doc/api/a00100.html index 9eda22b9..9d8b52cb 100644 --- a/doc/api/a00100.html +++ b/doc/api/a00100.html @@ -3,8 +3,8 @@ - -GLM: random.hpp File Reference + +0.9.6: rotate_normalized_axis.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,71 +41,49 @@
    -
    gtc/random.hpp File Reference
    +
    rotate_normalized_axis.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - + + + + + +

    Functions

    template<typename T >
    GLM_FUNC_DECL detail::tvec3< T,
    -defaultp > 
    ballRand (T const &Radius)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec2< T,
    -defaultp > 
    circularRand (T const &Radius)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec2< T,
    -defaultp > 
    diskRand (T const &Radius)
     
    template<typename genType >
    GLM_FUNC_DECL genType gaussRand (genType const &Mean, genType const &Deviation)
     
    template<typename genType >
    GLM_FUNC_DECL genType linearRand (genType const &Min, genType const &Max)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec3< T,
    -defaultp > 
    sphericalRand (T const &Radius)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rotateNormalizedAxis (tmat4x4< T, P > const &m, T const &angle, tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > rotateNormalizedAxis (tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_random

    -
    Date
    2011-09-18 / 2011-09-18
    +

    GLM_GTX_rotate_normalized_axis

    +
    Date
    2012-12-13 / 2012-12-13
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -gtc_half_float (dependence)
    +GLM_GTC_matrix_transform
    -gtx_random (extended)
    +GLM_GTC_quaternion
    -

    Definition in file gtc/random.hpp.

    +

    Definition in file rotate_normalized_axis.hpp.

    diff --git a/doc/api/a00100_source.html b/doc/api/a00100_source.html index 9b3fcab7..4e588286 100644 --- a/doc/api/a00100_source.html +++ b/doc/api/a00100_source.html @@ -3,8 +3,8 @@ - -GLM: random.hpp Source File + +0.9.6: rotate_normalized_axis.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,72 +41,54 @@
    -
    gtc/random.hpp
    +
    rotate_normalized_axis.hpp
    Go to the documentation of this file.
    1 
    -
    40 #ifndef GLM_GTC_random
    -
    41 #define GLM_GTC_random
    -
    42 
    -
    43 // Dependency:
    -
    44 #include "../vec2.hpp"
    -
    45 #include "../vec3.hpp"
    +
    40 #pragma once
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/epsilon.hpp"
    +
    45 #include "../gtc/quaternion.hpp"
    46 
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    48 # pragma message("GLM: GLM_GTC_random extension included")
    -
    49 #endif
    -
    50 
    -
    51 namespace glm
    +
    48 # pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    52 {
    -
    55 
    -
    62  template <typename genType>
    -
    63  GLM_FUNC_DECL genType linearRand(
    -
    64  genType const & Min,
    -
    65  genType const & Max);
    -
    66 
    -
    72  template <typename genType>
    -
    73  GLM_FUNC_DECL genType gaussRand(
    -
    74  genType const & Mean,
    -
    75  genType const & Deviation);
    -
    76 
    -
    81  template <typename T>
    -
    82  GLM_FUNC_DECL detail::tvec2<T, defaultp> circularRand(
    -
    83  T const & Radius);
    -
    84 
    -
    89  template <typename T>
    -
    90  GLM_FUNC_DECL detail::tvec3<T, defaultp> sphericalRand(
    -
    91  T const & Radius);
    -
    92 
    -
    97  template <typename T>
    -
    98  GLM_FUNC_DECL detail::tvec2<T, defaultp> diskRand(
    -
    99  T const & Radius);
    -
    100 
    -
    105  template <typename T>
    -
    106  GLM_FUNC_DECL detail::tvec3<T, defaultp> ballRand(
    -
    107  T const & Radius);
    -
    108 
    -
    110 }//namespace glm
    -
    111 
    -
    112 #include "random.inl"
    -
    113 
    -
    114 #endif//GLM_GTC_random
    -
    GLM_FUNC_DECL detail::tvec2< T, defaultp > circularRand(T const &Radius)
    Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius...
    -
    GLM_FUNC_DECL detail::tvec3< T, defaultp > sphericalRand(T const &Radius)
    Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius...
    -
    GLM_FUNC_DECL genType gaussRand(genType const &Mean, genType const &Deviation)
    Generate random numbers in the interval [Min, Max], according a gaussian distribution.
    -
    GLM_FUNC_DECL detail::tvec3< T, defaultp > ballRand(T const &Radius)
    Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of...
    -
    GLM_FUNC_DECL genType linearRand(genType const &Min, genType const &Max)
    Generate random numbers in the interval [Min, Max], according a linear distribution.
    -
    GLM_FUNC_DECL detail::tvec2< T, defaultp > diskRand(T const &Radius)
    Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a...
    +
    55 
    +
    67  template <typename T, precision P>
    +
    68  GLM_FUNC_DECL tmat4x4<T, P> rotateNormalizedAxis(
    +
    69  tmat4x4<T, P> const & m,
    +
    70  T const & angle,
    +
    71  tvec3<T, P> const & axis);
    +
    72 
    +
    80  template <typename T, precision P>
    +
    81  GLM_FUNC_DECL tquat<T, P> rotateNormalizedAxis(
    +
    82  tquat<T, P> const & q,
    +
    83  T const & angle,
    +
    84  tvec3<T, P> const & axis);
    +
    85 
    +
    87 }//namespace glm
    +
    88 
    +
    89 #include "rotate_normalized_axis.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tquat< T, P > rotateNormalizedAxis(tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)
    Rotates a quaternion from a vector of 3 components normalized axis and an angle.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)
    Returns the q rotation axis.
    diff --git a/doc/api/a00101.html b/doc/api/a00101.html new file mode 100644 index 00000000..6c6ea654 --- /dev/null +++ b/doc/api/a00101.html @@ -0,0 +1,114 @@ + + + + + + +0.9.6: rotate_vector.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    rotate_vector.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > orientation (tvec3< T, P > const &Normal, tvec3< T, P > const &Up)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec2< T, P > rotate (tvec2< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotate (tvec3< T, P > const &v, T const &angle, tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotate (tvec4< T, P > const &v, T const &angle, tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotateX (tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotateX (tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotateY (tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotateY (tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotateZ (tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotateZ (tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > slerp (tvec3< T, P > const &x, tvec3< T, P > const &y, T const &a)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_rotate_vector

    +
    Date
    2006-11-02 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_transform (dependence)
    + +

    Definition in file rotate_vector.hpp.

    +
    + + + + diff --git a/doc/api/a00101_source.html b/doc/api/a00101_source.html index 212305c6..ee571932 100644 --- a/doc/api/a00101_source.html +++ b/doc/api/a00101_source.html @@ -3,8 +3,8 @@ - -GLM: random.hpp Source File + +0.9.6: rotate_vector.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,103 @@
    -
    gtx/random.hpp
    +
    rotate_vector.hpp
    -
    1 
    -
    24 #if(defined(GLM_MESSAGES))
    -
    25 # pragma message("GLM: GLM_GTX_random extension is deprecated, include GLM_GTC_random instead")
    -
    26 #endif
    -
    27 
    -
    28 // Promoted:
    -
    29 #include "../gtc/random.hpp"
    +Go to the documentation of this file.
    1 
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependency:
    +
    42 #include "../glm.hpp"
    +
    43 #include "../gtx/transform.hpp"
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    46 # pragma message("GLM: GLM_GTX_rotate_vector extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    61  template <typename T, precision P>
    +
    62  GLM_FUNC_DECL tvec3<T, P> slerp(
    +
    63  tvec3<T, P> const & x,
    +
    64  tvec3<T, P> const & y,
    +
    65  T const & a);
    +
    66 
    +
    69  template <typename T, precision P>
    +
    70  GLM_FUNC_DECL tvec2<T, P> rotate(
    +
    71  tvec2<T, P> const & v,
    +
    72  T const & angle);
    +
    73 
    +
    76  template <typename T, precision P>
    +
    77  GLM_FUNC_DECL tvec3<T, P> rotate(
    +
    78  tvec3<T, P> const & v,
    +
    79  T const & angle,
    +
    80  tvec3<T, P> const & normal);
    +
    81 
    +
    84  template <typename T, precision P>
    +
    85  GLM_FUNC_DECL tvec4<T, P> rotate(
    +
    86  tvec4<T, P> const & v,
    +
    87  T const & angle,
    +
    88  tvec3<T, P> const & normal);
    +
    89 
    +
    92  template <typename T, precision P>
    +
    93  GLM_FUNC_DECL tvec3<T, P> rotateX(
    +
    94  tvec3<T, P> const & v,
    +
    95  T const & angle);
    +
    96 
    +
    99  template <typename T, precision P>
    +
    100  GLM_FUNC_DECL tvec3<T, P> rotateY(
    +
    101  tvec3<T, P> const & v,
    +
    102  T const & angle);
    +
    103 
    +
    106  template <typename T, precision P>
    +
    107  GLM_FUNC_DECL tvec3<T, P> rotateZ(
    +
    108  tvec3<T, P> const & v,
    +
    109  T const & angle);
    +
    110 
    +
    113  template <typename T, precision P>
    +
    114  GLM_FUNC_DECL tvec4<T, P> rotateX(
    +
    115  tvec4<T, P> const & v,
    +
    116  T const & angle);
    +
    117 
    +
    120  template <typename T, precision P>
    +
    121  GLM_FUNC_DECL tvec4<T, P> rotateY(
    +
    122  tvec4<T, P> const & v,
    +
    123  T const & angle);
    +
    124 
    +
    127  template <typename T, precision P>
    +
    128  GLM_FUNC_DECL tvec4<T, P> rotateZ(
    +
    129  tvec4<T, P> const & v,
    +
    130  T const & angle);
    +
    131 
    +
    134  template <typename T, precision P>
    +
    135  GLM_FUNC_DECL tmat4x4<T, P> orientation(
    +
    136  tvec3<T, P> const & Normal,
    +
    137  tvec3<T, P> const & Up);
    +
    138 
    +
    140 }//namespace glm
    +
    141 
    +
    142 #include "rotate_vector.inl"
    +
    GLM_FUNC_DECL tvec4< T, P > rotate(tvec4< T, P > const &v, T const &angle, tvec3< T, P > const &normal)
    Rotate a four dimensional vector around an axis.
    +
    GLM_FUNC_DECL tvec3< T, P > slerp(tvec3< T, P > const &x, tvec3< T, P > const &y, T const &a)
    Returns Spherical interpolation between two vectors.
    +
    GLM_FUNC_DECL tvec4< T, P > rotateX(tvec4< T, P > const &v, T const &angle)
    Rotate a four dimentionnals vector around the X axis.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tvec4< T, P > rotateZ(tvec4< T, P > const &v, T const &angle)
    Rotate a four dimensional vector around the X axis.
    +
    GLM_FUNC_DECL tvec4< T, P > rotateY(tvec4< T, P > const &v, T const &angle)
    Rotate a four dimensional vector around the X axis.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_DECL tmat4x4< T, P > orientation(tvec3< T, P > const &Normal, tvec3< T, P > const &Up)
    Build a rotation matrix from a normal and a up vector.
    diff --git a/doc/api/a00102.html b/doc/api/a00102.html index ef91f47a..bcd804b1 100644 --- a/doc/api/a00102.html +++ b/doc/api/a00102.html @@ -3,8 +3,8 @@ - -GLM: raw_data.hpp File Reference + +0.9.6: round.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,53 +41,92 @@
    -
    raw_data.hpp File Reference
    +
    round.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    typedef detail::uint8 byte
     
    typedef detail::uint32 dword
     
    typedef detail::uint64 qword
     
    typedef detail::uint16 word
     

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType ceilMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > ceilMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType ceilPowerOfTwo (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > ceilPowerOfTwo (vecType< T, P > const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType floorMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > floorMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType floorPowerOfTwo (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > floorPowerOfTwo (vecType< T, P > const &value)
     
    template<typename genIUType >
    GLM_FUNC_DECL bool isMultiple (genIUType Value, genIUType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isMultiple (vecType< T, P > const &Value, T Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isMultiple (vecType< T, P > const &Value, vecType< T, P > const &Multiple)
     
    template<typename genIUType >
    GLM_FUNC_DECL bool isPowerOfTwo (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isPowerOfTwo (vecType< T, P > const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType roundMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > roundMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType roundPowerOfTwo (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > roundPowerOfTwo (vecType< T, P > const &value)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_raw_data

    -
    Date
    2008-11-19 / 2011-06-07
    +

    GLM_GTC_round

    +
    Date
    2014-11-03 / 2014-11-03
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTC_round (dependence)
    -

    Definition in file raw_data.hpp.

    +

    Definition in file round.hpp.

    diff --git a/doc/api/a00102_source.html b/doc/api/a00102_source.html index 4440b39b..fa666d1d 100644 --- a/doc/api/a00102_source.html +++ b/doc/api/a00102_source.html @@ -3,8 +3,8 @@ - -GLM: raw_data.hpp Source File + +0.9.6: round.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,51 +41,109 @@
    -
    raw_data.hpp
    +
    round.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_raw_data
    -
    39 #define GLM_GTX_raw_data
    -
    40 
    +
    39 #pragma once
    +
    40 
    41 // Dependencies
    42 #include "../detail/setup.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_raw_data extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    +
    43 #include "../detail/precision.hpp"
    +
    44 #include "../detail/_vectorize.hpp"
    +
    45 #include "../vector_relational.hpp"
    +
    46 #include "../common.hpp"
    +
    47 #include <limits>
    +
    48 
    +
    49 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    50 # pragma message("GLM: GLM_GTC_integer extension included")
    +
    51 #endif
    52 
    -
    55  typedef detail::uint8 byte;
    -
    56 
    -
    59  typedef detail::uint16 word;
    -
    60 
    -
    63  typedef detail::uint32 dword;
    -
    64 
    -
    67  typedef detail::uint64 qword;
    -
    68 
    -
    70 }// namespace glm
    -
    71 
    -
    72 #include "raw_data.inl"
    -
    73 
    -
    74 #endif//GLM_GTX_raw_data
    -
    detail::uint32 dword
    Type for dword numbers.
    Definition: raw_data.hpp:63
    -
    detail::uint64 qword
    Type for qword numbers.
    Definition: raw_data.hpp:67
    -
    detail::uint16 word
    Type for word numbers.
    Definition: raw_data.hpp:59
    -
    detail::uint8 byte
    Type for byte numbers.
    Definition: raw_data.hpp:55
    +
    53 namespace glm
    +
    54 {
    +
    57 
    +
    61  template <typename genIUType>
    +
    62  GLM_FUNC_DECL bool isPowerOfTwo(genIUType Value);
    +
    63 
    +
    67  template <typename T, precision P, template <typename, precision> class vecType>
    +
    68  GLM_FUNC_DECL vecType<bool, P> isPowerOfTwo(vecType<T, P> const & value);
    +
    69 
    +
    74  template <typename genIUType>
    +
    75  GLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType Value);
    +
    76 
    +
    81  template <typename T, precision P, template <typename, precision> class vecType>
    +
    82  GLM_FUNC_DECL vecType<T, P> ceilPowerOfTwo(vecType<T, P> const & value);
    +
    83 
    +
    88  template <typename genIUType>
    +
    89  GLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType Value);
    +
    90 
    +
    95  template <typename T, precision P, template <typename, precision> class vecType>
    +
    96  GLM_FUNC_DECL vecType<T, P> floorPowerOfTwo(vecType<T, P> const & value);
    +
    97 
    +
    101  template <typename genIUType>
    +
    102  GLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType Value);
    +
    103 
    +
    107  template <typename T, precision P, template <typename, precision> class vecType>
    +
    108  GLM_FUNC_DECL vecType<T, P> roundPowerOfTwo(vecType<T, P> const & value);
    +
    109 
    +
    113  template <typename genIUType>
    +
    114  GLM_FUNC_DECL bool isMultiple(genIUType Value, genIUType Multiple);
    +
    115 
    +
    119  template <typename T, precision P, template <typename, precision> class vecType>
    +
    120  GLM_FUNC_DECL vecType<bool, P> isMultiple(vecType<T, P> const & Value, T Multiple);
    +
    121 
    +
    125  template <typename T, precision P, template <typename, precision> class vecType>
    +
    126  GLM_FUNC_DECL vecType<bool, P> isMultiple(vecType<T, P> const & Value, vecType<T, P> const & Multiple);
    +
    127 
    +
    135  template <typename genType>
    +
    136  GLM_FUNC_DECL genType ceilMultiple(genType Source, genType Multiple);
    +
    137 
    +
    145  template <typename T, precision P, template <typename, precision> class vecType>
    +
    146  GLM_FUNC_DECL vecType<T, P> ceilMultiple(vecType<T, P> const & Source, vecType<T, P> const & Multiple);
    +
    147 
    +
    155  template <typename genType>
    +
    156  GLM_FUNC_DECL genType floorMultiple(
    +
    157  genType Source,
    +
    158  genType Multiple);
    +
    159 
    +
    167  template <typename T, precision P, template <typename, precision> class vecType>
    +
    168  GLM_FUNC_DECL vecType<T, P> floorMultiple(
    +
    169  vecType<T, P> const & Source,
    +
    170  vecType<T, P> const & Multiple);
    +
    171 
    +
    179  template <typename genType>
    +
    180  GLM_FUNC_DECL genType roundMultiple(
    +
    181  genType Source,
    +
    182  genType Multiple);
    +
    183 
    +
    191  template <typename T, precision P, template <typename, precision> class vecType>
    +
    192  GLM_FUNC_DECL vecType<T, P> roundMultiple(
    +
    193  vecType<T, P> const & Source,
    +
    194  vecType<T, P> const & Multiple);
    +
    195 
    +
    197 } //namespace glm
    +
    198 
    +
    199 #include "round.inl"
    +
    GLM_FUNC_DECL vecType< T, P > roundMultiple(vecType< T, P > const &Source, vecType< T, P > const &Multiple)
    Lower multiple number of Source.
    +
    GLM_FUNC_DECL vecType< T, P > floorPowerOfTwo(vecType< T, P > const &value)
    Return the power of two number which value is just lower the input value, round down to a power of tw...
    +
    GLM_FUNC_DECL vecType< T, P > ceilPowerOfTwo(vecType< T, P > const &value)
    Return the power of two number which value is just higher the input value, round up to a power of two...
    +
    GLM_FUNC_DECL vecType< T, P > floorMultiple(vecType< T, P > const &Source, vecType< T, P > const &Multiple)
    Lower multiple number of Source.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vecType< bool, P > isPowerOfTwo(vecType< T, P > const &value)
    Return true if the value is a power of two number.
    +
    GLM_FUNC_DECL vecType< bool, P > isMultiple(vecType< T, P > const &Value, vecType< T, P > const &Multiple)
    Return true if the 'Value' is a multiple of 'Multiple'.
    +
    GLM_FUNC_DECL vecType< T, P > ceilMultiple(vecType< T, P > const &Source, vecType< T, P > const &Multiple)
    Higher multiple number of Source.
    +
    GLM_FUNC_DECL vecType< T, P > roundPowerOfTwo(vecType< T, P > const &value)
    Return the power of two number which value is the closet to the input value.
    diff --git a/doc/api/a00103.html b/doc/api/a00103.html index 51e0206e..ef40ed34 100644 --- a/doc/api/a00103.html +++ b/doc/api/a00103.html @@ -3,8 +3,8 @@ - -GLM: reciprocal.hpp File Reference + +0.9.6: scalar_multiplication.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,81 +41,34 @@
    -
    -
    gtc/reciprocal.hpp File Reference
    +
    scalar_multiplication.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename genType >
    GLM_FUNC_DECL genType acot (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acoth (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsc (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsch (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asec (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asech (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType cot (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType coth (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType csc (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType csch (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sec (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sech (genType const &angle)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_reciprocal

    -
    Date
    2008-10-09 / 2012-01-25
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +

    GTX Extensions (Experimental)

    +
    Date
    2014-09-22 / 2014-09-22
    +
    Author
    Joshua Moerman
    +

    Enables scalar multiplication for all types

    +

    Since GLSL is very strict about types, the following (often used) combinations do not work: double * vec4 int * vec4 vec4 / int So we'll fix that! Of course "float * vec4" should remain the same (hence the enable_if magic)

    -

    Definition in file gtc/reciprocal.hpp.

    +

    Definition in file scalar_multiplication.hpp.

    diff --git a/doc/api/a00103_source.html b/doc/api/a00103_source.html index 07400363..d398971b 100644 --- a/doc/api/a00103_source.html +++ b/doc/api/a00103_source.html @@ -3,8 +3,8 @@ - -GLM: reciprocal.hpp Source File + +0.9.6: scalar_multiplication.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,88 +41,91 @@
    -
    gtc/reciprocal.hpp
    +
    scalar_multiplication.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTC_reciprocal
    -
    39 #define GLM_GTC_reciprocal
    -
    40 
    -
    41 // Dependencies
    -
    42 #include "../detail/setup.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTC_reciprocal extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    57  template <typename genType>
    -
    58  GLM_FUNC_DECL genType sec(genType const & angle);
    +
    38 #pragma once
    +
    39 
    +
    40 #include "../detail/setup.hpp"
    +
    41 
    +
    42 #if !GLM_HAS_TEMPLATE_ALIASES
    +
    43 # error "GLM_GTX_scalar_multiplication requires C++11 suppport or alias templates"
    +
    44 #endif
    +
    45 
    +
    46 #include "../vec2.hpp"
    +
    47 #include "../vec3.hpp"
    +
    48 #include "../vec4.hpp"
    +
    49 #include "../mat2x2.hpp"
    +
    50 #include <type_traits>
    +
    51 
    +
    52 namespace glm
    +
    53 {
    +
    54  template <typename T, typename Vec>
    +
    55  using return_type_scalar_multiplication = typename std::enable_if<
    +
    56  !std::is_same<T, float>::value // T may not be a float
    +
    57  && std::is_arithmetic<T>::value, Vec // But it may be an int or double (no vec3 or mat3, ...)
    +
    58  >::type;
    59 
    -
    64  template <typename genType>
    -
    65  GLM_FUNC_DECL genType csc(genType const & angle);
    -
    66 
    -
    71  template <typename genType>
    -
    72  GLM_FUNC_DECL genType cot(genType const & angle);
    -
    73 
    -
    77  template <typename genType>
    -
    78  GLM_FUNC_DECL genType asec(genType const & x);
    -
    79 
    -
    83  template <typename genType>
    -
    84  GLM_FUNC_DECL genType acsc(genType const & x);
    -
    85 
    -
    89  template <typename genType>
    -
    90  GLM_FUNC_DECL genType acot(genType const & x);
    -
    91 
    -
    95  template <typename genType>
    -
    96  GLM_FUNC_DECL genType sech(genType const & angle);
    -
    97 
    -
    101  template <typename genType>
    -
    102  GLM_FUNC_DECL genType csch(genType const & angle);
    -
    103 
    -
    107  template <typename genType>
    -
    108  GLM_FUNC_DECL genType coth(genType const & angle);
    -
    109 
    -
    113  template <typename genType>
    -
    114  GLM_FUNC_DECL genType asech(genType const & x);
    -
    115 
    -
    119  template <typename genType>
    -
    120  GLM_FUNC_DECL genType acsch(genType const & x);
    -
    121 
    -
    125  template <typename genType>
    -
    126  GLM_FUNC_DECL genType acoth(genType const & x);
    -
    127 
    -
    129 }//namespace glm
    -
    130 
    -
    131 #include "reciprocal.inl"
    -
    132 
    -
    133 #endif//GLM_GTC_reciprocal
    -
    GLM_FUNC_DECL genType acot(genType const &x)
    Inverse cotangent function.
    -
    GLM_FUNC_DECL genType acsch(genType const &x)
    Inverse cosecant hyperbolic function.
    -
    GLM_FUNC_DECL genType coth(genType const &angle)
    Cotangent hyperbolic function.
    -
    GLM_FUNC_DECL genType sech(genType const &angle)
    Secant hyperbolic function.
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    GLM_FUNC_DECL genType acoth(genType const &x)
    Inverse cotangent hyperbolic function.
    -
    GLM_FUNC_DECL genType csch(genType const &angle)
    Cosecant hyperbolic function.
    -
    GLM_FUNC_DECL genType asech(genType const &x)
    Inverse secant hyperbolic function.
    -
    GLM_FUNC_DECL genType sec(genType const &angle)
    Secant function.
    -
    GLM_FUNC_DECL genType acsc(genType const &x)
    Inverse cosecant function.
    -
    GLM_FUNC_DECL genType asec(genType const &x)
    Inverse secant function.
    -
    GLM_FUNC_DECL genType csc(genType const &angle)
    Cosecant function.
    -
    GLM_FUNC_DECL genType cot(genType const &angle)
    Cotangent function.
    +
    60 #define GLM_IMPLEMENT_SCAL_MULT(Vec) \
    +
    61  template <typename T> \
    +
    62  return_type_scalar_multiplication<T, Vec> \
    +
    63  operator*(T const & s, Vec rh){ \
    +
    64  return rh *= static_cast<float>(s); \
    +
    65  } \
    +
    66  \
    +
    67  template <typename T> \
    +
    68  return_type_scalar_multiplication<T, Vec> \
    +
    69  operator*(Vec lh, T const & s){ \
    +
    70  return lh *= static_cast<float>(s); \
    +
    71  } \
    +
    72  \
    +
    73  template <typename T> \
    +
    74  return_type_scalar_multiplication<T, Vec> \
    +
    75  operator/(Vec lh, T const & s){ \
    +
    76  return lh *= 1.0f / s; \
    +
    77  }
    +
    78 
    +
    79 GLM_IMPLEMENT_SCAL_MULT(vec2)
    +
    80 GLM_IMPLEMENT_SCAL_MULT(vec3)
    +
    81 GLM_IMPLEMENT_SCAL_MULT(vec4)
    +
    82 
    +
    83 GLM_IMPLEMENT_SCAL_MULT(mat2)
    +
    84 GLM_IMPLEMENT_SCAL_MULT(mat2x3)
    +
    85 GLM_IMPLEMENT_SCAL_MULT(mat2x4)
    +
    86 GLM_IMPLEMENT_SCAL_MULT(mat3x2)
    +
    87 GLM_IMPLEMENT_SCAL_MULT(mat3)
    +
    88 GLM_IMPLEMENT_SCAL_MULT(mat3x4)
    +
    89 GLM_IMPLEMENT_SCAL_MULT(mat4x2)
    +
    90 GLM_IMPLEMENT_SCAL_MULT(mat4x3)
    +
    91 GLM_IMPLEMENT_SCAL_MULT(mat4)
    +
    92 
    +
    93 #undef GLM_IMPLEMENT_SCAL_MULT
    +
    94 } // namespace glm
    +
    mat3x3 mat3
    3 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:433
    +
    mat2x2 mat2
    2 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:428
    +
    mat4x4 mat4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:438
    +
    highp_mat2x4 mat2x4
    2 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:391
    +
    highp_mat3x2 mat3x2
    3 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:396
    +
    highp_mat4x3 mat4x3
    4 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:416
    +
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    +
    highp_mat4x2 mat4x2
    4 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:411
    +
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    +
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    +
    highp_mat2x3 mat2x3
    2 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:386
    +
    Definition: _noise.hpp:31
    +
    highp_mat3x4 mat3x4
    3 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:406
    diff --git a/doc/api/a00104.html b/doc/api/a00104.html new file mode 100644 index 00000000..76dd38d7 --- /dev/null +++ b/doc/api/a00104.html @@ -0,0 +1,73 @@ + + + + + + +0.9.6: scalar_relational.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    scalar_relational.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_scalar_relational

    +
    Date
    2013-02-04 / 2013-02-04
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file scalar_relational.hpp.

    +
    + + + + diff --git a/doc/api/a00104_source.html b/doc/api/a00104_source.html index 3baeb6f2..565b081c 100644 --- a/doc/api/a00104_source.html +++ b/doc/api/a00104_source.html @@ -3,8 +3,8 @@ - -GLM: reciprocal.hpp Source File + +0.9.6: scalar_relational.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,24 +41,39 @@
    -
    gtx/reciprocal.hpp
    +
    scalar_relational.hpp
    -
    1 
    -
    24 #if(defined(GLM_MESSAGES))
    -
    25 # pragma message("GLM: GLM_GTX_reciprocal extension is deprecated, include GLM_GTC_reciprocal instead")
    -
    26 #endif
    +Go to the documentation of this file.
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_extend extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    52 
    +
    53 
    +
    55 }//namespace glm
    +
    56 
    +
    57 #include "scalar_relational.inl"
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00105.html b/doc/api/a00105.html index 0ed1bc58..a27a61e6 100644 --- a/doc/api/a00105.html +++ b/doc/api/a00105.html @@ -3,8 +3,8 @@ - -GLM: rotate_normalized_axis.hpp File Reference + +0.9.6: setup.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,55 +41,32 @@
    -
    -
    rotate_normalized_axis.hpp File Reference
    +
    setup.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - -

    -Functions

    template<typename T , precision P>
    detail::tmat4x4< T, P > rotateNormalizedAxis (detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    detail::tquat< T, P > rotateNormalizedAxis (detail::tquat< T, P > const &q, T const &angle, detail::tvec3< T, P > const &axis)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_rotate_normalized_axis

    -
    Date
    2012-12-13 / 2012-12-13
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTC_matrix_transform
    -
    -GLM_GTC_quaternion
    +

    GLM Core

    +
    Date
    2006-11-13 / 2014-10-05
    +
    Author
    Christophe Riccio
    -

    Definition in file rotate_normalized_axis.hpp.

    +

    Definition in file setup.hpp.

    diff --git a/doc/api/a00105_source.html b/doc/api/a00105_source.html index 11af5886..5bb1296a 100644 --- a/doc/api/a00105_source.html +++ b/doc/api/a00105_source.html @@ -3,8 +3,8 @@ - -GLM: rotate_normalized_axis.hpp Source File + +0.9.6: setup.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,56 +41,803 @@
    -
    rotate_normalized_axis.hpp
    +
    setup.hpp
    Go to the documentation of this file.
    1 
    -
    40 #ifndef GLM_GTX_rotate_normalized_axis
    -
    41 #define GLM_GTX_rotate_normalized_axis
    -
    42 
    -
    43 // Dependency:
    -
    44 #include "../glm.hpp"
    -
    45 #include "../gtc/epsilon.hpp"
    -
    46 #include "../gtc/quaternion.hpp"
    -
    47 
    -
    48 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    49 # pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included")
    -
    50 #endif
    -
    51 
    -
    52 namespace glm
    -
    53 {
    +
    29 #pragma once
    +
    30 
    +
    31 #include <cassert>
    +
    32 #include <cstddef>
    +
    33 
    +
    35 // Version
    +
    36 
    +
    37 #define GLM_VERSION 96
    +
    38 #define GLM_VERSION_MAJOR 0
    +
    39 #define GLM_VERSION_MINOR 9
    +
    40 #define GLM_VERSION_PATCH 6
    +
    41 #define GLM_VERSION_REVISION 0
    +
    42 
    +
    44 // Platform
    +
    45 
    +
    46 #define GLM_PLATFORM_UNKNOWN 0x00000000
    +
    47 #define GLM_PLATFORM_WINDOWS 0x00010000
    +
    48 #define GLM_PLATFORM_LINUX 0x00020000
    +
    49 #define GLM_PLATFORM_APPLE 0x00040000
    +
    50 //#define GLM_PLATFORM_IOS 0x00080000
    +
    51 #define GLM_PLATFORM_ANDROID 0x00100000
    +
    52 #define GLM_PLATFORM_CHROME_NACL 0x00200000
    +
    53 #define GLM_PLATFORM_UNIX 0x00400000
    +
    54 #define GLM_PLATFORM_QNXNTO 0x00800000
    +
    55 #define GLM_PLATFORM_WINCE 0x01000000
    56 
    -
    68  template <typename T, precision P>
    -
    69  detail::tmat4x4<T, P> rotateNormalizedAxis(
    -
    70  detail::tmat4x4<T, P> const & m,
    -
    71  T const & angle,
    -
    72  detail::tvec3<T, P> const & axis);
    -
    73 
    -
    81  template <typename T, precision P>
    -
    82  detail::tquat<T, P> rotateNormalizedAxis(
    -
    83  detail::tquat<T, P> const & q,
    -
    84  T const & angle,
    -
    85  detail::tvec3<T, P> const & axis);
    -
    86 
    -
    88 }//namespace glm
    -
    89 
    -
    90 #include "rotate_normalized_axis.inl"
    -
    91 
    -
    92 #endif//GLM_GTX_rotate_normalized_axis
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    detail::tmat4x4< T, P > rotateNormalizedAxis(detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
    Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > axis(detail::tquat< T, P > const &x)
    Returns the q rotation axis.
    +
    57 #ifdef GLM_FORCE_PLATFORM_UNKNOWN
    +
    58 # define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
    +
    59 #elif defined(__QNXNTO__)
    +
    60 # define GLM_PLATFORM GLM_PLATFORM_QNXNTO
    +
    61 #elif defined(__APPLE__)
    +
    62 # define GLM_PLATFORM GLM_PLATFORM_APPLE
    +
    63 #elif defined(WINCE)
    +
    64 # define GLM_PLATFORM GLM_PLATFORM_WINCE
    +
    65 #elif defined(_WIN32)
    +
    66 # define GLM_PLATFORM GLM_PLATFORM_WINDOWS
    +
    67 #elif defined(__native_client__)
    +
    68 # define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL
    +
    69 #elif defined(__ANDROID__)
    +
    70 # define GLM_PLATFORM GLM_PLATFORM_ANDROID
    +
    71 #elif defined(__linux)
    +
    72 # define GLM_PLATFORM GLM_PLATFORM_LINUX
    +
    73 #elif defined(__unix)
    +
    74 # define GLM_PLATFORM GLM_PLATFORM_UNIX
    +
    75 #else
    +
    76 # define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
    +
    77 #endif//
    +
    78 
    +
    79 // Report platform detection
    +
    80 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_PLATFORM_DISPLAYED))
    +
    81 # define GLM_MESSAGE_PLATFORM_DISPLAYED
    +
    82 # if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO)
    +
    83 # pragma message("GLM: QNX platform detected")
    +
    84 //# elif(GLM_PLATFORM & GLM_PLATFORM_IOS)
    +
    85 //# pragma message("GLM: iOS platform detected")
    +
    86 # elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
    +
    87 # pragma message("GLM: Apple platform detected")
    +
    88 # elif(GLM_PLATFORM & GLM_PLATFORM_WINCE)
    +
    89 # pragma message("GLM: WinCE platform detected")
    +
    90 # elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
    +
    91 # pragma message("GLM: Windows platform detected")
    +
    92 # elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
    +
    93 # pragma message("GLM: Native Client detected")
    +
    94 # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
    +
    95 # pragma message("GLM: Android platform detected")
    +
    96 # elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
    +
    97 # pragma message("GLM: Linux platform detected")
    +
    98 # elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
    +
    99 # pragma message("GLM: UNIX platform detected")
    +
    100 # elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
    +
    101 # pragma message("GLM: platform unknown")
    +
    102 # else
    +
    103 # pragma message("GLM: platform not detected")
    +
    104 # endif
    +
    105 #endif//GLM_MESSAGE
    +
    106 
    +
    108 // Compiler
    +
    109 
    +
    110 // User defines: GLM_FORCE_COMPILER_UNKNOWN
    +
    111 // TODO ? __llvm__
    +
    112 
    +
    113 #define GLM_COMPILER_UNKNOWN 0x00000000
    +
    114 
    +
    115 // Intel
    +
    116 #define GLM_COMPILER_INTEL 0x00100000
    +
    117 #define GLM_COMPILER_INTEL12 0x00100010
    +
    118 #define GLM_COMPILER_INTEL12_1 0x00100020
    +
    119 #define GLM_COMPILER_INTEL13 0x00100030
    +
    120 #define GLM_COMPILER_INTEL14 0x00100040
    +
    121 #define GLM_COMPILER_INTEL15 0x00100050
    +
    122 
    +
    123 // Visual C++ defines
    +
    124 #define GLM_COMPILER_VC 0x01000000
    +
    125 #define GLM_COMPILER_VC2010 0x01000090
    +
    126 #define GLM_COMPILER_VC2012 0x010000A0
    +
    127 #define GLM_COMPILER_VC2013 0x010000B0
    +
    128 #define GLM_COMPILER_VC2015 0x010000C0
    +
    129 
    +
    130 // GCC defines
    +
    131 #define GLM_COMPILER_GCC 0x02000000
    +
    132 #define GLM_COMPILER_GCC42 0x02000090
    +
    133 #define GLM_COMPILER_GCC43 0x020000A0
    +
    134 #define GLM_COMPILER_GCC44 0x020000B0
    +
    135 #define GLM_COMPILER_GCC45 0x020000C0
    +
    136 #define GLM_COMPILER_GCC46 0x020000D0
    +
    137 #define GLM_COMPILER_GCC47 0x020000E0
    +
    138 #define GLM_COMPILER_GCC48 0x020000F0
    +
    139 #define GLM_COMPILER_GCC49 0x02000100
    +
    140 #define GLM_COMPILER_GCC50 0x02000200
    +
    141 
    +
    142 // CUDA
    +
    143 #define GLM_COMPILER_CUDA 0x10000000
    +
    144 #define GLM_COMPILER_CUDA30 0x10000010
    +
    145 #define GLM_COMPILER_CUDA31 0x10000020
    +
    146 #define GLM_COMPILER_CUDA32 0x10000030
    +
    147 #define GLM_COMPILER_CUDA40 0x10000040
    +
    148 #define GLM_COMPILER_CUDA41 0x10000050
    +
    149 #define GLM_COMPILER_CUDA42 0x10000060
    +
    150 #define GLM_COMPILER_CUDA50 0x10000070
    +
    151 #define GLM_COMPILER_CUDA60 0x10000080
    +
    152 #define GLM_COMPILER_CUDA65 0x10000090
    +
    153 
    +
    154 // LLVM
    +
    155 #define GLM_COMPILER_LLVM 0x20000000
    +
    156 #define GLM_COMPILER_LLVM30 0x20000010
    +
    157 #define GLM_COMPILER_LLVM31 0x20000020
    +
    158 #define GLM_COMPILER_LLVM32 0x20000030
    +
    159 #define GLM_COMPILER_LLVM33 0x20000040
    +
    160 #define GLM_COMPILER_LLVM34 0x20000050
    +
    161 #define GLM_COMPILER_LLVM35 0x20000060
    +
    162 
    +
    163 // Apple Clang
    +
    164 #define GLM_COMPILER_APPLE_CLANG 0x40000000
    +
    165 #define GLM_COMPILER_APPLE_CLANG40 0x40000010
    +
    166 #define GLM_COMPILER_APPLE_CLANG41 0x40000020
    +
    167 #define GLM_COMPILER_APPLE_CLANG42 0x40000030
    +
    168 #define GLM_COMPILER_APPLE_CLANG50 0x40000040
    +
    169 #define GLM_COMPILER_APPLE_CLANG51 0x40000050
    +
    170 #define GLM_COMPILER_APPLE_CLANG60 0x40000060
    +
    171 
    +
    172 // Build model
    +
    173 #define GLM_MODEL_32 0x00000010
    +
    174 #define GLM_MODEL_64 0x00000020
    +
    175 
    +
    176 // Force generic C++ compiler
    +
    177 #ifdef GLM_FORCE_COMPILER_UNKNOWN
    +
    178 # define GLM_COMPILER GLM_COMPILER_UNKNOWN
    +
    179 
    +
    180 #elif defined(__INTEL_COMPILER)
    +
    181 # if __INTEL_COMPILER == 1200
    +
    182 # define GLM_COMPILER GLM_COMPILER_INTEL12
    +
    183 # elif __INTEL_COMPILER == 1210
    +
    184 # define GLM_COMPILER GLM_COMPILER_INTEL12_1
    +
    185 # elif __INTEL_COMPILER == 1300
    +
    186 # define GLM_COMPILER GLM_COMPILER_INTEL13
    +
    187 # elif __INTEL_COMPILER == 1400
    +
    188 # define GLM_COMPILER GLM_COMPILER_INTEL14
    +
    189 # elif __INTEL_COMPILER >= 1500
    +
    190 # define GLM_COMPILER GLM_COMPILER_INTEL15
    +
    191 # else
    +
    192 # define GLM_COMPILER GLM_COMPILER_INTEL
    +
    193 # endif
    +
    194 
    +
    195 // CUDA
    +
    196 #elif defined(__CUDACC__)
    +
    197 # if !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA)
    +
    198 # include <cuda.h> // make sure version is defined since nvcc does not define it itself!
    +
    199 # endif
    +
    200 # if CUDA_VERSION < 3000
    +
    201 # error "GLM requires CUDA 3.0 or higher"
    +
    202 # else
    +
    203 # define GLM_COMPILER GLM_COMPILER_CUDA
    +
    204 # endif
    +
    205 
    +
    206 // Visual C++
    +
    207 #elif defined(_MSC_VER)
    +
    208 # if _MSC_VER < 1600
    +
    209 # error "GLM requires Visual C++ 2010 or higher"
    +
    210 # elif _MSC_VER == 1600
    +
    211 # define GLM_COMPILER GLM_COMPILER_VC2010
    +
    212 # elif _MSC_VER == 1700
    +
    213 # define GLM_COMPILER GLM_COMPILER_VC2012
    +
    214 # elif _MSC_VER == 1800
    +
    215 # define GLM_COMPILER GLM_COMPILER_VC2013
    +
    216 # elif _MSC_VER >= 1900
    +
    217 # define GLM_COMPILER GLM_COMPILER_VC2015
    +
    218 # else//_MSC_VER
    +
    219 # define GLM_COMPILER GLM_COMPILER_VC
    +
    220 # endif//_MSC_VER
    +
    221 
    +
    222 // Clang
    +
    223 #elif defined(__clang__)
    +
    224 # if GLM_PLATFORM & GLM_PLATFORM_APPLE
    +
    225 # if __clang_major__ == 4 && __clang_minor__ == 0
    +
    226 # define GLM_COMPILER GLM_COMPILER_APPLE_CLANG40
    +
    227 # elif __clang_major__ == 4 && __clang_minor__ == 1
    +
    228 # define GLM_COMPILER GLM_COMPILER_APPLE_CLANG41
    +
    229 # elif __clang_major__ == 4 && __clang_minor__ == 2
    +
    230 # define GLM_COMPILER GLM_COMPILER_APPLE_CLANG42
    +
    231 # elif __clang_major__ == 5 && __clang_minor__ == 0
    +
    232 # define GLM_COMPILER GLM_COMPILER_APPLE_CLANG50
    +
    233 # elif __clang_major__ == 5 && __clang_minor__ == 1
    +
    234 # define GLM_COMPILER GLM_COMPILER_APPLE_CLANG51
    +
    235 # elif __clang_major__ >= 6
    +
    236 # define GLM_COMPILER GLM_COMPILER_APPLE_CLANG60
    +
    237 # endif
    +
    238 # else
    +
    239 # if __clang_major__ == 3 && __clang_minor__ == 0
    +
    240 # define GLM_COMPILER GLM_COMPILER_LLVM30
    +
    241 # elif __clang_major__ == 3 && __clang_minor__ == 1
    +
    242 # define GLM_COMPILER GLM_COMPILER_LLVM31
    +
    243 # elif __clang_major__ == 3 && __clang_minor__ == 2
    +
    244 # define GLM_COMPILER GLM_COMPILER_LLVM32
    +
    245 # elif __clang_major__ == 3 && __clang_minor__ == 3
    +
    246 # define GLM_COMPILER GLM_COMPILER_LLVM33
    +
    247 # elif __clang_major__ == 3 && __clang_minor__ == 4
    +
    248 # define GLM_COMPILER GLM_COMPILER_LLVM34
    +
    249 # elif __clang_major__ == 3 && __clang_minor__ == 5
    +
    250 # define GLM_COMPILER GLM_COMPILER_LLVM35
    +
    251 # else
    +
    252 # define GLM_COMPILER GLM_COMPILER_LLVM35
    +
    253 # endif
    +
    254 # endif
    +
    255 
    +
    256 // G++
    +
    257 #elif defined(__GNUC__) || defined(__MINGW32__)
    +
    258 # if (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
    +
    259 # define GLM_COMPILER (GLM_COMPILER_GCC42)
    +
    260 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
    +
    261 # define GLM_COMPILER (GLM_COMPILER_GCC43)
    +
    262 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4)
    +
    263 # define GLM_COMPILER (GLM_COMPILER_GCC44)
    +
    264 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 5)
    +
    265 # define GLM_COMPILER (GLM_COMPILER_GCC45)
    +
    266 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)
    +
    267 # define GLM_COMPILER (GLM_COMPILER_GCC46)
    +
    268 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 7)
    +
    269 # define GLM_COMPILER (GLM_COMPILER_GCC47)
    +
    270 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
    +
    271 # define GLM_COMPILER (GLM_COMPILER_GCC48)
    +
    272 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)
    +
    273 # define GLM_COMPILER (GLM_COMPILER_GCC49)
    +
    274 # elif (__GNUC__ > 4 )
    +
    275 # define GLM_COMPILER (GLM_COMPILER_GCC50)
    +
    276 # else
    +
    277 # define GLM_COMPILER (GLM_COMPILER_GCC)
    +
    278 # endif
    +
    279 
    +
    280 #else
    +
    281 # define GLM_COMPILER GLM_COMPILER_UNKNOWN
    +
    282 #endif
    +
    283 
    +
    284 #ifndef GLM_COMPILER
    +
    285 #error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message."
    +
    286 #endif//GLM_COMPILER
    +
    287 
    +
    288 // Report compiler detection
    +
    289 #if defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPILER_DISPLAYED)
    +
    290 # define GLM_MESSAGE_COMPILER_DISPLAYED
    +
    291 # if GLM_COMPILER & GLM_COMPILER_CUDA
    +
    292 # pragma message("GLM: CUDA compiler detected")
    +
    293 # elif GLM_COMPILER & GLM_COMPILER_VC
    +
    294 # pragma message("GLM: Visual C++ compiler detected")
    +
    295 # elif GLM_COMPILER & GLM_COMPILER_APPLE_CLANG
    +
    296 # pragma message("GLM: Clang compiler detected")
    +
    297 # elif GLM_COMPILER & GLM_COMPILER_LLVM
    +
    298 # pragma message("GLM: LLVM compiler detected")
    +
    299 # elif GLM_COMPILER & GLM_COMPILER_INTEL
    +
    300 # pragma message("GLM: Intel Compiler detected")
    +
    301 # elif GLM_COMPILER & GLM_COMPILER_GCC
    +
    302 # pragma message("GLM: GCC compiler detected")
    +
    303 # else
    +
    304 # pragma message("GLM: Compiler not detected")
    +
    305 # endif
    +
    306 #endif//GLM_MESSAGE
    +
    307 
    +
    309 // Build model
    +
    310 
    +
    311 #if defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)
    +
    312 # define GLM_MODEL GLM_MODEL_64
    +
    313 #elif defined(__i386__) || defined(__ppc__)
    +
    314 # define GLM_MODEL GLM_MODEL_32
    +
    315 #else
    +
    316 # define GLM_MODEL GLM_MODEL_32
    +
    317 #endif//
    +
    318 
    +
    319 #if !defined(GLM_MODEL) && GLM_COMPILER != 0
    +
    320 # error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
    +
    321 #endif//GLM_MODEL
    +
    322 
    +
    323 #if defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_MODEL_DISPLAYED)
    +
    324 # define GLM_MESSAGE_MODEL_DISPLAYED
    +
    325 # if(GLM_MODEL == GLM_MODEL_64)
    +
    326 # pragma message("GLM: 64 bits model")
    +
    327 # elif(GLM_MODEL == GLM_MODEL_32)
    +
    328 # pragma message("GLM: 32 bits model")
    +
    329 # endif//GLM_MODEL
    +
    330 #endif//GLM_MESSAGE
    +
    331 
    +
    333 // C++ Version
    +
    334 
    +
    335 // User defines: GLM_FORCE_CXX98
    +
    336 
    +
    337 #define GLM_LANG_CXX98_FLAG (1 << 1)
    +
    338 #define GLM_LANG_CXX03_FLAG (1 << 2)
    +
    339 #define GLM_LANG_CXX0X_FLAG (1 << 3)
    +
    340 #define GLM_LANG_CXX11_FLAG (1 << 4)
    +
    341 #define GLM_LANG_CXX1Y_FLAG (1 << 5)
    +
    342 #define GLM_LANG_CXXMS_FLAG (1 << 6)
    +
    343 #define GLM_LANG_CXXGNU_FLAG (1 << 7)
    +
    344 
    +
    345 #define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG
    +
    346 #define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
    +
    347 #define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)
    +
    348 #define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)
    +
    349 #define GLM_LANG_CXX1Y (GLM_LANG_CXX11 | GLM_LANG_CXX1Y_FLAG)
    +
    350 #define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
    +
    351 #define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG
    +
    352 
    +
    353 #if defined(GLM_FORCE_CXX1Y)
    +
    354 # define GLM_LANG GLM_LANG_CXX1Y
    +
    355 #elif defined(GLM_FORCE_CXX11)
    +
    356 # define GLM_LANG GLM_LANG_CXX11
    +
    357 #elif defined(GLM_FORCE_CXX03)
    +
    358 # define GLM_LANG GLM_LANG_CXX03
    +
    359 #elif defined(GLM_FORCE_CXX98)
    +
    360 # define GLM_LANG GLM_LANG_CXX98
    +
    361 #else
    +
    362 # if __cplusplus >= 201103L
    +
    363 # define GLM_LANG GLM_LANG_CXX11
    +
    364 # elif GLM_COMPILER & GLM_COMPILER_CLANG
    +
    365 # if(GLM_PLATFORM == GLM_PLATFORM_APPLE)
    +
    366 # define GLM_DETAIL_MAJOR 1
    +
    367 # else
    +
    368 # define GLM_DETAIL_MAJOR 0
    +
    369 # endif
    +
    370 # if __clang_major__ < (2 + GLM_DETAIL_MAJOR)
    +
    371 # define GLM_LANG GLM_LANG_CXX
    +
    372 # elif __has_feature(cxx_auto_type)
    +
    373 # define GLM_LANG GLM_LANG_CXX0X
    +
    374 # else
    +
    375 # define GLM_LANG GLM_LANG_CXX98
    +
    376 # endif
    +
    377 # elif GLM_COMPILER & GLM_COMPILER_GCC
    +
    378 # ifdef __GXX_EXPERIMENTAL_CXX0X__
    +
    379 # define GLM_LANG GLM_LANG_CXX0X
    +
    380 # else
    +
    381 # define GLM_LANG GLM_LANG_CXX98
    +
    382 # endif
    +
    383 # elif GLM_COMPILER & GLM_COMPILER_VC
    +
    384 # ifdef _MSC_EXTENSIONS
    +
    385 # if GLM_COMPILER >= GLM_COMPILER_VC2010
    +
    386 # define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
    +
    387 # else
    +
    388 # define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
    +
    389 # endif
    +
    390 # else
    +
    391 # if GLM_COMPILER >= GLM_COMPILER_VC2010
    +
    392 # define GLM_LANG GLM_LANG_CXX0X
    +
    393 # else
    +
    394 # define GLM_LANG GLM_LANG_CXX98
    +
    395 # endif
    +
    396 # endif
    +
    397 # elif GLM_COMPILER & GLM_COMPILER_INTEL
    +
    398 # ifdef _MSC_EXTENSIONS
    +
    399 # if GLM_COMPILER >= GLM_COMPILER_INTEL13
    +
    400 # define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
    +
    401 # else
    +
    402 # define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
    +
    403 # endif
    +
    404 # else
    +
    405 # if GLM_COMPILER >= GLM_COMPILER_INTEL13
    +
    406 # define GLM_LANG (GLM_LANG_CXX0X)
    +
    407 # else
    +
    408 # define GLM_LANG (GLM_LANG_CXX98)
    +
    409 # endif
    +
    410 # endif
    +
    411 # else
    +
    412 # if __cplusplus >= 199711L
    +
    413 # define GLM_LANG GLM_LANG_CXX98
    +
    414 # endif
    +
    415 # ifndef GLM_FORCE_CXX98
    +
    416 # define GLM_FORCE_CXX98
    +
    417 # endif
    +
    418 # ifndef GLM_FORCE_PURE
    +
    419 # define GLM_FORCE_PURE
    +
    420 # endif
    +
    421 # endif
    +
    422 #endif
    +
    423 
    +
    424 #if defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_LANG_DISPLAYED)
    +
    425 # define GLM_MESSAGE_LANG_DISPLAYED
    +
    426 # if(GLM_LANG & GLM_LANG_CXXGNU_FLAG)
    +
    427 # pragma message("GLM: C++ with language extensions")
    +
    428 # elif(GLM_LANG & GLM_LANG_CXXMS_FLAG)
    +
    429 # pragma message("GLM: C++ with language extensions")
    +
    430 # elif(GLM_LANG & GLM_LANG_CXX11_FLAG)
    +
    431 # pragma message("GLM: C++11")
    +
    432 # elif(GLM_LANG & GLM_LANG_CXX0X_FLAG)
    +
    433 # pragma message("GLM: C++0x")
    +
    434 # elif(GLM_LANG & GLM_LANG_CXX03_FLAG)
    +
    435 # pragma message("GLM: C++03")
    +
    436 # elif(GLM_LANG & GLM_LANG_CXX98_FLAG)
    +
    437 # pragma message("GLM: C++98")
    +
    438 # else
    +
    439 # pragma message("GLM: C++ language undetected")
    +
    440 # endif//GLM_MODEL
    +
    441 # pragma message("GLM: #define GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_LANG_CXX11 or GLM_FORCE_CXX1Y to force using a specific version of the C++ language")
    +
    442 #endif//GLM_MESSAGE
    +
    443 
    +
    445 // Has of C++ features
    +
    446 
    +
    447 #ifndef __has_feature
    +
    448 # define __has_feature(x) 0 // Compatibility with non-clang compilers.
    +
    449 #endif
    +
    450 #ifndef __has_extension
    +
    451 # define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
    +
    452 #endif
    +
    453 
    +
    454 // http://clang.llvm.org/cxx_status.html
    +
    455 // http://gcc.gnu.org/projects/cxx0x.html
    +
    456 // http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx
    +
    457 
    +
    458 // N1720
    +
    459 #define GLM_HAS_CXX11_STL ( \
    +
    460  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    461  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2015)))
    +
    462 
    +
    463 // N1720
    +
    464 #define GLM_HAS_STATIC_ASSERT ( \
    +
    465  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    466  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2010)) || \
    +
    467  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \
    +
    468  __has_feature(cxx_static_assert))
    +
    469 
    +
    470 // N1988
    +
    471 #define GLM_HAS_EXTENDED_INTEGER_TYPE ( \
    +
    472  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    473  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012)) || \
    +
    474  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \
    +
    475  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_LLVM) && (GLM_COMPILER >= GLM_COMPILER_LLVM30)) || \
    +
    476  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_APPLE_CLANG) && (GLM_COMPILER >= GLM_COMPILER_APPLE_CLANG40)))
    +
    477 
    +
    478 // N2235
    +
    479 #define GLM_HAS_CONSTEXPR ( \
    +
    480  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    481  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)) || \
    +
    482  __has_feature(cxx_constexpr))
    +
    483 
    +
    484 // N2672
    +
    485 #define GLM_HAS_INITIALIZER_LISTS ( \
    +
    486  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    487  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013))) || \
    +
    488  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC44)) || \
    +
    489  __has_feature(cxx_generalized_initializers))
    +
    490 
    +
    491 // N2544 Unrestricted unions
    +
    492 #define GLM_HAS_UNRESTRICTED_UNIONS ( \
    +
    493  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    494  (GLM_LANG & GLM_LANG_CXXMS_FLAG) || \
    +
    495  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)) || \
    +
    496  __has_feature(cxx_unrestricted_unions))
    +
    497 
    +
    498 // N2346
    +
    499 #define GLM_HAS_DEFAULTED_FUNCTIONS ( \
    +
    500  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    501  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013))) || \
    +
    502  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC44)) || \
    +
    503  __has_feature(cxx_defaulted_functions))
    +
    504 
    +
    505 // N2118
    +
    506 #define GLM_HAS_RVALUE_REFERENCES ( \
    +
    507  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    508  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012))) || \
    +
    509  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \
    +
    510  __has_feature(cxx_rvalue_references))
    +
    511 
    +
    512 #define GLM_HAS_STL_ARRAY ( \
    +
    513  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    514  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2010))) || \
    +
    515  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)))
    +
    516 
    +
    517 #define GLM_HAS_TEMPLATE_ALIASES ( \
    +
    518  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013))) || \
    +
    519  __has_feature(cxx_alias_templates))
    +
    520 
    +
    521 #define GLM_HAS_RANGE_FOR ( \
    +
    522  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    523  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012))) || \
    +
    524  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)) || \
    +
    525  __has_feature(cxx_range_for))
    +
    526 
    +
    527 #define GLM_HAS_ASSIGNABLE ( \
    +
    528  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    529  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49)))
    +
    530 
    +
    531 #define GLM_HAS_TRIVIAL_QUERIES (\
    +
    532  ((GLM_LANG & GLM_LANG_CXX11_FLAG) && !(GLM_COMPILER & GLM_COMPILER_GCC)) || \
    +
    533  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)))
    +
    534 
    +
    535 #define GLM_HAS_MAKE_SIGNED (\
    +
    536  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    +
    537  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)))
    +
    538 
    +
    539 // OpenMP
    +
    540 #ifdef _OPENMP
    +
    541 # if GLM_COMPILER & GLM_COMPILER_GCC
    +
    542 # if GLM_COMPILER >= GLM_COMPILER_GCC47
    +
    543 # define GLM_HAS_OPENMP 31
    +
    544 # elif GLM_COMPILER >= GLM_COMPILER_GCC44
    +
    545 # define GLM_HAS_OPENMP 30
    +
    546 # elif GLM_COMPILER >= GLM_COMPILER_GCC42
    +
    547 # define GLM_HAS_OPENMP 25
    +
    548 # endif
    +
    549 # endif// GLM_COMPILER & GLM_COMPILER_GCC
    +
    550 
    +
    551 # if GLM_COMPILER & GLM_COMPILER_VC
    +
    552 # if GLM_COMPILER >= GLM_COMPILER_VC2010
    +
    553 # define GLM_HAS_OPENMP 20
    +
    554 # endif
    +
    555 # endif// GLM_COMPILER & GLM_COMPILER_VC
    +
    556 #endif
    +
    557 
    +
    558 // Not standard
    +
    559 #define GLM_HAS_ANONYMOUS_UNION (GLM_LANG & GLM_LANG_CXXMS_FLAG)
    +
    560 
    +
    562 // Platform
    +
    563 
    +
    564 // User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2
    +
    565 
    +
    566 #define GLM_ARCH_PURE 0x0000
    +
    567 #define GLM_ARCH_X86 0x0001
    +
    568 #define GLM_ARCH_SSE2 0x0002
    +
    569 #define GLM_ARCH_SSE3 0x0004
    +
    570 #define GLM_ARCH_SSE4 0x0008
    +
    571 #define GLM_ARCH_AVX 0x0010
    +
    572 #define GLM_ARCH_AVX2 0x0020
    +
    573 
    +
    574 #if defined(GLM_FORCE_PURE)
    +
    575 # define GLM_ARCH GLM_ARCH_PURE
    +
    576 #elif defined(GLM_FORCE_AVX2)
    +
    577 # define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    578 #elif defined(GLM_FORCE_AVX)
    +
    579 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    580 #elif defined(GLM_FORCE_SSE4)
    +
    581 # define GLM_ARCH (GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    582 #elif defined(GLM_FORCE_SSE3)
    +
    583 # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    584 #elif defined(GLM_FORCE_SSE2)
    +
    585 # define GLM_ARCH (GLM_ARCH_SSE2)
    +
    586 #elif GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM | GLM_COMPILER_GCC)
    +
    587 # if(__AVX2__)
    +
    588 # define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    589 # elif(__AVX__)
    +
    590 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    591 # elif(__SSE3__)
    +
    592 # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    593 # elif(__SSE2__)
    +
    594 # define GLM_ARCH (GLM_ARCH_SSE2)
    +
    595 # else
    +
    596 # define GLM_ARCH GLM_ARCH_PURE
    +
    597 # endif
    +
    598 #elif GLM_COMPILER & GLM_COMPILER_VC
    +
    599 # if defined(__AVX2__)
    +
    600 # define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    601 # elif defined(__AVX__)
    +
    602 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    603 # elif _M_IX86_FP == 2
    +
    604 # define GLM_ARCH (GLM_ARCH_SSE2)
    +
    605 # else
    +
    606 # define GLM_ARCH (GLM_ARCH_PURE)
    +
    607 # endif
    +
    608 #elif (GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__))
    +
    609 # if defined(__AVX2__)
    +
    610 # define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    611 # elif defined(__AVX__)
    +
    612 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    613 # elif defined(__SSE4_1__ )
    +
    614 # define GLM_ARCH (GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    615 # elif defined(__SSE3__)
    +
    616 # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    +
    617 # elif defined(__SSE2__)
    +
    618 # define GLM_ARCH (GLM_ARCH_SSE2)
    +
    619 # else
    +
    620 # define GLM_ARCH (GLM_ARCH_PURE)
    +
    621 # endif
    +
    622 #else
    +
    623 # define GLM_ARCH GLM_ARCH_PURE
    +
    624 #endif
    +
    625 
    +
    626 // With MinGW-W64, including intrinsic headers before intrin.h will produce some errors. The problem is
    +
    627 // that windows.h (and maybe other headers) will silently include intrin.h, which of course causes problems.
    +
    628 // To fix, we just explicitly include intrin.h here.
    +
    629 #if defined(__MINGW32__) && (GLM_ARCH != GLM_ARCH_PURE)
    +
    630 # include <intrin.h>
    +
    631 #endif
    +
    632 
    +
    633 #if GLM_ARCH & GLM_ARCH_AVX2
    +
    634 # include <immintrin.h>
    +
    635 #endif//GLM_ARCH
    +
    636 #if GLM_ARCH & GLM_ARCH_AVX
    +
    637 # include <immintrin.h>
    +
    638 #endif//GLM_ARCH
    +
    639 #if GLM_ARCH & GLM_ARCH_SSE4
    +
    640 # include <smmintrin.h>
    +
    641 #endif//GLM_ARCH
    +
    642 #if GLM_ARCH & GLM_ARCH_SSE3
    +
    643 # include <pmmintrin.h>
    +
    644 #endif//GLM_ARCH
    +
    645 #if GLM_ARCH & GLM_ARCH_SSE2
    +
    646 # include <emmintrin.h>
    +
    647 # if(GLM_COMPILER == GLM_COMPILER_VC2005) // VC2005 is missing some intrinsics, workaround
    +
    648  inline float _mm_cvtss_f32(__m128 A) { return A.m128_f32[0]; }
    +
    649  inline __m128 _mm_castpd_ps(__m128d PD) { union { __m128 ps; __m128d pd; } c; c.pd = PD; return c.ps; }
    +
    650  inline __m128d _mm_castps_pd(__m128 PS) { union { __m128 ps; __m128d pd; } c; c.ps = PS; return c.pd; }
    +
    651  inline __m128i _mm_castps_si128(__m128 PS) { union { __m128 ps; __m128i pi; } c; c.ps = PS; return c.pi; }
    +
    652  inline __m128 _mm_castsi128_ps(__m128i PI) { union { __m128 ps; __m128i pi; } c; c.pi = PI; return c.ps; }
    +
    653 # endif
    +
    654 #endif//GLM_ARCH
    +
    655 
    +
    656 #if defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_ARCH_DISPLAYED)
    +
    657 # define GLM_MESSAGE_ARCH_DISPLAYED
    +
    658 # if(GLM_ARCH == GLM_ARCH_PURE)
    +
    659 # pragma message("GLM: Platform independent code")
    +
    660 # elif(GLM_ARCH & GLM_ARCH_AVX2)
    +
    661 # pragma message("GLM: AVX2 instruction set")
    +
    662 # elif(GLM_ARCH & GLM_ARCH_AVX)
    +
    663 # pragma message("GLM: AVX instruction set")
    +
    664 # elif(GLM_ARCH & GLM_ARCH_SSE3)
    +
    665 # pragma message("GLM: SSE3 instruction set")
    +
    666 # elif(GLM_ARCH & GLM_ARCH_SSE2)
    +
    667 # pragma message("GLM: SSE2 instruction set")
    +
    668 # endif//GLM_ARCH
    +
    669 # pragma message("GLM: #define GLM_FORCE_PURE to avoid using platform specific instruction sets")
    +
    670 #endif//GLM_MESSAGE
    +
    671 
    +
    673 // Static assert
    +
    674 
    +
    675 #if GLM_HAS_STATIC_ASSERT
    +
    676 # define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
    +
    677 #elif defined(BOOST_STATIC_ASSERT)
    +
    678 # define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x)
    +
    679 #elif GLM_COMPILER & GLM_COMPILER_VC
    +
    680 # define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
    +
    681 #else
    +
    682 # define GLM_STATIC_ASSERT(x, message)
    +
    683 # define GLM_STATIC_ASSERT_NULL
    +
    684 #endif//GLM_LANG
    +
    685 
    +
    687 // Qualifiers
    +
    688 
    +
    689 #if GLM_COMPILER & GLM_COMPILER_CUDA
    +
    690 # define GLM_CUDA_FUNC_DEF __device__ __host__
    +
    691 # define GLM_CUDA_FUNC_DECL __device__ __host__
    +
    692 #else
    +
    693 # define GLM_CUDA_FUNC_DEF
    +
    694 # define GLM_CUDA_FUNC_DECL
    +
    695 #endif
    +
    696 
    +
    697 #if GLM_COMPILER & GLM_COMPILER_GCC
    +
    698 # define GLM_VAR_USED __attribute__ ((unused))
    +
    699 #else
    +
    700 # define GLM_VAR_USED
    +
    701 #endif
    +
    702 
    +
    703 #if defined(GLM_FORCE_INLINE)
    +
    704 # if GLM_COMPILER & GLM_COMPILER_VC
    +
    705 # define GLM_INLINE __forceinline
    +
    706 # define GLM_NEVER_INLINE __declspec((noinline))
    +
    707 # elif GLM_COMPILER & GLM_COMPILER_GCC
    +
    708 # define GLM_INLINE inline __attribute__((__always_inline__))
    +
    709 # define GLM_NEVER_INLINE __attribute__((__noinline__))
    +
    710 # elif GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)
    +
    711 # define GLM_INLINE __attribute__((__always_inline__))
    +
    712 # define GLM_NEVER_INLINE __attribute__((__noinline__))
    +
    713 # else
    +
    714 # define GLM_INLINE inline
    +
    715 # define GLM_NEVER_INLINE
    +
    716 # endif//GLM_COMPILER
    +
    717 #else
    +
    718 # define GLM_INLINE inline
    +
    719 # define GLM_NEVER_INLINE
    +
    720 #endif//defined(GLM_FORCE_INLINE)
    +
    721 
    +
    722 #define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
    +
    723 #define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
    +
    724 
    +
    726 // Swizzle operators
    +
    727 
    +
    728 // User defines: GLM_SWIZZLE
    +
    729 
    +
    730 #if defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED)
    +
    731 # define GLM_MESSAGE_SWIZZLE_DISPLAYED
    +
    732 # if defined(GLM_SWIZZLE)
    +
    733 # pragma message("GLM: Swizzling operators enabled")
    +
    734 # else
    +
    735 # pragma message("GLM: Swizzling operators disabled, #define GLM_SWIZZLE to enable swizzle operators")
    +
    736 # endif
    +
    737 #endif//GLM_MESSAGE
    +
    738 
    +
    740 // Qualifiers
    +
    741 
    +
    742 #if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))
    +
    743 # define GLM_DEPRECATED __declspec(deprecated)
    +
    744 # define GLM_ALIGN(x) __declspec(align(x))
    +
    745 # define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x))
    +
    746 # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name
    +
    747 # define GLM_RESTRICT __declspec(restrict)
    +
    748 # define GLM_RESTRICT_VAR __restrict
    +
    749 #elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM | GLM_COMPILER_CUDA | GLM_COMPILER_INTEL)
    +
    750 # define GLM_DEPRECATED __attribute__((__deprecated__))
    +
    751 # define GLM_ALIGN(x) __attribute__((aligned(x)))
    +
    752 # define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
    +
    753 # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))
    +
    754 # define GLM_RESTRICT __restrict__
    +
    755 # define GLM_RESTRICT_VAR __restrict__
    +
    756 #else
    +
    757 # define GLM_DEPRECATED
    +
    758 # define GLM_ALIGN
    +
    759 # define GLM_ALIGNED_STRUCT(x) struct
    +
    760 # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name
    +
    761 # define GLM_RESTRICT
    +
    762 # define GLM_RESTRICT_VAR
    +
    763 #endif//GLM_COMPILER
    +
    764 
    +
    765 #if GLM_HAS_CONSTEXPR
    +
    766 # define GLM_CONSTEXPR constexpr
    +
    767 #else
    +
    768 # define GLM_CONSTEXPR
    +
    769 #endif
    +
    770 
    +
    772 // Length type
    +
    773 
    +
    774 // User defines: GLM_FORCE_SIZE_T_LENGTH GLM_FORCE_SIZE_FUNC
    +
    775 
    +
    776 namespace glm
    +
    777 {
    +
    778  using std::size_t;
    +
    779 #if defined(GLM_FORCE_SIZE_T_LENGTH) || defined(GLM_FORCE_SIZE_FUNC)
    +
    780  typedef size_t length_t;
    +
    781 #else
    +
    782  typedef int length_t;
    +
    783 #endif
    +
    784 
    +
    785 namespace detail
    +
    786 {
    +
    787 # ifdef GLM_FORCE_SIZE_FUNC
    +
    788  typedef size_t component_count_t;
    +
    789 # else
    +
    790  typedef length_t component_count_t;
    +
    791 # endif
    +
    792 
    +
    793  template <typename genType>
    +
    794  GLM_FUNC_QUALIFIER GLM_CONSTEXPR component_count_t component_count(genType const & m)
    +
    795  {
    +
    796 # ifdef GLM_FORCE_SIZE_FUNC
    +
    797  return m.size();
    +
    798 # else
    +
    799  return m.length();
    +
    800 # endif
    +
    801  }
    +
    802 }//namespace detail
    +
    803 }//namespace glm
    +
    804 
    +
    805 #if defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_FORCE_SIZE_T_LENGTH)
    +
    806 # define GLM_MESSAGE_FORCE_SIZE_T_LENGTH
    +
    807 # if defined(GLM_FORCE_SIZE_T_LENGTH)
    +
    808 # pragma message("GLM: .length() returns glm::length_t, a typedef of std::size_t")
    +
    809 # else
    +
    810 # pragma message("GLM: .length() returns glm::length_t, a typedef of int following the GLSL specification")
    +
    811 # pragma message("GLM: #define GLM_FORCE_SIZE_T_LENGTH for .length() to return a size_t")
    +
    812 # endif
    +
    813 #endif//GLM_MESSAGE
    +
    814 
    +
    816 // Uninitialize constructors
    +
    817 
    +
    818 namespace glm
    +
    819 {
    +
    820  enum ctor{uninitialize};
    +
    821 }//namespace glm
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType pi()
    Return the pi constant.
    diff --git a/doc/api/a00106.html b/doc/api/a00106.html deleted file mode 100644 index f43ebdcb..00000000 --- a/doc/api/a00106.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -GLM: rotate_vector.hpp File Reference - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    - -
    -
    rotate_vector.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename T , precision P>
    detail::tmat4x4< T, P > orientation (detail::tvec3< T, P > const &Normal, detail::tvec3< T, P > const &Up)
     
    template<typename T , precision P>
    detail::tvec2< T, P > rotate (detail::tvec2< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotate (detail::tvec3< T, P > const &v, T const &angle, detail::tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotate (detail::tvec4< T, P > const &v, T const &angle, detail::tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotateX (detail::tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotateX (detail::tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotateY (detail::tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotateY (detail::tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotateZ (detail::tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotateZ (detail::tvec4< T, P > const &v, T const &angle)
     
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_rotate_vector

    -
    Date
    2006-11-02 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_transform (dependence)
    - -

    Definition in file rotate_vector.hpp.

    -
    - - - - diff --git a/doc/api/a00106_source.html b/doc/api/a00106_source.html index 3f869bda..df0427b5 100644 --- a/doc/api/a00106_source.html +++ b/doc/api/a00106_source.html @@ -3,8 +3,8 @@ - -GLM: rotate_vector.hpp Source File + +0.9.6: simd_mat4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,98 +41,173 @@
    -
    rotate_vector.hpp
    +
    simd_mat4.hpp
    -Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_rotate_vector
    -
    40 #define GLM_GTX_rotate_vector
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 #include "../gtx/transform.hpp"
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_rotate_vector extension included")
    -
    48 #endif
    -
    49 
    -
    50 namespace glm
    -
    51 {
    -
    54 
    -
    57  template <typename T, precision P>
    -
    58  detail::tvec2<T, P> rotate(
    -
    59  detail::tvec2<T, P> const & v,
    -
    60  T const & angle);
    -
    61 
    -
    64  template <typename T, precision P>
    -
    65  detail::tvec3<T, P> rotate(
    -
    66  detail::tvec3<T, P> const & v,
    -
    67  T const & angle,
    -
    68  detail::tvec3<T, P> const & normal);
    -
    69 
    -
    72  template <typename T, precision P>
    -
    73  detail::tvec4<T, P> rotate(
    -
    74  detail::tvec4<T, P> const & v,
    -
    75  T const & angle,
    -
    76  detail::tvec3<T, P> const & normal);
    -
    77 
    -
    80  template <typename T, precision P>
    -
    81  detail::tvec3<T, P> rotateX(
    -
    82  detail::tvec3<T, P> const & v,
    -
    83  T const & angle);
    -
    84 
    -
    87  template <typename T, precision P>
    -
    88  detail::tvec3<T, P> rotateY(
    -
    89  detail::tvec3<T, P> const & v,
    -
    90  T const & angle);
    -
    91 
    -
    94  template <typename T, precision P>
    -
    95  detail::tvec3<T, P> rotateZ(
    -
    96  detail::tvec3<T, P> const & v,
    -
    97  T const & angle);
    -
    98 
    -
    101  template <typename T, precision P>
    -
    102  detail::tvec4<T, P> rotateX(
    -
    103  detail::tvec4<T, P> const & v,
    -
    104  T const & angle);
    -
    105 
    -
    108  template <typename T, precision P>
    -
    109  detail::tvec4<T, P> rotateY(
    -
    110  detail::tvec4<T, P> const & v,
    -
    111  T const & angle);
    -
    112 
    -
    115  template <typename T, precision P>
    -
    116  detail::tvec4<T, P> rotateZ(
    -
    117  detail::tvec4<T, P> const & v,
    -
    118  T const & angle);
    -
    119 
    -
    122  template <typename T, precision P>
    -
    123  detail::tmat4x4<T, P> orientation(
    -
    124  detail::tvec3<T, P> const & Normal,
    -
    125  detail::tvec3<T, P> const & Up);
    -
    126 
    -
    128 }//namespace glm
    +
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependencies
    +
    41 #include "../detail/setup.hpp"
    +
    42 
    +
    43 #if(GLM_ARCH != GLM_ARCH_PURE)
    +
    44 
    +
    45 #if(GLM_ARCH & GLM_ARCH_SSE2)
    +
    46 # include "../detail/intrinsic_matrix.hpp"
    +
    47 # include "../gtx/simd_vec4.hpp"
    +
    48 #else
    +
    49 # error "GLM: GLM_GTX_simd_mat4 requires compiler support of SSE2 through intrinsics"
    +
    50 #endif
    +
    51 
    +
    52 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    53 # pragma message("GLM: GLM_GTX_simd_mat4 extension included")
    +
    54 #endif
    +
    55 
    +
    56 namespace glm{
    +
    57 namespace detail
    +
    58 {
    +
    61  GLM_ALIGNED_STRUCT(16) fmat4x4SIMD
    +
    62  {
    +
    63  typedef float value_type;
    +
    64  typedef fvec4SIMD col_type;
    +
    65  typedef fvec4SIMD row_type;
    +
    66  typedef std::size_t size_type;
    +
    67  typedef fmat4x4SIMD type;
    +
    68  typedef fmat4x4SIMD transpose_type;
    +
    69 
    +
    70  GLM_FUNC_DECL length_t length() const;
    +
    71 
    +
    72  fvec4SIMD Data[4];
    +
    73 
    +
    75  // Constructors
    +
    76 
    +
    77  fmat4x4SIMD();
    +
    78  explicit fmat4x4SIMD(float const & s);
    +
    79  explicit fmat4x4SIMD(
    +
    80  float const & x0, float const & y0, float const & z0, float const & w0,
    +
    81  float const & x1, float const & y1, float const & z1, float const & w1,
    +
    82  float const & x2, float const & y2, float const & z2, float const & w2,
    +
    83  float const & x3, float const & y3, float const & z3, float const & w3);
    +
    84  explicit fmat4x4SIMD(
    +
    85  fvec4SIMD const & v0,
    +
    86  fvec4SIMD const & v1,
    +
    87  fvec4SIMD const & v2,
    +
    88  fvec4SIMD const & v3);
    +
    89  explicit fmat4x4SIMD(
    +
    90  mat4x4 const & m);
    +
    91  explicit fmat4x4SIMD(
    +
    92  __m128 const in[4]);
    +
    93 
    +
    94  // Conversions
    +
    95  //template <typename U>
    +
    96  //explicit tmat4x4(tmat4x4<U> const & m);
    +
    97 
    +
    98  //explicit tmat4x4(tmat2x2<T> const & x);
    +
    99  //explicit tmat4x4(tmat3x3<T> const & x);
    +
    100  //explicit tmat4x4(tmat2x3<T> const & x);
    +
    101  //explicit tmat4x4(tmat3x2<T> const & x);
    +
    102  //explicit tmat4x4(tmat2x4<T> const & x);
    +
    103  //explicit tmat4x4(tmat4x2<T> const & x);
    +
    104  //explicit tmat4x4(tmat3x4<T> const & x);
    +
    105  //explicit tmat4x4(tmat4x3<T> const & x);
    +
    106 
    +
    107  // Accesses
    +
    108  fvec4SIMD & operator[](length_t i);
    +
    109  fvec4SIMD const & operator[](length_t i) const;
    +
    110 
    +
    111  // Unary updatable operators
    +
    112  fmat4x4SIMD & operator= (fmat4x4SIMD const & m);
    +
    113  fmat4x4SIMD & operator+= (float const & s);
    +
    114  fmat4x4SIMD & operator+= (fmat4x4SIMD const & m);
    +
    115  fmat4x4SIMD & operator-= (float const & s);
    +
    116  fmat4x4SIMD & operator-= (fmat4x4SIMD const & m);
    +
    117  fmat4x4SIMD & operator*= (float const & s);
    +
    118  fmat4x4SIMD & operator*= (fmat4x4SIMD const & m);
    +
    119  fmat4x4SIMD & operator/= (float const & s);
    +
    120  fmat4x4SIMD & operator/= (fmat4x4SIMD const & m);
    +
    121  fmat4x4SIMD & operator++ ();
    +
    122  fmat4x4SIMD & operator-- ();
    +
    123  };
    +
    124 
    +
    125  // Binary operators
    +
    126  fmat4x4SIMD operator+ (fmat4x4SIMD const & m, float const & s);
    +
    127  fmat4x4SIMD operator+ (float const & s, fmat4x4SIMD const & m);
    +
    128  fmat4x4SIMD operator+ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    129 
    -
    130 #include "rotate_vector.inl"
    -
    131 
    -
    132 #endif//GLM_GTX_rotate_vector
    -
    detail::tvec3< T, P > rotateX(detail::tvec3< T, P > const &v, T const &angle)
    Rotate a three dimensional vector around the X axis.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > rotate(detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
    Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    detail::tmat4x4< T, P > orientation(detail::tvec3< T, P > const &Normal, detail::tvec3< T, P > const &Up)
    Build a rotation matrix from a normal and a up vector.
    -
    detail::tvec3< T, P > rotateY(detail::tvec3< T, P > const &v, T const &angle)
    Rotate a three dimensional vector around the Y axis.
    -
    detail::tvec3< T, P > rotateZ(detail::tvec3< T, P > const &v, T const &angle)
    Rotate a three dimensional vector around the Z axis.
    +
    130  fmat4x4SIMD operator- (fmat4x4SIMD const & m, float const & s);
    +
    131  fmat4x4SIMD operator- (float const & s, fmat4x4SIMD const & m);
    +
    132  fmat4x4SIMD operator- (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    +
    133 
    +
    134  fmat4x4SIMD operator* (fmat4x4SIMD const & m, float const & s);
    +
    135  fmat4x4SIMD operator* (float const & s, fmat4x4SIMD const & m);
    +
    136 
    +
    137  fvec4SIMD operator* (fmat4x4SIMD const & m, fvec4SIMD const & v);
    +
    138  fvec4SIMD operator* (fvec4SIMD const & v, fmat4x4SIMD const & m);
    +
    139 
    +
    140  fmat4x4SIMD operator* (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    +
    141 
    +
    142  fmat4x4SIMD operator/ (fmat4x4SIMD const & m, float const & s);
    +
    143  fmat4x4SIMD operator/ (float const & s, fmat4x4SIMD const & m);
    +
    144 
    +
    145  fvec4SIMD operator/ (fmat4x4SIMD const & m, fvec4SIMD const & v);
    +
    146  fvec4SIMD operator/ (fvec4SIMD const & v, fmat4x4SIMD const & m);
    +
    147 
    +
    148  fmat4x4SIMD operator/ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    +
    149 
    +
    150  // Unary constant operators
    +
    151  fmat4x4SIMD const operator- (fmat4x4SIMD const & m);
    +
    152  fmat4x4SIMD const operator-- (fmat4x4SIMD const & m, int);
    +
    153  fmat4x4SIMD const operator++ (fmat4x4SIMD const & m, int);
    +
    154 }//namespace detail
    +
    155 
    +
    156  typedef detail::fmat4x4SIMD simdMat4;
    +
    157 
    +
    160 
    +
    163  mat4 mat4_cast(
    +
    164  detail::fmat4x4SIMD const & x);
    +
    165 
    +
    169  detail::fmat4x4SIMD matrixCompMult(
    +
    170  detail::fmat4x4SIMD const & x,
    +
    171  detail::fmat4x4SIMD const & y);
    +
    172 
    +
    177  detail::fmat4x4SIMD outerProduct(
    +
    178  detail::fvec4SIMD const & c,
    +
    179  detail::fvec4SIMD const & r);
    +
    180 
    +
    183  detail::fmat4x4SIMD transpose(
    +
    184  detail::fmat4x4SIMD const & x);
    +
    185 
    +
    188  float determinant(
    +
    189  detail::fmat4x4SIMD const & m);
    +
    190 
    +
    193  detail::fmat4x4SIMD inverse(
    +
    194  detail::fmat4x4SIMD const & m);
    +
    195 
    +
    197 }// namespace glm
    +
    198 
    +
    199 #include "simd_mat4.inl"
    +
    200 
    +
    201 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    +
    highp_mat4x4 mat4x4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:421
    +
    mat4x4 mat4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:438
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    GLM_FUNC_DECL detail::outerProduct_trait< T, P, vecTypeA, vecTypeB >::type outerProduct(vecTypeA< T, P > const &c, vecTypeB< T, P > const &r)
    Treats the first parameter c as a column vector and the second parameter r as a row vector and does a...
    +
    GLM_FUNC_DECL matType< T, P > inverse(matType< T, P > const &m)
    Return the inverse of a squared matrix.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    +
    GLM_FUNC_DECL matType< T, P > matrixCompMult(matType< T, P > const &x, matType< T, P > const &y)
    Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and...
    +
    GLM_FUNC_DECL T determinant(matType< T, P > const &m)
    Returns the transposed matrix of x.
    diff --git a/doc/api/a00107.html b/doc/api/a00107.html index 6413b0a3..500bdfa5 100644 --- a/doc/api/a00107.html +++ b/doc/api/a00107.html @@ -3,8 +3,8 @@ - -GLM: scalar_relational.hpp File Reference + +0.9.6: simd_quat.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,41 +41,33 @@
    -
    -
    scalar_relational.hpp File Reference
    +
    simd_quat.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    Gtx_scalar_relational

    -
    Date
    2013-02-04 / 2013-02-04
    +

    GLM_GTX_simd_quat

    +
    Date
    2009-05-07 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file scalar_relational.hpp.

    +

    Definition in file simd_quat.hpp.

    diff --git a/doc/api/a00107_source.html b/doc/api/a00107_source.html index 14cd4a44..099a1913 100644 --- a/doc/api/a00107_source.html +++ b/doc/api/a00107_source.html @@ -3,8 +3,8 @@ - -GLM: scalar_relational.hpp Source File + +0.9.6: simd_quat.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,41 +41,241 @@
    -
    scalar_relational.hpp
    +
    simd_quat.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_scalar_relational
    -
    39 #define GLM_GTX_scalar_relational
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_extend extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 #include "../gtc/quaternion.hpp"
    +
    43 #include "../gtx/fast_trigonometry.hpp"
    +
    44 
    +
    45 #if(GLM_ARCH != GLM_ARCH_PURE)
    +
    46 
    +
    47 #if(GLM_ARCH & GLM_ARCH_SSE2)
    +
    48 # include "../gtx/simd_mat4.hpp"
    +
    49 #else
    +
    50 # error "GLM: GLM_GTX_simd_quat requires compiler support of SSE2 through intrinsics"
    +
    51 #endif
    52 
    -
    53 
    -
    54 
    -
    56 }//namespace glm
    -
    57 
    -
    58 #include "scalar_relational.inl"
    -
    59 
    -
    60 #endif//GLM_GTX_scalar_relational
    +
    53 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    54 # pragma message("GLM: GLM_GTX_simd_quat extension included")
    +
    55 #endif
    +
    56 
    +
    57 // Warning silencer for nameless struct/union.
    +
    58 #if (GLM_COMPILER & GLM_COMPILER_VC)
    +
    59 # pragma warning(push)
    +
    60 # pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
    +
    61 #endif
    +
    62 
    +
    63 namespace glm{
    +
    64 namespace detail
    +
    65 {
    +
    66  GLM_ALIGNED_STRUCT(16) fquatSIMD
    +
    67  {
    +
    68  typedef __m128 value_type;
    +
    69  typedef std::size_t size_type;
    +
    70  static size_type value_size();
    +
    71 
    +
    72  typedef fquatSIMD type;
    +
    73  typedef tquat<bool, defaultp> bool_type;
    +
    74 
    +
    75 #ifdef GLM_SIMD_ENABLE_XYZW_UNION
    +
    76  union
    +
    77  {
    +
    78  __m128 Data;
    +
    79  struct {float x, y, z, w;};
    +
    80  };
    +
    81 #else
    +
    82  __m128 Data;
    +
    83 #endif
    +
    84 
    +
    86  // Implicit basic constructors
    +
    87 
    +
    88  fquatSIMD();
    +
    89  fquatSIMD(__m128 const & Data);
    +
    90  fquatSIMD(fquatSIMD const & q);
    +
    91 
    +
    93  // Explicit basic constructors
    +
    94 
    +
    95  explicit fquatSIMD(
    +
    96  ctor);
    +
    97  explicit fquatSIMD(
    +
    98  float const & w,
    +
    99  float const & x,
    +
    100  float const & y,
    +
    101  float const & z);
    +
    102  explicit fquatSIMD(
    +
    103  quat const & v);
    +
    104  explicit fquatSIMD(
    +
    105  vec3 const & eulerAngles);
    +
    106 
    +
    107 
    +
    109  // Unary arithmetic operators
    +
    110 
    +
    111  fquatSIMD& operator =(fquatSIMD const & q);
    +
    112  fquatSIMD& operator*=(float const & s);
    +
    113  fquatSIMD& operator/=(float const & s);
    +
    114  };
    +
    115 
    +
    116 
    +
    118  // Arithmetic operators
    +
    119 
    +
    120  detail::fquatSIMD operator- (
    +
    121  detail::fquatSIMD const & q);
    +
    122 
    +
    123  detail::fquatSIMD operator+ (
    +
    124  detail::fquatSIMD const & q,
    +
    125  detail::fquatSIMD const & p);
    +
    126 
    +
    127  detail::fquatSIMD operator* (
    +
    128  detail::fquatSIMD const & q,
    +
    129  detail::fquatSIMD const & p);
    +
    130 
    +
    131  detail::fvec4SIMD operator* (
    +
    132  detail::fquatSIMD const & q,
    +
    133  detail::fvec4SIMD const & v);
    +
    134 
    +
    135  detail::fvec4SIMD operator* (
    +
    136  detail::fvec4SIMD const & v,
    +
    137  detail::fquatSIMD const & q);
    +
    138 
    +
    139  detail::fquatSIMD operator* (
    +
    140  detail::fquatSIMD const & q,
    +
    141  float s);
    +
    142 
    +
    143  detail::fquatSIMD operator* (
    +
    144  float s,
    +
    145  detail::fquatSIMD const & q);
    +
    146 
    +
    147  detail::fquatSIMD operator/ (
    +
    148  detail::fquatSIMD const & q,
    +
    149  float s);
    +
    150 
    +
    151 }//namespace detail
    +
    152 
    +
    155 
    +
    156  typedef glm::detail::fquatSIMD simdQuat;
    +
    157 
    +
    160  quat quat_cast(
    +
    161  detail::fquatSIMD const & x);
    +
    162 
    +
    165  detail::fquatSIMD quatSIMD_cast(
    +
    166  detail::fmat4x4SIMD const & m);
    +
    167 
    +
    170  template <typename T, precision P>
    +
    171  detail::fquatSIMD quatSIMD_cast(
    +
    172  tmat4x4<T, P> const & m);
    +
    173 
    +
    176  template <typename T, precision P>
    +
    177  detail::fquatSIMD quatSIMD_cast(
    +
    178  tmat3x3<T, P> const & m);
    +
    179 
    +
    182  detail::fmat4x4SIMD mat4SIMD_cast(
    +
    183  detail::fquatSIMD const & q);
    +
    184 
    +
    187  mat4 mat4_cast(
    +
    188  detail::fquatSIMD const & q);
    +
    189 
    +
    190 
    +
    194  float length(
    +
    195  detail::fquatSIMD const & x);
    +
    196 
    +
    200  detail::fquatSIMD normalize(
    +
    201  detail::fquatSIMD const & x);
    +
    202 
    +
    206  float dot(
    +
    207  detail::fquatSIMD const & q1,
    +
    208  detail::fquatSIMD const & q2);
    +
    209 
    +
    220  detail::fquatSIMD mix(
    +
    221  detail::fquatSIMD const & x,
    +
    222  detail::fquatSIMD const & y,
    +
    223  float const & a);
    +
    224 
    +
    233  detail::fquatSIMD lerp(
    +
    234  detail::fquatSIMD const & x,
    +
    235  detail::fquatSIMD const & y,
    +
    236  float const & a);
    +
    237 
    +
    246  detail::fquatSIMD slerp(
    +
    247  detail::fquatSIMD const & x,
    +
    248  detail::fquatSIMD const & y,
    +
    249  float const & a);
    +
    250 
    +
    251 
    +
    262  detail::fquatSIMD fastMix(
    +
    263  detail::fquatSIMD const & x,
    +
    264  detail::fquatSIMD const & y,
    +
    265  float const & a);
    +
    266 
    +
    274  detail::fquatSIMD fastSlerp(
    +
    275  detail::fquatSIMD const & x,
    +
    276  detail::fquatSIMD const & y,
    +
    277  float const & a);
    +
    278 
    +
    279 
    +
    283  detail::fquatSIMD conjugate(
    +
    284  detail::fquatSIMD const & q);
    +
    285 
    +
    289  detail::fquatSIMD inverse(
    +
    290  detail::fquatSIMD const & q);
    +
    291 
    +
    298  detail::fquatSIMD angleAxisSIMD(
    +
    299  float const & angle,
    +
    300  vec3 const & axis);
    +
    301 
    +
    310  detail::fquatSIMD angleAxisSIMD(
    +
    311  float const & angle,
    +
    312  float const & x,
    +
    313  float const & y,
    +
    314  float const & z);
    +
    315 
    +
    316  // TODO: Move this to somewhere more appropriate. Used with fastMix() and fastSlerp().
    +
    318  __m128 fastSin(__m128 x);
    +
    319 
    +
    321 }//namespace glm
    +
    322 
    +
    323 #include "simd_quat.inl"
    +
    324 
    +
    325 
    +
    326 #if (GLM_COMPILER & GLM_COMPILER_VC)
    +
    327 # pragma warning(pop)
    +
    328 #endif
    +
    329 
    +
    330 
    +
    331 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    +
    mat4x4 mat4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:438
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    GLM_FUNC_DECL vecType< T, P > normalize(vecType< T, P > const &x)
    Returns a vector in the same direction as x but with length of 1.
    +
    GLM_FUNC_DECL matType< T, P > inverse(matType< T, P > const &m)
    Return the inverse of a squared matrix.
    +
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    +
    GLM_FUNC_DECL tquat< T, P > lerp(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
    Linear interpolation of two quaternions.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL vecType< T, P > mix(vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)
    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
    +
    GLM_FUNC_DECL tvec3< T, P > eulerAngles(tquat< T, P > const &x)
    Returns euler angles, yitch as x, yaw as y, roll as z.
    +
    GLM_FUNC_DECL tquat< T, P > conjugate(tquat< T, P > const &q)
    Returns the q conjugate.
    +
    GLM_FUNC_DECL tquat< T, P > fastMix(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
    Quaternion normalized linear interpolation.
    +
    GLM_FUNC_DECL tquat< T, P > slerp(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
    Spherical linear interpolation of two quaternions.
    +
    GLM_FUNC_DECL T fastSin(T angle)
    Faster than the common sin function but less accurate.
    +
    GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    +
    GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)
    Returns the q rotation axis.
    +
    GLM_FUNC_DECL tquat< T, P > quat_cast(tmat3x3< T, P > const &x)
    Converts a 3 * 3 matrix to a quaternion.
    +
    GLM_FUNC_DECL T dot(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the dot product of x and y, i.e., result = x * y.
    diff --git a/doc/api/a00108.html b/doc/api/a00108.html new file mode 100644 index 00000000..5dbd70f8 --- /dev/null +++ b/doc/api/a00108.html @@ -0,0 +1,73 @@ + + + + + + +0.9.6: simd_vec4.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    simd_vec4.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTX_simd_vec4

    +
    Date
    2009-05-07 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file simd_vec4.hpp.

    +
    + + + + diff --git a/doc/api/a00108_source.html b/doc/api/a00108_source.html index 40a7402d..4102b9ef 100644 --- a/doc/api/a00108_source.html +++ b/doc/api/a00108_source.html @@ -3,8 +3,8 @@ - -GLM: setup.hpp Source File + +0.9.6: simd_vec4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,771 +41,361 @@
    -
    setup.hpp
    +
    simd_vec4.hpp
    -
    1 
    -
    29 #ifndef GLM_SETUP_INCLUDED
    -
    30 #define GLM_SETUP_INCLUDED
    -
    31 
    -
    32 #include <cassert>
    -
    33 
    -
    35 // Version
    -
    36 
    -
    37 #define GLM_VERSION 95
    -
    38 #define GLM_VERSION_MAJOR 0
    -
    39 #define GLM_VERSION_MINOR 9
    -
    40 #define GLM_VERSION_PATCH 5
    -
    41 #define GLM_VERSION_REVISION 1
    -
    42 
    -
    44 // Platform
    -
    45 
    -
    46 #define GLM_PLATFORM_UNKNOWN 0x00000000
    -
    47 #define GLM_PLATFORM_WINDOWS 0x00010000
    -
    48 #define GLM_PLATFORM_LINUX 0x00020000
    -
    49 #define GLM_PLATFORM_APPLE 0x00040000
    -
    50 //#define GLM_PLATFORM_IOS 0x00080000
    -
    51 #define GLM_PLATFORM_ANDROID 0x00100000
    -
    52 #define GLM_PLATFORM_CHROME_NACL 0x00200000
    -
    53 #define GLM_PLATFORM_UNIX 0x00400000
    -
    54 #define GLM_PLATFORM_QNXNTO 0x00800000
    -
    55 #define GLM_PLATFORM_WINCE 0x01000000
    -
    56 
    -
    57 #ifdef GLM_FORCE_PLATFORM_UNKNOWN
    -
    58 # define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
    -
    59 #elif defined(__QNXNTO__)
    -
    60 # define GLM_PLATFORM GLM_PLATFORM_QNXNTO
    -
    61 #elif defined(__APPLE__)
    -
    62 # define GLM_PLATFORM GLM_PLATFORM_APPLE
    -
    63 #elif defined(WINCE)
    -
    64 # define GLM_PLATFORM GLM_PLATFORM_WINCE
    -
    65 #elif defined(_WIN32)
    -
    66 # define GLM_PLATFORM GLM_PLATFORM_WINDOWS
    -
    67 #elif defined(__native_client__)
    -
    68 # define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL
    -
    69 #elif defined(__ANDROID__)
    -
    70 # define GLM_PLATFORM GLM_PLATFORM_ANDROID
    -
    71 #elif defined(__linux)
    -
    72 # define GLM_PLATFORM GLM_PLATFORM_LINUX
    -
    73 #elif defined(__unix)
    -
    74 # define GLM_PLATFORM GLM_PLATFORM_UNIX
    -
    75 #else
    -
    76 # define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
    -
    77 #endif//
    -
    78 
    -
    79 // Report platform detection
    -
    80 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_PLATFORM_DISPLAYED))
    -
    81 # define GLM_MESSAGE_PLATFORM_DISPLAYED
    -
    82 # if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO)
    -
    83 # pragma message("GLM: QNX platform detected")
    -
    84 //# elif(GLM_PLATFORM & GLM_PLATFORM_IOS)
    -
    85 //# pragma message("GLM: iOS platform detected")
    -
    86 # elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
    -
    87 # pragma message("GLM: Apple platform detected")
    -
    88 # elif(GLM_PLATFORM & GLM_PLATFORM_WINCE)
    -
    89 # pragma message("GLM: WinCE platform detected")
    -
    90 # elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
    -
    91 # pragma message("GLM: Windows platform detected")
    -
    92 # elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
    -
    93 # pragma message("GLM: Native Client detected")
    -
    94 # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
    -
    95 # pragma message("GLM: Android platform detected")
    -
    96 # elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
    -
    97 # pragma message("GLM: Linux platform detected")
    -
    98 # elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
    -
    99 # pragma message("GLM: UNIX platform detected")
    -
    100 # elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
    -
    101 # pragma message("GLM: platform unknown")
    -
    102 # else
    -
    103 # pragma message("GLM: platform not detected")
    -
    104 # endif
    -
    105 #endif//GLM_MESSAGE
    -
    106 
    -
    108 // Compiler
    -
    109 
    -
    110 // User defines: GLM_FORCE_COMPILER_UNKNOWN
    -
    111 // TODO ? __llvm__
    -
    112 
    -
    113 #define GLM_COMPILER_UNKNOWN 0x00000000
    -
    114 
    -
    115 // Intel
    -
    116 #define GLM_COMPILER_INTEL 0x00100000
    -
    117 #define GLM_COMPILER_INTEL9 0x00100010
    -
    118 #define GLM_COMPILER_INTEL10_0 0x00100020
    -
    119 #define GLM_COMPILER_INTEL10_1 0x00100030
    -
    120 #define GLM_COMPILER_INTEL11_0 0x00100040
    -
    121 #define GLM_COMPILER_INTEL11_1 0x00100050
    -
    122 #define GLM_COMPILER_INTEL12_0 0x00100060
    -
    123 #define GLM_COMPILER_INTEL12_1 0x00100070
    -
    124 #define GLM_COMPILER_INTEL13_0 0x00100080
    -
    125 
    -
    126 // Visual C++ defines
    -
    127 #define GLM_COMPILER_VC 0x01000000
    -
    128 #define GLM_COMPILER_VC8 0x01000070
    -
    129 #define GLM_COMPILER_VC9 0x01000080
    -
    130 #define GLM_COMPILER_VC10 0x01000090
    -
    131 #define GLM_COMPILER_VC11 0x010000A0
    -
    132 #define GLM_COMPILER_VC12 0x010000B0
    -
    133 
    -
    134 // GCC defines
    -
    135 #define GLM_COMPILER_GCC 0x02000000
    -
    136 #define GLM_COMPILER_GCC34 0x02000050
    -
    137 #define GLM_COMPILER_GCC35 0x02000060
    -
    138 #define GLM_COMPILER_GCC40 0x02000070
    -
    139 #define GLM_COMPILER_GCC41 0x02000080
    -
    140 #define GLM_COMPILER_GCC42 0x02000090
    -
    141 #define GLM_COMPILER_GCC43 0x020000A0
    -
    142 #define GLM_COMPILER_GCC44 0x020000B0
    -
    143 #define GLM_COMPILER_GCC45 0x020000C0
    -
    144 #define GLM_COMPILER_GCC46 0x020000D0
    -
    145 #define GLM_COMPILER_GCC47 0x020000E0
    -
    146 #define GLM_COMPILER_GCC48 0x020000F0
    -
    147 #define GLM_COMPILER_GCC49 0x02000100
    -
    148 
    -
    149 // Borland C++
    -
    150 #define GLM_COMPILER_BC 0x04000000
    -
    151 
    -
    152 // CodeWarrior
    -
    153 #define GLM_COMPILER_CODEWARRIOR 0x08000000
    -
    154 
    -
    155 // CUDA
    -
    156 #define GLM_COMPILER_CUDA 0x10000000
    -
    157 #define GLM_COMPILER_CUDA30 0x10000010
    -
    158 #define GLM_COMPILER_CUDA31 0x10000020
    -
    159 #define GLM_COMPILER_CUDA32 0x10000030
    -
    160 #define GLM_COMPILER_CUDA40 0x10000040
    -
    161 #define GLM_COMPILER_CUDA41 0x10000050
    -
    162 #define GLM_COMPILER_CUDA42 0x10000060
    -
    163 
    -
    164 // Clang
    -
    165 #define GLM_COMPILER_CLANG 0x20000000
    -
    166 #define GLM_COMPILER_CLANG26 0x20000010
    -
    167 #define GLM_COMPILER_CLANG27 0x20000020
    -
    168 #define GLM_COMPILER_CLANG28 0x20000030
    -
    169 #define GLM_COMPILER_CLANG29 0x20000040
    -
    170 #define GLM_COMPILER_CLANG30 0x20000050
    -
    171 #define GLM_COMPILER_CLANG31 0x20000060
    -
    172 #define GLM_COMPILER_CLANG32 0x20000070
    -
    173 #define GLM_COMPILER_CLANG33 0x20000080
    -
    174 #define GLM_COMPILER_CLANG40 0x20000090
    -
    175 #define GLM_COMPILER_CLANG41 0x200000A0
    -
    176 #define GLM_COMPILER_CLANG42 0x200000B0
    -
    177 #define GLM_COMPILER_CLANG43 0x200000C0
    -
    178 #define GLM_COMPILER_CLANG50 0x200000D0
    -
    179 
    -
    180 // LLVM GCC
    -
    181 #define GLM_COMPILER_LLVM_GCC 0x40000000
    -
    182 
    -
    183 // Build model
    -
    184 #define GLM_MODEL_32 0x00000010
    -
    185 #define GLM_MODEL_64 0x00000020
    -
    186 
    -
    187 // Force generic C++ compiler
    -
    188 #ifdef GLM_FORCE_COMPILER_UNKNOWN
    -
    189 # define GLM_COMPILER GLM_COMPILER_UNKNOWN
    -
    190 
    -
    191 #elif defined(__INTEL_COMPILER)
    -
    192 # if __INTEL_COMPILER == 900
    -
    193 # define GLM_COMPILER GLM_COMPILER_INTEL9
    -
    194 # elif __INTEL_COMPILER == 1000
    -
    195 # define GLM_COMPILER GLM_COMPILER_INTEL10_0
    -
    196 # elif __INTEL_COMPILER == 1010
    -
    197 # define GLM_COMPILER GLM_COMPILER_INTEL10_1
    -
    198 # elif __INTEL_COMPILER == 1100
    -
    199 # define GLM_COMPILER GLM_COMPILER_INTEL11_0
    -
    200 # elif __INTEL_COMPILER == 1110
    -
    201 # define GLM_COMPILER GLM_COMPILER_INTEL11_1
    -
    202 # elif __INTEL_COMPILER == 1200
    -
    203 # define GLM_COMPILER GLM_COMPILER_INTEL12_0
    -
    204 # elif __INTEL_COMPILER == 1210
    -
    205 # define GLM_COMPILER GLM_COMPILER_INTEL12_1
    -
    206 # elif __INTEL_COMPILER >= 1300
    -
    207 # define GLM_COMPILER GLM_COMPILER_INTEL13_0
    -
    208 # else
    -
    209 # define GLM_COMPILER GLM_COMPILER_INTEL
    -
    210 # endif
    -
    211 
    -
    212 // CUDA
    -
    213 #elif defined(__CUDACC__)
    -
    214 # if CUDA_VERSION < 3000
    -
    215 # error "GLM requires CUDA 3.0 or higher"
    -
    216 # else
    -
    217 # define GLM_COMPILER GLM_COMPILER_CUDA
    -
    218 # endif
    -
    219 
    -
    220 // Visual C++
    -
    221 #elif defined(_MSC_VER)
    -
    222 # if _MSC_VER < 1400
    -
    223 # error "GLM requires Visual C++ 2005 or higher"
    -
    224 # elif _MSC_VER == 1400
    -
    225 # define GLM_COMPILER GLM_COMPILER_VC8
    -
    226 # elif _MSC_VER == 1500
    -
    227 # define GLM_COMPILER GLM_COMPILER_VC9
    -
    228 # elif _MSC_VER == 1600
    -
    229 # define GLM_COMPILER GLM_COMPILER_VC10
    -
    230 # elif _MSC_VER == 1700
    -
    231 # define GLM_COMPILER GLM_COMPILER_VC11
    -
    232 # elif _MSC_VER >= 1800
    -
    233 # define GLM_COMPILER GLM_COMPILER_VC12
    -
    234 # else//_MSC_VER
    -
    235 # define GLM_COMPILER GLM_COMPILER_VC
    -
    236 # endif//_MSC_VER
    -
    237 
    -
    238 // Clang
    -
    239 #elif defined(__clang__)
    -
    240 # if (__clang_major__ <= 1) || ((__clang_major__ == 2) && (__clang_minor__ < 6))
    -
    241 # error "GLM requires Clang 2.6 or higher"
    -
    242 # elif(__clang_major__ == 2) && (__clang_minor__ == 6)
    -
    243 # define GLM_COMPILER GLM_COMPILER_CLANG26
    -
    244 # elif(__clang_major__ == 2) && (__clang_minor__ == 7)
    -
    245 # define GLM_COMPILER GLM_COMPILER_CLANG27
    -
    246 # elif(__clang_major__ == 2) && (__clang_minor__ == 8)
    -
    247 # define GLM_COMPILER GLM_COMPILER_CLANG28
    -
    248 # elif(__clang_major__ == 2) && (__clang_minor__ == 9)
    -
    249 # define GLM_COMPILER GLM_COMPILER_CLANG29
    -
    250 # elif(__clang_major__ == 3) && (__clang_minor__ == 0)
    -
    251 # define GLM_COMPILER GLM_COMPILER_CLANG30
    -
    252 # elif(__clang_major__ == 3) && (__clang_minor__ == 1)
    -
    253 # define GLM_COMPILER GLM_COMPILER_CLANG31
    -
    254 # elif(__clang_major__ == 3) && (__clang_minor__ == 2)
    -
    255 # define GLM_COMPILER GLM_COMPILER_CLANG32
    -
    256 # elif(__clang_major__ == 3) && (__clang_minor__ == 3)
    -
    257 # define GLM_COMPILER GLM_COMPILER_CLANG33
    -
    258 # elif(__clang_major__ == 4) && (__clang_minor__ == 0)
    -
    259 # define GLM_COMPILER GLM_COMPILER_CLANG40
    -
    260 # elif(__clang_major__ == 4) && (__clang_minor__ == 1)
    -
    261 # define GLM_COMPILER GLM_COMPILER_CLANG41
    -
    262 # elif(__clang_major__ == 4) && (__clang_minor__ == 2)
    -
    263 # define GLM_COMPILER GLM_COMPILER_CLANG42
    -
    264 # elif(__clang_major__ == 4) && (__clang_minor__ >= 3)
    -
    265 # define GLM_COMPILER GLM_COMPILER_CLANG43
    -
    266 # elif(__clang_major__ > 4)
    -
    267 # define GLM_COMPILER GLM_COMPILER_CLANG50
    -
    268 # else
    -
    269 # define GLM_COMPILER GLM_COMPILER_CLANG
    -
    270 # endif
    -
    271 
    -
    272 // G++
    -
    273 #elif(defined(__GNUC__) || defined(__MINGW32__))// || defined(__llvm__) || defined(__clang__)
    -
    274 # if (__GNUC__ == 3) && (__GNUC_MINOR__ == 4)
    -
    275 # define GLM_COMPILER GLM_COMPILER_GCC34
    -
    276 # elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 5)
    -
    277 # define GLM_COMPILER GLM_COMPILER_GCC35
    -
    278 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 0)
    -
    279 # define GLM_COMPILER (GLM_COMPILER_GCC40)
    -
    280 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 1)
    -
    281 # define GLM_COMPILER (GLM_COMPILER_GCC41)
    -
    282 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
    -
    283 # define GLM_COMPILER (GLM_COMPILER_GCC42)
    -
    284 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
    -
    285 # define GLM_COMPILER (GLM_COMPILER_GCC43)
    -
    286 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4)
    -
    287 # define GLM_COMPILER (GLM_COMPILER_GCC44)
    -
    288 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 5)
    -
    289 # define GLM_COMPILER (GLM_COMPILER_GCC45)
    -
    290 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)
    -
    291 # define GLM_COMPILER (GLM_COMPILER_GCC46)
    -
    292 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 7)
    -
    293 # define GLM_COMPILER (GLM_COMPILER_GCC47)
    -
    294 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
    -
    295 # define GLM_COMPILER (GLM_COMPILER_GCC48)
    -
    296 # elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)
    -
    297 # define GLM_COMPILER (GLM_COMPILER_GCC49)
    -
    298 # elif (__GNUC__ > 4 )
    -
    299 # define GLM_COMPILER (GLM_COMPILER_GCC49)
    -
    300 # else
    -
    301 # define GLM_COMPILER (GLM_COMPILER_GCC)
    -
    302 # endif
    -
    303 
    -
    304 // Borland C++
    -
    305 #elif defined(_BORLANDC_)
    -
    306 # define GLM_COMPILER GLM_COMPILER_BC
    -
    307 
    -
    308 // Codewarrior
    -
    309 #elif defined(__MWERKS__)
    -
    310 # define GLM_COMPILER GLM_COMPILER_CODEWARRIOR
    -
    311 
    -
    312 #else
    -
    313 # define GLM_COMPILER GLM_COMPILER_UNKNOWN
    -
    314 #endif
    -
    315 
    -
    316 #ifndef GLM_COMPILER
    -
    317 #error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message."
    -
    318 #endif//GLM_COMPILER
    -
    319 
    -
    320 // Report compiler detection
    -
    321 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPILER_DISPLAYED))
    -
    322 # define GLM_MESSAGE_COMPILER_DISPLAYED
    -
    323 # if(GLM_COMPILER & GLM_COMPILER_CUDA)
    -
    324 # pragma message("GLM: CUDA compiler detected")
    -
    325 # elif(GLM_COMPILER & GLM_COMPILER_VC)
    -
    326 # pragma message("GLM: Visual C++ compiler detected")
    -
    327 # elif(GLM_COMPILER & GLM_COMPILER_CLANG)
    -
    328 # pragma message("GLM: Clang compiler detected")
    -
    329 # elif(GLM_COMPILER & GLM_COMPILER_LLVM_GCC)
    -
    330 # pragma message("GLM: LLVM GCC compiler detected")
    -
    331 # elif(GLM_COMPILER & GLM_COMPILER_INTEL)
    -
    332 # pragma message("GLM: Intel Compiler detected")
    -
    333 # elif(GLM_COMPILER & GLM_COMPILER_GCC)
    -
    334 # if(GLM_COMPILER == GLM_COMPILER_GCC_LLVM)
    -
    335 # pragma message("GLM: LLVM GCC compiler detected")
    -
    336 # elif(GLM_COMPILER == GLM_COMPILER_GCC_CLANG)
    -
    337 # pragma message("GLM: CLANG compiler detected")
    -
    338 # else
    -
    339 # pragma message("GLM: GCC compiler detected")
    -
    340 # endif
    -
    341 # elif(GLM_COMPILER & GLM_COMPILER_BC)
    -
    342 # pragma message("GLM: Borland compiler detected but not supported")
    -
    343 # elif(GLM_COMPILER & GLM_COMPILER_CODEWARRIOR)
    -
    344 # pragma message("GLM: Codewarrior compiler detected but not supported")
    -
    345 # else
    -
    346 # pragma message("GLM: Compiler not detected")
    -
    347 # endif
    -
    348 #endif//GLM_MESSAGE
    -
    349 
    -
    351 // Build model //
    -
    352 
    -
    353 #if(defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__))
    -
    354 # define GLM_MODEL GLM_MODEL_64
    -
    355 #elif(defined(__i386__) || defined(__ppc__))
    -
    356 # define GLM_MODEL GLM_MODEL_32
    -
    357 #else
    -
    358 # define GLM_MODEL GLM_MODEL_32
    -
    359 #endif//
    -
    360 
    -
    361 #if(!defined(GLM_MODEL) && GLM_COMPILER != 0)
    -
    362 # error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
    -
    363 #endif//GLM_MODEL
    -
    364 
    -
    365 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_MODEL_DISPLAYED))
    -
    366 # define GLM_MESSAGE_MODEL_DISPLAYED
    -
    367 # if(GLM_MODEL == GLM_MODEL_64)
    -
    368 # pragma message("GLM: 64 bits model")
    -
    369 # elif(GLM_MODEL == GLM_MODEL_32)
    -
    370 # pragma message("GLM: 32 bits model")
    -
    371 # endif//GLM_MODEL
    -
    372 #endif//GLM_MESSAGE
    -
    373 
    -
    375 // C++ Version //
    -
    376 
    -
    377 // User defines: GLM_FORCE_CXX98
    -
    378 
    -
    379 #define GLM_LANG_CXX_FLAG (1 << 0)
    -
    380 #define GLM_LANG_CXX98_FLAG (1 << 1)
    -
    381 #define GLM_LANG_CXX03_FLAG (1 << 2)
    -
    382 #define GLM_LANG_CXX0X_FLAG (1 << 3)
    -
    383 #define GLM_LANG_CXX11_FLAG (1 << 4)
    -
    384 #define GLM_LANG_CXX1Y_FLAG (1 << 5)
    -
    385 #define GLM_LANG_CXXMS_FLAG (1 << 6)
    -
    386 #define GLM_LANG_CXXGNU_FLAG (1 << 7)
    -
    387 
    -
    388 #define GLM_LANG_CXX GLM_LANG_CXX_FLAG
    -
    389 #define GLM_LANG_CXX98 (GLM_LANG_CXX | GLM_LANG_CXX98_FLAG)
    -
    390 #define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
    -
    391 #define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)
    -
    392 #define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)
    -
    393 #define GLM_LANG_CXX1Y (GLM_LANG_CXX11 | GLM_LANG_CXX1Y_FLAG)
    -
    394 #define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
    -
    395 #define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG
    -
    396 
    -
    397 #if(defined(GLM_FORCE_CXX1Y))
    -
    398 # define GLM_LANG GLM_LANG_CXX1Y
    -
    399 #elif(defined(GLM_FORCE_CXX11))
    -
    400 # define GLM_LANG GLM_LANG_CXX11
    -
    401 #elif(defined(GLM_FORCE_CXX03))
    -
    402 # define GLM_LANG GLM_LANG_CXX03
    -
    403 #elif(defined(GLM_FORCE_CXX98))
    -
    404 # define GLM_LANG GLM_LANG_CXX98
    -
    405 #else
    -
    406 # if(__cplusplus >= 201103L)
    -
    407 # define GLM_LANG GLM_LANG_CXX11
    -
    408 # elif((GLM_COMPILER & GLM_COMPILER_CLANG) == GLM_COMPILER_CLANG)
    -
    409 # if(GLM_PLATFORM == GLM_PLATFORM_APPLE)
    -
    410 # define GLM_DETAIL_MAJOR 1
    -
    411 # else
    -
    412 # define GLM_DETAIL_MAJOR 0
    -
    413 # endif
    -
    414 # if(__clang_major__ < (2 + GLM_DETAIL_MAJOR))
    -
    415 # define GLM_LANG GLM_LANG_CXX
    -
    416 # elif(__has_feature(cxx_auto_type))
    -
    417 # define GLM_LANG GLM_LANG_CXX0X
    -
    418 # else
    -
    419 # define GLM_LANG GLM_LANG_CXX98
    -
    420 # endif
    -
    421 # elif((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC)
    -
    422 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
    -
    423 # define GLM_LANG GLM_LANG_CXX0X
    -
    424 # else
    -
    425 # define GLM_LANG GLM_LANG_CXX98
    -
    426 # endif
    -
    427 # elif(GLM_COMPILER & GLM_COMPILER_VC)
    -
    428 # if(defined(_MSC_EXTENSIONS))
    -
    429 # if(GLM_COMPILER >= GLM_COMPILER_VC10)
    -
    430 # define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
    -
    431 # else
    -
    432 # define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
    -
    433 # endif
    -
    434 # else
    -
    435 # if(GLM_COMPILER >= GLM_COMPILER_VC10)
    -
    436 # define GLM_LANG GLM_LANG_CXX0X
    -
    437 # else
    -
    438 # define GLM_LANG GLM_LANG_CXX98
    -
    439 # endif
    -
    440 # endif
    -
    441 # elif(GLM_COMPILER & GLM_COMPILER_INTEL)
    -
    442 # if(defined(_MSC_EXTENSIONS))
    -
    443 # if(GLM_COMPILER >= GLM_COMPILER_INTEL13_0)
    -
    444 # define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
    -
    445 # else
    -
    446 # define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
    -
    447 # endif
    -
    448 # else
    -
    449 # if(GLM_COMPILER >= GLM_COMPILER_INTEL13_0)
    -
    450 # define GLM_LANG (GLM_LANG_CXX0X)
    -
    451 # else
    -
    452 # define GLM_LANG (GLM_LANG_CXX98)
    -
    453 # endif
    -
    454 # endif
    -
    455 # elif(__cplusplus >= 199711L)
    -
    456 # define GLM_LANG GLM_LANG_CXX98
    -
    457 # else
    -
    458 # define GLM_LANG GLM_LANG_CXX
    -
    459 # endif
    -
    460 #endif
    -
    461 
    -
    462 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_LANG_DISPLAYED))
    -
    463 # define GLM_MESSAGE_LANG_DISPLAYED
    -
    464 # if(GLM_LANG & GLM_LANG_CXXGNU_FLAG)
    -
    465 # pragma message("GLM: C++ with language extensions")
    -
    466 # elif(GLM_LANG & GLM_LANG_CXXMS_FLAG)
    -
    467 # pragma message("GLM: C++ with language extensions")
    -
    468 # elif(GLM_LANG & GLM_LANG_CXX11_FLAG)
    -
    469 # pragma message("GLM: C++11")
    -
    470 # elif(GLM_LANG & GLM_LANG_CXX0X_FLAG)
    -
    471 # pragma message("GLM: C++0x")
    -
    472 # elif(GLM_LANG & GLM_LANG_CXX03_FLAG)
    -
    473 # pragma message("GLM: C++03")
    -
    474 # elif(GLM_LANG & GLM_LANG_CXX98_FLAG)
    -
    475 # pragma message("GLM: C++98")
    -
    476 # else
    -
    477 # pragma message("GLM: C++ language undetected")
    -
    478 # endif//GLM_MODEL
    -
    479 # pragma message("GLM: #define GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_LANG_CXX11 or GLM_FORCE_CXX1Y to force using a specific version of the C++ language")
    -
    480 #endif//GLM_MESSAGE
    -
    481 
    -
    483 // Has of C++ features
    -
    484 
    -
    485 #ifndef __has_feature
    -
    486 # define __has_feature(x) 0 // Compatibility with non-clang compilers.
    -
    487 #endif
    -
    488 #ifndef __has_extension
    -
    489 # define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
    -
    490 #endif
    -
    491 
    -
    492 // http://clang.llvm.org/cxx_status.html
    -
    493 // http://gcc.gnu.org/projects/cxx0x.html
    -
    494 // http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx
    -
    495 
    -
    496 // N1720
    -
    497 #define GLM_HAS_STATIC_ASSERT ( \
    -
    498  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    -
    499  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC10)) || \
    -
    500  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \
    -
    501  __has_feature(cxx_static_assert))
    -
    502 
    -
    503 // N1988
    -
    504 #define GLM_HAS_EXTENDED_INTEGER_TYPE ( \
    -
    505  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    -
    506  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11)) || \
    -
    507  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \
    -
    508  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG) && (GLM_COMPILER >= GLM_COMPILER_CLANG29)))
    -
    509 
    -
    510 // N2235
    -
    511 #define GLM_HAS_CONSTEXPR ( \
    -
    512  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    -
    513  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)) || \
    -
    514  __has_feature(cxx_constexpr))
    -
    515 
    -
    516 // N2672
    -
    517 #define GLM_HAS_INITIALIZER_LISTS ( \
    -
    518  (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
    -
    519  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12))) || \
    -
    520  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC44)) || \
    -
    521  __has_feature(cxx_generalized_initializers))
    -
    522 
    -
    523 // OpenMP
    -
    524 #ifdef _OPENMP
    -
    525 # if(GLM_COMPILER & GLM_COMPILER_GCC)
    -
    526 # if(GLM_COMPILER > GLM_COMPILER_GCC47)
    -
    527 # define GLM_HAS_OPENMP 31
    -
    528 # elif(GLM_COMPILER > GLM_COMPILER_GCC44)
    -
    529 # define GLM_HAS_OPENMP 30
    -
    530 # elif(GLM_COMPILER > GLM_COMPILER_GCC42)
    -
    531 # define GLM_HAS_OPENMP 25
    -
    532 # endif
    -
    533 # endif//(GLM_COMPILER & GLM_COMPILER_GCC)
    -
    534 
    -
    535 # if(GLM_COMPILER & GLM_COMPILER_VC)
    -
    536 # if(GLM_COMPILER > GLM_COMPILER_VC8)
    -
    537 # define GLM_HAS_OPENMP 20
    -
    538 # endif
    -
    539 # endif//(GLM_COMPILER & GLM_COMPILER_GCC)
    -
    540 #endif
    -
    541 
    -
    542 // Not standard
    -
    543 #define GLM_HAS_ANONYMOUS_UNION (GLM_LANG & GLM_LANG_CXXMS_FLAG)
    -
    544 
    -
    546 // Platform
    +Go to the documentation of this file.
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(GLM_ARCH != GLM_ARCH_PURE)
    +
    44 
    +
    45 #if(GLM_ARCH & GLM_ARCH_SSE2)
    +
    46 # include "../detail/intrinsic_common.hpp"
    +
    47 # include "../detail/intrinsic_geometric.hpp"
    +
    48 # include "../detail/intrinsic_integer.hpp"
    +
    49 #else
    +
    50 # error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
    +
    51 #endif
    +
    52 
    +
    53 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    54 # pragma message("GLM: GLM_GTX_simd_vec4 extension included")
    +
    55 #endif
    +
    56 
    +
    57 
    +
    58 // Warning silencer for nameless struct/union.
    +
    59 #if (GLM_COMPILER & GLM_COMPILER_VC)
    +
    60 # pragma warning(push)
    +
    61 # pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
    +
    62 #endif
    +
    63 
    +
    64 namespace glm
    +
    65 {
    +
    66  enum comp
    +
    67  {
    +
    68  X = 0,
    +
    69  R = 0,
    +
    70  S = 0,
    +
    71  Y = 1,
    +
    72  G = 1,
    +
    73  T = 1,
    +
    74  Z = 2,
    +
    75  B = 2,
    +
    76  P = 2,
    +
    77  W = 3,
    +
    78  A = 3,
    +
    79  Q = 3
    +
    80  };
    +
    81 
    +
    82 }//namespace glm
    +
    83 
    +
    84 namespace glm{
    +
    85 namespace detail
    +
    86 {
    +
    89  GLM_ALIGNED_STRUCT(16) fvec4SIMD
    +
    90  {
    +
    91  typedef __m128 value_type;
    +
    92  typedef std::size_t size_type;
    +
    93  static size_type value_size();
    +
    94 
    +
    95  typedef fvec4SIMD type;
    +
    96  typedef tvec4<bool, highp> bool_type;
    +
    97 
    +
    98 #ifdef GLM_SIMD_ENABLE_XYZW_UNION
    +
    99  union
    +
    100  {
    +
    101  __m128 Data;
    +
    102  struct {float x, y, z, w;};
    +
    103  };
    +
    104 #else
    +
    105  __m128 Data;
    +
    106 #endif
    +
    107 
    +
    109  // Implicit basic constructors
    +
    110 
    +
    111  fvec4SIMD();
    +
    112  fvec4SIMD(__m128 const & Data);
    +
    113  fvec4SIMD(fvec4SIMD const & v);
    +
    114 
    +
    116  // Explicit basic constructors
    +
    117 
    +
    118  explicit fvec4SIMD(
    +
    119  ctor);
    +
    120  explicit fvec4SIMD(
    +
    121  float const & s);
    +
    122  explicit fvec4SIMD(
    +
    123  float const & x,
    +
    124  float const & y,
    +
    125  float const & z,
    +
    126  float const & w);
    +
    127  explicit fvec4SIMD(
    +
    128  vec4 const & v);
    +
    129 
    +
    132 
    +
    133  fvec4SIMD(vec2 const & v, float const & s1, float const & s2);
    +
    134  fvec4SIMD(float const & s1, vec2 const & v, float const & s2);
    +
    135  fvec4SIMD(float const & s1, float const & s2, vec2 const & v);
    +
    136  fvec4SIMD(vec3 const & v, float const & s);
    +
    137  fvec4SIMD(float const & s, vec3 const & v);
    +
    138  fvec4SIMD(vec2 const & v1, vec2 const & v2);
    +
    139  //fvec4SIMD(ivec4SIMD const & v);
    +
    140 
    +
    142  // Unary arithmetic operators
    +
    143 
    +
    144  fvec4SIMD& operator= (fvec4SIMD const & v);
    +
    145  fvec4SIMD& operator+=(fvec4SIMD const & v);
    +
    146  fvec4SIMD& operator-=(fvec4SIMD const & v);
    +
    147  fvec4SIMD& operator*=(fvec4SIMD const & v);
    +
    148  fvec4SIMD& operator/=(fvec4SIMD const & v);
    +
    149 
    +
    150  fvec4SIMD& operator+=(float const & s);
    +
    151  fvec4SIMD& operator-=(float const & s);
    +
    152  fvec4SIMD& operator*=(float const & s);
    +
    153  fvec4SIMD& operator/=(float const & s);
    +
    154 
    +
    155  fvec4SIMD& operator++();
    +
    156  fvec4SIMD& operator--();
    +
    157 
    +
    159  // Swizzle operators
    +
    160 
    +
    161  template <comp X, comp Y, comp Z, comp W>
    +
    162  fvec4SIMD& swizzle();
    +
    163  template <comp X, comp Y, comp Z, comp W>
    +
    164  fvec4SIMD swizzle() const;
    +
    165  template <comp X, comp Y, comp Z>
    +
    166  fvec4SIMD swizzle() const;
    +
    167  template <comp X, comp Y>
    +
    168  fvec4SIMD swizzle() const;
    +
    169  template <comp X>
    +
    170  fvec4SIMD swizzle() const;
    +
    171  };
    +
    172 }//namespace detail
    +
    173 
    +
    174  typedef glm::detail::fvec4SIMD simdVec4;
    +
    175 
    +
    178 
    +
    181  vec4 vec4_cast(
    +
    182  detail::fvec4SIMD const & x);
    +
    183 
    +
    186  detail::fvec4SIMD abs(detail::fvec4SIMD const & x);
    +
    187 
    +
    190  detail::fvec4SIMD sign(detail::fvec4SIMD const & x);
    +
    191 
    +
    194  detail::fvec4SIMD floor(detail::fvec4SIMD const & x);
    +
    195 
    +
    199  detail::fvec4SIMD trunc(detail::fvec4SIMD const & x);
    +
    200 
    +
    208  detail::fvec4SIMD round(detail::fvec4SIMD const & x);
    +
    209 
    +
    215  //detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);
    +
    216 
    +
    220  detail::fvec4SIMD ceil(detail::fvec4SIMD const & x);
    +
    221 
    +
    225  detail::fvec4SIMD fract(detail::fvec4SIMD const & x);
    +
    226 
    +
    231  detail::fvec4SIMD mod(
    +
    232  detail::fvec4SIMD const & x,
    +
    233  detail::fvec4SIMD const & y);
    +
    234 
    +
    239  detail::fvec4SIMD mod(
    +
    240  detail::fvec4SIMD const & x,
    +
    241  float const & y);
    +
    242 
    +
    248  //detail::fvec4SIMD modf(
    +
    249  // detail::fvec4SIMD const & x,
    +
    250  // detail::fvec4SIMD & i);
    +
    251 
    +
    255  detail::fvec4SIMD min(
    +
    256  detail::fvec4SIMD const & x,
    +
    257  detail::fvec4SIMD const & y);
    +
    258 
    +
    259  detail::fvec4SIMD min(
    +
    260  detail::fvec4SIMD const & x,
    +
    261  float const & y);
    +
    262 
    +
    266  detail::fvec4SIMD max(
    +
    267  detail::fvec4SIMD const & x,
    +
    268  detail::fvec4SIMD const & y);
    +
    269 
    +
    270  detail::fvec4SIMD max(
    +
    271  detail::fvec4SIMD const & x,
    +
    272  float const & y);
    +
    273 
    +
    278  detail::fvec4SIMD clamp(
    +
    279  detail::fvec4SIMD const & x,
    +
    280  detail::fvec4SIMD const & minVal,
    +
    281  detail::fvec4SIMD const & maxVal);
    +
    282 
    +
    283  detail::fvec4SIMD clamp(
    +
    284  detail::fvec4SIMD const & x,
    +
    285  float const & minVal,
    +
    286  float const & maxVal);
    +
    287 
    +
    314  detail::fvec4SIMD mix(
    +
    315  detail::fvec4SIMD const & x,
    +
    316  detail::fvec4SIMD const & y,
    +
    317  detail::fvec4SIMD const & a);
    +
    318 
    +
    322  detail::fvec4SIMD step(
    +
    323  detail::fvec4SIMD const & edge,
    +
    324  detail::fvec4SIMD const & x);
    +
    325 
    +
    326  detail::fvec4SIMD step(
    +
    327  float const & edge,
    +
    328  detail::fvec4SIMD const & x);
    +
    329 
    +
    341  detail::fvec4SIMD smoothstep(
    +
    342  detail::fvec4SIMD const & edge0,
    +
    343  detail::fvec4SIMD const & edge1,
    +
    344  detail::fvec4SIMD const & x);
    +
    345 
    +
    346  detail::fvec4SIMD smoothstep(
    +
    347  float const & edge0,
    +
    348  float const & edge1,
    +
    349  detail::fvec4SIMD const & x);
    +
    350 
    +
    358  //bvec4 isnan(detail::fvec4SIMD const & x);
    +
    359 
    +
    367  //bvec4 isinf(detail::fvec4SIMD const & x);
    +
    368 
    +
    374  //detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);
    +
    375 
    +
    383  //detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);
    +
    384 
    +
    388  detail::fvec4SIMD fma(
    +
    389  detail::fvec4SIMD const & a,
    +
    390  detail::fvec4SIMD const & b,
    +
    391  detail::fvec4SIMD const & c);
    +
    392 
    +
    403  //detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);
    +
    404 
    +
    412  //detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);
    +
    413 
    +
    417  float length(
    +
    418  detail::fvec4SIMD const & x);
    +
    419 
    +
    424  float fastLength(
    +
    425  detail::fvec4SIMD const & x);
    +
    426 
    +
    431  float niceLength(
    +
    432  detail::fvec4SIMD const & x);
    +
    433 
    +
    437  detail::fvec4SIMD length4(
    +
    438  detail::fvec4SIMD const & x);
    +
    439 
    +
    444  detail::fvec4SIMD fastLength4(
    +
    445  detail::fvec4SIMD const & x);
    +
    446 
    +
    451  detail::fvec4SIMD niceLength4(
    +
    452  detail::fvec4SIMD const & x);
    +
    453 
    +
    457  float distance(
    +
    458  detail::fvec4SIMD const & p0,
    +
    459  detail::fvec4SIMD const & p1);
    +
    460 
    +
    464  detail::fvec4SIMD distance4(
    +
    465  detail::fvec4SIMD const & p0,
    +
    466  detail::fvec4SIMD const & p1);
    +
    467 
    +
    471  float simdDot(
    +
    472  detail::fvec4SIMD const & x,
    +
    473  detail::fvec4SIMD const & y);
    +
    474 
    +
    478  detail::fvec4SIMD dot4(
    +
    479  detail::fvec4SIMD const & x,
    +
    480  detail::fvec4SIMD const & y);
    +
    481 
    +
    485  detail::fvec4SIMD cross(
    +
    486  detail::fvec4SIMD const & x,
    +
    487  detail::fvec4SIMD const & y);
    +
    488 
    +
    492  detail::fvec4SIMD normalize(
    +
    493  detail::fvec4SIMD const & x);
    +
    494 
    +
    499  detail::fvec4SIMD fastNormalize(
    +
    500  detail::fvec4SIMD const & x);
    +
    501 
    +
    505  detail::fvec4SIMD simdFaceforward(
    +
    506  detail::fvec4SIMD const & N,
    +
    507  detail::fvec4SIMD const & I,
    +
    508  detail::fvec4SIMD const & Nref);
    +
    509 
    +
    514  detail::fvec4SIMD reflect(
    +
    515  detail::fvec4SIMD const & I,
    +
    516  detail::fvec4SIMD const & N);
    +
    517 
    +
    523  detail::fvec4SIMD refract(
    +
    524  detail::fvec4SIMD const & I,
    +
    525  detail::fvec4SIMD const & N,
    +
    526  float const & eta);
    +
    527 
    +
    531  detail::fvec4SIMD sqrt(
    +
    532  detail::fvec4SIMD const & x);
    +
    533 
    +
    538  detail::fvec4SIMD niceSqrt(
    +
    539  detail::fvec4SIMD const & x);
    +
    540 
    +
    545  detail::fvec4SIMD fastSqrt(
    +
    546  detail::fvec4SIMD const & x);
    547 
    -
    548 // User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_AVX
    -
    549 
    -
    550 #define GLM_ARCH_PURE 0x0000
    -
    551 #define GLM_ARCH_SSE2 0x0001
    -
    552 #define GLM_ARCH_SSE3 0x0002// | GLM_ARCH_SSE2
    -
    553 #define GLM_ARCH_SSE4 0x0004// | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
    -
    554 #define GLM_ARCH_AVX 0x0008// | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
    -
    555 #define GLM_ARCH_AVX2 0x0010// | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
    -
    556 
    -
    557 #if(defined(GLM_FORCE_PURE))
    -
    558 # define GLM_ARCH GLM_ARCH_PURE
    -
    559 #elif(defined(GLM_FORCE_AVX2))
    -
    560 # define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    -
    561 #elif(defined(GLM_FORCE_AVX))
    -
    562 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    -
    563 #elif(defined(GLM_FORCE_SSE4))
    -
    564 # define GLM_ARCH (GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    -
    565 #elif(defined(GLM_FORCE_SSE3))
    -
    566 # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    -
    567 #elif(defined(GLM_FORCE_SSE2))
    -
    568 # define GLM_ARCH (GLM_ARCH_SSE2)
    -
    569 #elif((GLM_COMPILER & GLM_COMPILER_VC) && (defined(_M_IX86) || defined(_M_X64)))
    -
    570 # if(GLM_PLATFORM == GLM_PLATFORM_WINCE)
    -
    571 # define GLM_ARCH GLM_ARCH_PURE
    -
    572 # elif(defined(_M_CEE_PURE))
    -
    573 # define GLM_ARCH GLM_ARCH_PURE
    -
    574 /* TODO: Explore auto detection of instruction set support
    -
    575 # elif(defined(_M_IX86_FP))
    -
    576 # if(_M_IX86_FP >= 3)
    -
    577 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    -
    578 # elif(_M_IX86_FP >= 2)
    -
    579 # define GLM_ARCH (GLM_ARCH_SSE2)
    -
    580 # else
    -
    581 # define GLM_ARCH GLM_ARCH_PURE
    -
    582 # endif
    -
    583 */
    -
    584 # elif(GLM_COMPILER >= GLM_COMPILER_VC11)
    -
    585 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    -
    586 # elif(GLM_COMPILER >= GLM_COMPILER_VC10)
    -
    587 # if(_MSC_FULL_VER >= 160031118) //160031118: VC2010 SP1 beta full version
    -
    588 # define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)//GLM_ARCH_AVX (Require SP1)
    -
    589 # else
    -
    590 # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    -
    591 # endif
    -
    592 # elif(GLM_COMPILER >= GLM_COMPILER_VC9)
    -
    593 # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
    -
    594 # elif(GLM_COMPILER >= GLM_COMPILER_VC8)
    -
    595 # define GLM_ARCH GLM_ARCH_SSE2
    -
    596 # else
    -
    597 # define GLM_ARCH GLM_ARCH_PURE
    -
    598 # endif
    -
    599 #elif((GLM_PLATFORM & GLM_PLATFORM_APPLE) && (GLM_COMPILER & GLM_COMPILER_GCC))
    -
    600 # define GLM_ARCH GLM_ARCH_PURE
    -
    601 #elif(((GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__))) || (GLM_COMPILER & GLM_COMPILER_LLVM_GCC))
    -
    602 # define GLM_ARCH (GLM_ARCH_PURE \
    -
    603 | (defined(__AVX2__) ? GLM_ARCH_AVX2 : 0) \
    -
    604 | (defined(__AVX__) ? GLM_ARCH_AVX : 0) \
    -
    605 | (defined(__SSE4__) ? GLM_ARCH_SSE4 : 0) \
    -
    606 | (defined(__SSE3__) ? GLM_ARCH_SSE3 : 0) \
    -
    607 | (defined(__SSE2__) ? GLM_ARCH_SSE2 : 0))
    -
    608 #else
    -
    609 # define GLM_ARCH GLM_ARCH_PURE
    -
    610 #endif
    -
    611 
    -
    612 // With MinGW-W64, including intrinsic headers before intrin.h will produce some errors. The problem is
    -
    613 // that windows.h (and maybe other headers) will silently include intrin.h, which of course causes problems.
    -
    614 // To fix, we just explicitly include intrin.h here.
    -
    615 #if defined(__MINGW32__) && (GLM_ARCH != GLM_ARCH_PURE)
    -
    616 # include <intrin.h>
    -
    617 #endif
    -
    618 
    -
    619 //#if(GLM_ARCH != GLM_ARCH_PURE)
    -
    620 #if(GLM_ARCH & GLM_ARCH_AVX2)
    -
    621 # include <immintrin.h>
    -
    622 #endif//GLM_ARCH
    -
    623 #if(GLM_ARCH & GLM_ARCH_AVX)
    -
    624 # include <immintrin.h>
    -
    625 #endif//GLM_ARCH
    -
    626 #if(GLM_ARCH & GLM_ARCH_SSE4)
    -
    627 # include <smmintrin.h>
    -
    628 #endif//GLM_ARCH
    -
    629 #if(GLM_ARCH & GLM_ARCH_SSE3)
    -
    630 # include <pmmintrin.h>
    -
    631 #endif//GLM_ARCH
    -
    632 #if(GLM_ARCH & GLM_ARCH_SSE2)
    -
    633 # include <emmintrin.h>
    -
    634 # if(GLM_COMPILER == GLM_COMPILER_VC8) // VC8 is missing some intrinsics, workaround
    -
    635  inline float _mm_cvtss_f32(__m128 A) { return A.m128_f32[0]; }
    -
    636  inline __m128 _mm_castpd_ps(__m128d PD) { union { __m128 ps; __m128d pd; } c; c.pd = PD; return c.ps; }
    -
    637  inline __m128d _mm_castps_pd(__m128 PS) { union { __m128 ps; __m128d pd; } c; c.ps = PS; return c.pd; }
    -
    638  inline __m128i _mm_castps_si128(__m128 PS) { union { __m128 ps; __m128i pi; } c; c.ps = PS; return c.pi; }
    -
    639  inline __m128 _mm_castsi128_ps(__m128i PI) { union { __m128 ps; __m128i pi; } c; c.pi = PI; return c.ps; }
    -
    640 # endif
    -
    641 #endif//GLM_ARCH
    -
    642 //#endif//(GLM_ARCH != GLM_ARCH_PURE)
    -
    643 
    -
    644 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_ARCH_DISPLAYED))
    -
    645 # define GLM_MESSAGE_ARCH_DISPLAYED
    -
    646 # if(GLM_ARCH == GLM_ARCH_PURE)
    -
    647 # pragma message("GLM: Platform independent")
    -
    648 # elif(GLM_ARCH & GLM_ARCH_SSE2)
    -
    649 # pragma message("GLM: SSE2 instruction set")
    -
    650 # elif(GLM_ARCH & GLM_ARCH_SSE3)
    -
    651 # pragma message("GLM: SSE3 instruction set")
    -
    652 # elif(GLM_ARCH & GLM_ARCH_SSE4)
    -
    653 # pragma message("GLM: SSE4 instruction set")
    -
    654 # elif(GLM_ARCH & GLM_ARCH_AVX)
    -
    655 # pragma message("GLM: AVX instruction set")
    -
    656 # elif(GLM_ARCH & GLM_ARCH_AVX2)
    -
    657 # pragma message("GLM: AVX2 instruction set")
    -
    658 # endif//GLM_ARCH
    -
    659 # pragma message("GLM: #define GLM_FORCE_PURE to avoid using platform specific instruction sets")
    -
    660 #endif//GLM_MESSAGE
    -
    661 
    -
    663 // Radians
    -
    664 
    -
    665 //#define GLM_FORCE_RADIANS
    -
    666 
    -
    668 // Static assert
    -
    669 
    -
    670 #if GLM_HAS_STATIC_ASSERT
    -
    671 # define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
    -
    672 #elif(defined(BOOST_STATIC_ASSERT))
    -
    673 # define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x)
    -
    674 #elif(GLM_COMPILER & GLM_COMPILER_VC)
    -
    675 # define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
    -
    676 #else
    -
    677 # define GLM_STATIC_ASSERT(x, message)
    -
    678 # define GLM_STATIC_ASSERT_NULL
    -
    679 #endif//GLM_LANG
    -
    680 
    -
    682 // Qualifiers
    -
    683 
    -
    684 // User defines: GLM_FORCE_INLINE GLM_FORCE_CUDA
    -
    685 
    -
    686 #if(defined(GLM_FORCE_CUDA) || (GLM_COMPILER & GLM_COMPILER_CUDA))
    -
    687 # define GLM_CUDA_FUNC_DEF __device__ __host__
    -
    688 # define GLM_CUDA_FUNC_DECL __device__ __host__
    -
    689 #else
    -
    690 # define GLM_CUDA_FUNC_DEF
    -
    691 # define GLM_CUDA_FUNC_DECL
    -
    692 #endif
    -
    693 
    -
    694 #if GLM_COMPILER & GLM_COMPILER_GCC
    -
    695 # define GLM_VAR_USED __attribute__ ((unused))
    -
    696 #else
    -
    697 # define GLM_VAR_USED
    -
    698 #endif
    -
    699 
    -
    700 #if(defined(GLM_FORCE_INLINE))
    -
    701 # if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC8))
    -
    702 # define GLM_INLINE __forceinline
    -
    703 # elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC34))
    -
    704 # define GLM_INLINE __attribute__((always_inline)) inline
    -
    705 # elif(GLM_COMPILER & GLM_COMPILER_CLANG)
    -
    706 # define GLM_INLINE __attribute__((always_inline))
    -
    707 # else
    -
    708 # define GLM_INLINE inline
    -
    709 # endif//GLM_COMPILER
    -
    710 #else
    -
    711 # define GLM_INLINE inline
    -
    712 #endif//defined(GLM_FORCE_INLINE)
    -
    713 
    -
    714 #define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
    -
    715 #define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
    -
    716 
    -
    718 // Swizzle operators
    -
    719 
    -
    720 // User defines: GLM_SWIZZLE
    -
    721 
    -
    722 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED))
    -
    723 # define GLM_MESSAGE_SWIZZLE_DISPLAYED
    -
    724 # if defined(GLM_SWIZZLE)
    -
    725 # pragma message("GLM: Swizzling operators enabled")
    -
    726 # else
    -
    727 # pragma message("GLM: Swizzling operators disabled, #define GLM_SWIZZLE to enable swizzle operators")
    -
    728 # endif
    -
    729 #endif//GLM_MESSAGE
    -
    730 
    -
    732 // Length type
    -
    733 
    -
    734 // User defines: GLM_FORCE_SIZE_T_LENGTH
    -
    735 
    -
    736 namespace glm
    -
    737 {
    -
    738 #if defined(GLM_FORCE_SIZE_T_LENGTH)
    -
    739  typedef std::size_t length_t;
    -
    740 #else
    -
    741  typedef int length_t;
    -
    742 #endif
    -
    743 }//namespace glm
    -
    744 
    -
    745 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_FORCE_SIZE_T_LENGTH))
    -
    746 # define GLM_MESSAGE_FORCE_SIZE_T_LENGTH
    -
    747 # if defined(GLM_FORCE_SIZE_T_LENGTH)
    -
    748 # pragma message("GLM: .length() returns glm::length_t, a typedef of std::size_t")
    -
    749 # else
    -
    750 # pragma message("GLM: .length() returns glm::length_t, a typedef of int following the GLSL specification")
    -
    751 # pragma message("GLM: #define GLM_FORCE_SIZE_T_LENGTH for .length() to return a std::size_t")
    -
    752 # endif
    -
    753 #endif//GLM_MESSAGE
    -
    754 
    -
    756 // Qualifiers
    -
    757 
    -
    758 #if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC8))
    -
    759 # define GLM_DEPRECATED __declspec(deprecated)
    -
    760 # define GLM_ALIGN(x) __declspec(align(x))
    -
    761 # define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct
    -
    762 # define GLM_RESTRICT __declspec(restrict)
    -
    763 # define GLM_RESTRICT_VAR __restrict
    -
    764 #elif(GLM_COMPILER & GLM_COMPILER_INTEL)
    -
    765 # define GLM_DEPRECATED
    -
    766 # define GLM_ALIGN(x) __declspec(align(x))
    -
    767 # define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct
    -
    768 # define GLM_RESTRICT
    -
    769 # define GLM_RESTRICT_VAR __restrict
    -
    770 #elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG))
    -
    771 # define GLM_DEPRECATED __attribute__((__deprecated__))
    -
    772 # define GLM_ALIGN(x) __attribute__((aligned(x)))
    -
    773 # define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
    -
    774 # define GLM_RESTRICT __restrict__
    -
    775 # define GLM_RESTRICT_VAR __restrict__
    -
    776 #else
    -
    777 # define GLM_DEPRECATED
    -
    778 # define GLM_ALIGN
    -
    779 # define GLM_ALIGNED_STRUCT(x)
    -
    780 # define GLM_RESTRICT
    -
    781 # define GLM_RESTRICT_VAR
    -
    782 #endif//GLM_COMPILER
    -
    783 
    -
    784 #if GLM_HAS_CONSTEXPR
    -
    785 # define GLM_CONSTEXPR constexpr
    -
    786 #else
    -
    787 # define GLM_CONSTEXPR
    -
    788 #endif
    -
    789 
    -
    790 #endif//GLM_SETUP_INCLUDED
    -
    GLM_FUNC_DECL genType pi()
    Return the pi constant.
    +
    551  detail::fvec4SIMD inversesqrt(
    +
    552  detail::fvec4SIMD const & x);
    +
    553 
    +
    558  detail::fvec4SIMD fastInversesqrt(
    +
    559  detail::fvec4SIMD const & x);
    +
    560 
    +
    562 }//namespace glm
    +
    563 
    +
    564 #include "simd_vec4.inl"
    +
    565 
    +
    566 #if (GLM_COMPILER & GLM_COMPILER_VC)
    +
    567 # pragma warning(pop)
    +
    568 #endif
    +
    569 
    +
    570 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    GLM_FUNC_DECL vecType< T, P > normalize(vecType< T, P > const &x)
    Returns a vector in the same direction as x but with length of 1.
    +
    GLM_FUNC_DECL genType mod(genType x, genType y)
    Modulus.
    +
    GLM_FUNC_DECL genType fastNormalize(genType const &x)
    Faster than the common normalize function but less accurate.
    +
    GLM_FUNC_DECL genType step(genType edge, genType x)
    Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.
    +
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    +
    GLM_FUNC_DECL genType max(genType x, genType y)
    Returns y if x < y; otherwise, it returns x.
    +
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    +
    GLM_FUNC_DECL genType::value_type fastLength(genType const &x)
    Faster than the common length function but less accurate.
    +
    GLM_FUNC_DECL genType abs(genType x)
    Returns x if x >= 0; otherwise, it returns -x.
    +
    GLM_FUNC_DECL vecType< T, P > inversesqrt(vecType< T, P > const &v)
    Returns the reciprocal of the positive square root of v.
    +
    GLM_FUNC_DECL vecType< T, P > sqrt(vecType< T, P > const &v)
    Returns the positive square root of v.
    +
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    +
    GLM_FUNC_DECL genType min(genType x, genType y)
    Returns y if y < x; otherwise, it returns x.
    +
    GLM_FUNC_DECL vecType< T, P > refract(vecType< T, P > const &I, vecType< T, P > const &N, T eta)
    For the incident vector I and surface normal N, and the ratio of indices of refraction eta...
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType fma(genType const &a, genType const &b, genType const &c)
    Computes and returns a * b + c.
    +
    GLM_FUNC_DECL vecType< T, P > mix(vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)
    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
    +
    GLM_FUNC_DECL vecType< T, P > trunc(vecType< T, P > const &x)
    Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...
    +
    GLM_FUNC_DECL vecType< T, P > ceil(vecType< T, P > const &x)
    Returns a value equal to the nearest integer that is greater than or equal to x.
    +
    GLM_FUNC_DECL genType fastSqrt(genType x)
    Faster than the common sqrt function but less accurate.
    +
    GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal)
    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...
    +
    GLM_FUNC_DECL vecType< T, P > round(vecType< T, P > const &x)
    Returns a value equal to the nearest integer to x.
    +
    GLM_FUNC_DECL vecType< T, P > sign(vecType< T, P > const &x)
    Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
    +
    GLM_FUNC_DECL genType reflect(genType const &I, genType const &N)
    For the incident vector I and surface orientation N, returns the reflection direction : result = I - ...
    +
    GLM_FUNC_DECL vecType< T, P > floor(vecType< T, P > const &x)
    Returns a value equal to the nearest integer that is less then or equal to x.
    +
    GLM_FUNC_DECL T distance(vecType< T, P > const &p0, vecType< T, P > const &p1)
    Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
    +
    GLM_FUNC_DECL genType fract(genType x)
    Return x - floor(x).
    +
    GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x)
    Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 a...
    +
    GLM_FUNC_DECL tvec3< T, P > cross(tvec3< T, P > const &x, tvec3< T, P > const &y)
    Returns the cross product of x and y.
    diff --git a/doc/api/a00149.html b/doc/api/a00109.html similarity index 58% rename from doc/api/a00149.html rename to doc/api/a00109.html index 0273e741..f40b812f 100644 --- a/doc/api/a00149.html +++ b/doc/api/a00109.html @@ -3,8 +3,8 @@ - -GLM: wrap.hpp File Reference + +0.9.6: spline.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,54 +41,48 @@
    -
    wrap.hpp File Reference
    +
    spline.hpp File Reference
    -

    Go to the source code of this file.

    +

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType clamp (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType mirrorRepeat (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType repeat (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_wrap

    -
    Date
    2009-11-25 / 2011-06-07
    +

    GLM_GTX_spline

    +
    Date
    2007-01-25 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -

    Definition in file wrap.hpp.

    +

    Definition in file spline.hpp.

    diff --git a/doc/api/a00109_source.html b/doc/api/a00109_source.html index a3384a69..015f9cb3 100644 --- a/doc/api/a00109_source.html +++ b/doc/api/a00109_source.html @@ -3,8 +3,8 @@ - -GLM: simd_mat4.hpp Source File + +0.9.6: spline.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,173 +41,65 @@
    -
    simd_mat4.hpp
    +
    spline.hpp
    -
    1 
    -
    38 #ifndef GLM_GTX_simd_mat4
    -
    39 #define GLM_GTX_simd_mat4
    -
    40 
    -
    41 // Dependencies
    -
    42 #include "../detail/setup.hpp"
    +Go to the documentation of this file.
    1 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 #include "../gtx/optimum_pow.hpp"
    43 
    -
    44 #if(GLM_ARCH != GLM_ARCH_PURE)
    -
    45 
    -
    46 #if(GLM_ARCH & GLM_ARCH_SSE2)
    -
    47 # include "../detail/intrinsic_matrix.hpp"
    -
    48 # include "../gtx/simd_vec4.hpp"
    -
    49 #else
    -
    50 # error "GLM: GLM_GTX_simd_mat4 requires compiler support of SSE2 through intrinsics"
    -
    51 #endif
    -
    52 
    -
    53 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    54 # pragma message("GLM: GLM_GTX_simd_mat4 extension included")
    -
    55 #endif
    -
    56 
    -
    57 namespace glm{
    -
    58 namespace detail
    -
    59 {
    -
    62  GLM_ALIGNED_STRUCT(16) fmat4x4SIMD
    -
    63  {
    -
    64  enum ctor{_null};
    -
    65  typedef float value_type;
    -
    66  typedef fvec4SIMD col_type;
    -
    67  typedef fvec4SIMD row_type;
    -
    68  typedef std::size_t size_type;
    -
    69  typedef fmat4x4SIMD type;
    -
    70  typedef fmat4x4SIMD transpose_type;
    -
    71 
    -
    72  GLM_FUNC_DECL length_t length() const;
    -
    73 
    -
    74  fvec4SIMD Data[4];
    -
    75 
    -
    77  // Constructors
    -
    78 
    -
    79  fmat4x4SIMD();
    -
    80  explicit fmat4x4SIMD(float const & s);
    -
    81  explicit fmat4x4SIMD(
    -
    82  float const & x0, float const & y0, float const & z0, float const & w0,
    -
    83  float const & x1, float const & y1, float const & z1, float const & w1,
    -
    84  float const & x2, float const & y2, float const & z2, float const & w2,
    -
    85  float const & x3, float const & y3, float const & z3, float const & w3);
    -
    86  explicit fmat4x4SIMD(
    -
    87  fvec4SIMD const & v0,
    -
    88  fvec4SIMD const & v1,
    -
    89  fvec4SIMD const & v2,
    -
    90  fvec4SIMD const & v3);
    -
    91  explicit fmat4x4SIMD(
    -
    92  mat4x4 const & m);
    -
    93  explicit fmat4x4SIMD(
    -
    94  __m128 const in[4]);
    -
    95 
    -
    96  // Conversions
    -
    97  //template <typename U>
    -
    98  //explicit tmat4x4(tmat4x4<U> const & m);
    -
    99 
    -
    100  //explicit tmat4x4(tmat2x2<T> const & x);
    -
    101  //explicit tmat4x4(tmat3x3<T> const & x);
    -
    102  //explicit tmat4x4(tmat2x3<T> const & x);
    -
    103  //explicit tmat4x4(tmat3x2<T> const & x);
    -
    104  //explicit tmat4x4(tmat2x4<T> const & x);
    -
    105  //explicit tmat4x4(tmat4x2<T> const & x);
    -
    106  //explicit tmat4x4(tmat3x4<T> const & x);
    -
    107  //explicit tmat4x4(tmat4x3<T> const & x);
    -
    108 
    -
    109  // Accesses
    -
    110  fvec4SIMD & operator[](length_t i);
    -
    111  fvec4SIMD const & operator[](length_t i) const;
    -
    112 
    -
    113  // Unary updatable operators
    -
    114  fmat4x4SIMD & operator= (fmat4x4SIMD const & m);
    -
    115  fmat4x4SIMD & operator+= (float const & s);
    -
    116  fmat4x4SIMD & operator+= (fmat4x4SIMD const & m);
    -
    117  fmat4x4SIMD & operator-= (float const & s);
    -
    118  fmat4x4SIMD & operator-= (fmat4x4SIMD const & m);
    -
    119  fmat4x4SIMD & operator*= (float const & s);
    -
    120  fmat4x4SIMD & operator*= (fmat4x4SIMD const & m);
    -
    121  fmat4x4SIMD & operator/= (float const & s);
    -
    122  fmat4x4SIMD & operator/= (fmat4x4SIMD const & m);
    -
    123  fmat4x4SIMD & operator++ ();
    -
    124  fmat4x4SIMD & operator-- ();
    -
    125  };
    -
    126 
    -
    127  // Binary operators
    -
    128  fmat4x4SIMD operator+ (fmat4x4SIMD const & m, float const & s);
    -
    129  fmat4x4SIMD operator+ (float const & s, fmat4x4SIMD const & m);
    -
    130  fmat4x4SIMD operator+ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    -
    131 
    -
    132  fmat4x4SIMD operator- (fmat4x4SIMD const & m, float const & s);
    -
    133  fmat4x4SIMD operator- (float const & s, fmat4x4SIMD const & m);
    -
    134  fmat4x4SIMD operator- (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    -
    135 
    -
    136  fmat4x4SIMD operator* (fmat4x4SIMD const & m, float const & s);
    -
    137  fmat4x4SIMD operator* (float const & s, fmat4x4SIMD const & m);
    -
    138 
    -
    139  fvec4SIMD operator* (fmat4x4SIMD const & m, fvec4SIMD const & v);
    -
    140  fvec4SIMD operator* (fvec4SIMD const & v, fmat4x4SIMD const & m);
    -
    141 
    -
    142  fmat4x4SIMD operator* (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    -
    143 
    -
    144  fmat4x4SIMD operator/ (fmat4x4SIMD const & m, float const & s);
    -
    145  fmat4x4SIMD operator/ (float const & s, fmat4x4SIMD const & m);
    -
    146 
    -
    147  fvec4SIMD operator/ (fmat4x4SIMD const & m, fvec4SIMD const & v);
    -
    148  fvec4SIMD operator/ (fvec4SIMD const & v, fmat4x4SIMD const & m);
    -
    149 
    -
    150  fmat4x4SIMD operator/ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
    -
    151 
    -
    152  // Unary constant operators
    -
    153  fmat4x4SIMD const operator- (fmat4x4SIMD const & m);
    -
    154  fmat4x4SIMD const operator-- (fmat4x4SIMD const & m, int);
    -
    155  fmat4x4SIMD const operator++ (fmat4x4SIMD const & m, int);
    -
    156 }//namespace detail
    -
    157 
    -
    158  typedef detail::fmat4x4SIMD simdMat4;
    -
    159 
    -
    162 
    -
    165  mat4 mat4_cast(
    -
    166  detail::fmat4x4SIMD const & x);
    -
    167 
    -
    171  detail::fmat4x4SIMD matrixCompMult(
    -
    172  detail::fmat4x4SIMD const & x,
    -
    173  detail::fmat4x4SIMD const & y);
    -
    174 
    -
    179  detail::fmat4x4SIMD outerProduct(
    -
    180  detail::fvec4SIMD const & c,
    -
    181  detail::fvec4SIMD const & r);
    -
    182 
    -
    185  detail::fmat4x4SIMD transpose(
    -
    186  detail::fmat4x4SIMD const & x);
    -
    187 
    -
    190  float determinant(
    -
    191  detail::fmat4x4SIMD const & m);
    -
    192 
    -
    195  detail::fmat4x4SIMD inverse(
    -
    196  detail::fmat4x4SIMD const & m);
    -
    197 
    -
    199 }// namespace glm
    -
    200 
    -
    201 #include "simd_mat4.inl"
    -
    202 
    -
    203 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    -
    204 
    -
    205 #endif//GLM_GTX_simd_mat4
    -
    highp_mat4x4 mat4x4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:425
    -
    mat4x4 mat4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:442
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > mat4_cast(detail::tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    -
    GLM_FUNC_DECL detail::tquat< T, P > inverse(detail::tquat< T, P > const &q)
    Returns the q inverse.
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_spline extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  template <typename genType>
    +
    56  GLM_FUNC_DECL genType catmullRom(
    +
    57  genType const & v1,
    +
    58  genType const & v2,
    +
    59  genType const & v3,
    +
    60  genType const & v4,
    +
    61  typename genType::value_type const & s);
    +
    62 
    +
    65  template <typename genType>
    +
    66  GLM_FUNC_DECL genType hermite(
    +
    67  genType const & v1,
    +
    68  genType const & t1,
    +
    69  genType const & v2,
    +
    70  genType const & t2,
    +
    71  typename genType::value_type const & s);
    +
    72 
    +
    75  template <typename genType>
    +
    76  GLM_FUNC_DECL genType cubic(
    +
    77  genType const & v1,
    +
    78  genType const & v2,
    +
    79  genType const & v3,
    +
    80  genType const & v4,
    +
    81  typename genType::value_type const & s);
    +
    82 
    +
    84 }//namespace glm
    +
    85 
    +
    86 #include "spline.inl"
    +
    GLM_FUNC_DECL genType catmullRom(genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
    Return a point from a catmull rom curve.
    +
    GLM_FUNC_DECL genType cubic(genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
    Return a point from a cubic curve.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType hermite(genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
    Return a point from a hermite curve.
    diff --git a/doc/api/a00110.html b/doc/api/a00110.html index d7858be6..85a31363 100644 --- a/doc/api/a00110.html +++ b/doc/api/a00110.html @@ -3,8 +3,8 @@ - -GLM: simd_quat.hpp File Reference + +0.9.6: std_based_type.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,33 +41,65 @@
    +
    -
    simd_quat.hpp File Reference
    +
    std_based_type.hpp File Reference

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef tvec1< std::size_t,
    +defaultp > 
    size1
     
    typedef tvec1< std::size_t,
    +defaultp > 
    size1_t
     
    typedef tvec2< std::size_t,
    +defaultp > 
    size2
     
    typedef tvec2< std::size_t,
    +defaultp > 
    size2_t
     
    typedef tvec3< std::size_t,
    +defaultp > 
    size3
     
    typedef tvec3< std::size_t,
    +defaultp > 
    size3_t
     
    typedef tvec4< std::size_t,
    +defaultp > 
    size4
     
    typedef tvec4< std::size_t,
    +defaultp > 
    size4_t
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    gtx_simd_quat

    -
    Date
    2009-05-07 / 2011-06-07
    +

    GLM_GTX_std_based_type

    +
    Date
    2008-06-08 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_extented_min_max (dependence)
    -

    Definition in file simd_quat.hpp.

    +

    Definition in file std_based_type.hpp.

    diff --git a/doc/api/a00110_source.html b/doc/api/a00110_source.html index e30c8532..08521d76 100644 --- a/doc/api/a00110_source.html +++ b/doc/api/a00110_source.html @@ -3,8 +3,8 @@ - -GLM: simd_quat.hpp Source File + +0.9.6: std_based_type.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,251 +41,62 @@
    -
    simd_quat.hpp
    +
    std_based_type.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_simd_quat
    -
    39 #define GLM_GTX_simd_quat
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 #include "../gtc/quaternion.hpp"
    -
    44 #include "../gtx/fast_trigonometry.hpp"
    -
    45 
    -
    46 #if(GLM_ARCH != GLM_ARCH_PURE)
    -
    47 
    -
    48 #if(GLM_ARCH & GLM_ARCH_SSE2)
    -
    49 # include "../core/intrinsic_common.hpp"
    -
    50 # include "../core/intrinsic_geometric.hpp"
    -
    51 # include "../gtx/simd_mat4.hpp"
    -
    52 #else
    -
    53 # error "GLM: GLM_GTX_simd_quat requires compiler support of SSE2 through intrinsics"
    -
    54 #endif
    -
    55 
    -
    56 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    57 # pragma message("GLM: GLM_GTX_simd_quat extension included")
    -
    58 #endif
    -
    59 
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 #include <cstdlib>
    +
    43 
    +
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    45 # pragma message("GLM: GLM_GTX_std_based_type extension included")
    +
    46 #endif
    +
    47 
    +
    48 namespace glm
    +
    49 {
    +
    52 
    +
    55  typedef tvec1<std::size_t, defaultp> size1;
    +
    56 
    +
    59  typedef tvec2<std::size_t, defaultp> size2;
    60 
    -
    61 // Warning silencer for nameless struct/union.
    -
    62 #if (GLM_COMPILER & GLM_COMPILER_VC)
    -
    63 # pragma warning(push)
    -
    64 # pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
    -
    65 #endif
    -
    66 
    -
    67 
    -
    68 namespace glm{
    -
    69 namespace detail
    -
    70 {
    -
    73  GLM_ALIGNED_STRUCT(16) fquatSIMD
    -
    74  {
    -
    75  enum ctor{null};
    -
    76  typedef __m128 value_type;
    -
    77  typedef std::size_t size_type;
    -
    78  static size_type value_size();
    -
    79 
    -
    80  typedef fquatSIMD type;
    -
    81  typedef tquat<bool, defaultp> bool_type;
    -
    82 
    -
    83 #ifdef GLM_SIMD_ENABLE_XYZW_UNION
    -
    84  union
    -
    85  {
    -
    86  __m128 Data;
    -
    87  struct {float x, y, z, w;};
    -
    88  };
    -
    89 #else
    -
    90  __m128 Data;
    -
    91 #endif
    -
    92 
    -
    94  // Implicit basic constructors
    -
    95 
    -
    96  fquatSIMD();
    -
    97  fquatSIMD(__m128 const & Data);
    -
    98  fquatSIMD(fquatSIMD const & q);
    -
    99 
    -
    101  // Explicit basic constructors
    -
    102 
    -
    103  explicit fquatSIMD(
    -
    104  ctor);
    -
    105  explicit fquatSIMD(
    -
    106  float const & w,
    -
    107  float const & x,
    -
    108  float const & y,
    -
    109  float const & z);
    -
    110  explicit fquatSIMD(
    -
    111  quat const & v);
    -
    112  explicit fquatSIMD(
    -
    113  vec3 const & eulerAngles);
    -
    114 
    -
    115 
    -
    117  // Unary arithmetic operators
    -
    118 
    -
    119  fquatSIMD& operator =(fquatSIMD const & q);
    -
    120  fquatSIMD& operator*=(float const & s);
    -
    121  fquatSIMD& operator/=(float const & s);
    -
    122  };
    -
    123 
    -
    124 
    -
    126  // Arithmetic operators
    -
    127 
    -
    128  detail::fquatSIMD operator- (
    -
    129  detail::fquatSIMD const & q);
    -
    130 
    -
    131  detail::fquatSIMD operator+ (
    -
    132  detail::fquatSIMD const & q,
    -
    133  detail::fquatSIMD const & p);
    -
    134 
    -
    135  detail::fquatSIMD operator* (
    -
    136  detail::fquatSIMD const & q,
    -
    137  detail::fquatSIMD const & p);
    -
    138 
    -
    139  detail::fvec4SIMD operator* (
    -
    140  detail::fquatSIMD const & q,
    -
    141  detail::fvec4SIMD const & v);
    -
    142 
    -
    143  detail::fvec4SIMD operator* (
    -
    144  detail::fvec4SIMD const & v,
    -
    145  detail::fquatSIMD const & q);
    -
    146 
    -
    147  detail::fquatSIMD operator* (
    -
    148  detail::fquatSIMD const & q,
    -
    149  float s);
    -
    150 
    -
    151  detail::fquatSIMD operator* (
    -
    152  float s,
    -
    153  detail::fquatSIMD const & q);
    -
    154 
    -
    155  detail::fquatSIMD operator/ (
    -
    156  detail::fquatSIMD const & q,
    -
    157  float s);
    -
    158 
    -
    159 }//namespace detail
    -
    160 
    -
    161  typedef glm::detail::fquatSIMD simdQuat;
    -
    162 
    -
    165 
    -
    168  quat quat_cast(
    -
    169  detail::fquatSIMD const & x);
    -
    170 
    -
    173  detail::fquatSIMD quatSIMD_cast(
    -
    174  detail::fmat4x4SIMD const & m);
    -
    175 
    -
    178  template <typename T, precision P>
    -
    179  detail::fquatSIMD quatSIMD_cast(
    -
    180  detail::tmat4x4<T, P> const & m);
    -
    181 
    -
    184  template <typename T, precision P>
    -
    185  detail::fquatSIMD quatSIMD_cast(
    -
    186  detail::tmat3x3<T, P> const & m);
    -
    187 
    -
    190  detail::fmat4x4SIMD mat4SIMD_cast(
    -
    191  detail::fquatSIMD const & q);
    -
    192 
    -
    195  mat4 mat4_cast(
    -
    196  detail::fquatSIMD const & q);
    -
    197 
    -
    198 
    -
    202  float length(
    -
    203  detail::fquatSIMD const & x);
    -
    204 
    -
    208  detail::fquatSIMD normalize(
    -
    209  detail::fquatSIMD const & x);
    -
    210 
    -
    214  float dot(
    -
    215  detail::fquatSIMD const & q1,
    -
    216  detail::fquatSIMD const & q2);
    -
    217 
    -
    228  detail::fquatSIMD mix(
    -
    229  detail::fquatSIMD const & x,
    -
    230  detail::fquatSIMD const & y,
    -
    231  float const & a);
    -
    232 
    -
    241  detail::fquatSIMD lerp(
    -
    242  detail::fquatSIMD const & x,
    -
    243  detail::fquatSIMD const & y,
    -
    244  float const & a);
    -
    245 
    -
    254  detail::fquatSIMD slerp(
    -
    255  detail::fquatSIMD const & x,
    -
    256  detail::fquatSIMD const & y,
    -
    257  float const & a);
    -
    258 
    -
    259 
    -
    270  detail::fquatSIMD fastMix(
    -
    271  detail::fquatSIMD const & x,
    -
    272  detail::fquatSIMD const & y,
    -
    273  float const & a);
    -
    274 
    -
    282  detail::fquatSIMD fastSlerp(
    -
    283  detail::fquatSIMD const & x,
    -
    284  detail::fquatSIMD const & y,
    -
    285  float const & a);
    -
    286 
    -
    287 
    -
    291  detail::fquatSIMD conjugate(
    -
    292  detail::fquatSIMD const & q);
    -
    293 
    -
    297  detail::fquatSIMD inverse(
    -
    298  detail::fquatSIMD const & q);
    -
    299 
    -
    306  detail::fquatSIMD angleAxisSIMD(
    -
    307  float const & angle,
    -
    308  vec3 const & axis);
    -
    309 
    -
    318  detail::fquatSIMD angleAxisSIMD(
    -
    319  float const & angle,
    -
    320  float const & x,
    -
    321  float const & y,
    -
    322  float const & z);
    -
    323 
    -
    324 
    -
    325  // TODO: Move this to somewhere more appropriate. Used with fastMix() and fastSlerp().
    -
    327  __m128 fastSin(__m128 x);
    -
    328 
    -
    329 
    -
    331 }//namespace glm
    -
    332 
    -
    333 #include "simd_quat.inl"
    -
    334 
    -
    335 
    -
    336 #if (GLM_COMPILER & GLM_COMPILER_VC)
    -
    337 # pragma warning(pop)
    -
    338 #endif
    -
    339 
    -
    340 
    -
    341 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    -
    342 
    -
    343 #endif//GLM_GTX_simd_quat
    -
    GLM_FUNC_DECL T dot(vecType< T, P > const &x, vecType< T, P > const &y)
    Returns the dot product of x and y, i.e., result = x * y.
    -
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    -
    GLM_FUNC_DECL detail::tquat< T, P > lerp(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Linear interpolation of two quaternions.
    -
    GLM_FUNC_DECL detail::tquat< T, P > quat_cast(detail::tmat3x3< T, P > const &x)
    Converts a 3 * 3 matrix to a quaternion.
    -
    GLM_FUNC_DECL genTypeT mix(genTypeT const &x, genTypeT const &y, genTypeU const &a)
    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > eulerAngles(detail::tquat< T, P > const &x)
    Returns euler angles, yitch as x, yaw as y, roll as z.
    -
    mat4x4 mat4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:442
    -
    T fastSin(const T &angle)
    Faster than the common sin function but less accurate.
    -
    GLM_FUNC_DECL genType normalize(genType const &x)
    Returns a vector in the same direction as x but with length of 1.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > mat4_cast(detail::tquat< T, P > const &x)
    Converts a quaternion to a 4 * 4 matrix.
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    -
    highp_quat quat
    Quaternion of default single-precision floating-point numbers.
    Definition: fwd.hpp:69
    -
    detail::tquat< T, P > fastMix(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Quaternion normalized linear interpolation.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > axis(detail::tquat< T, P > const &x)
    Returns the q rotation axis.
    -
    GLM_FUNC_DECL detail::tquat< T, P > slerp(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
    Spherical linear interpolation of two quaternions.
    -
    GLM_FUNC_DECL detail::tquat< T, P > conjugate(detail::tquat< T, P > const &q)
    Returns the q conjugate.
    -
    GLM_FUNC_DECL detail::tquat< T, P > inverse(detail::tquat< T, P > const &q)
    Returns the q inverse.
    +
    63  typedef tvec3<std::size_t, defaultp> size3;
    +
    64 
    +
    67  typedef tvec4<std::size_t, defaultp> size4;
    +
    68 
    +
    71  typedef tvec1<std::size_t, defaultp> size1_t;
    +
    72 
    +
    75  typedef tvec2<std::size_t, defaultp> size2_t;
    +
    76 
    +
    79  typedef tvec3<std::size_t, defaultp> size3_t;
    +
    80 
    +
    83  typedef tvec4<std::size_t, defaultp> size4_t;
    +
    84 
    +
    86 }//namespace glm
    +
    87 
    +
    88 #include "std_based_type.inl"
    +
    tvec4< std::size_t, defaultp > size4
    Vector type based of four std::size_t components.
    +
    tvec3< std::size_t, defaultp > size3
    Vector type based of three std::size_t components.
    +
    tvec3< std::size_t, defaultp > size3_t
    Vector type based of three std::size_t components.
    +
    tvec1< std::size_t, defaultp > size1_t
    Vector type based of one std::size_t component.
    +
    tvec1< std::size_t, defaultp > size1
    Vector type based of one std::size_t component.
    +
    tvec4< std::size_t, defaultp > size4_t
    Vector type based of four std::size_t components.
    +
    tvec2< std::size_t, defaultp > size2
    Vector type based of two std::size_t components.
    +
    Definition: _noise.hpp:31
    +
    tvec2< std::size_t, defaultp > size2_t
    Vector type based of two std::size_t components.
    diff --git a/doc/api/a00111.html b/doc/api/a00111.html index 850209c5..a647e237 100644 --- a/doc/api/a00111.html +++ b/doc/api/a00111.html @@ -3,8 +3,8 @@ - -GLM: simd_vec4.hpp File Reference + +0.9.6: string_cast.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,33 +41,48 @@
    +
    -
    simd_vec4.hpp File Reference
    +
    string_cast.hpp File Reference

    Go to the source code of this file.

    + + + + + +

    +Functions

    template<template< typename, precision > class matType, typename T , precision P>
    GLM_FUNC_DECL std::string to_string (matType< T, P > const &x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_simd_quat

    -
    Date
    2009-05-07 / 2011-06-07
    +

    GLM_GTX_string_cast

    +
    Date
    2008-04-26 / 2014-05-10
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +gtc_half_float (dependence)
    +
    +GLM_GTX_integer (dependence)
    +
    +GLM_GTX_quaternion (dependence)
    -

    Definition in file simd_vec4.hpp.

    +

    Definition in file string_cast.hpp.

    diff --git a/doc/api/a00111_source.html b/doc/api/a00111_source.html index d35b87b9..a23c2f2d 100644 --- a/doc/api/a00111_source.html +++ b/doc/api/a00111_source.html @@ -3,8 +3,8 @@ - -GLM: simd_vec4.hpp Source File + +0.9.6: string_cast.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,364 +41,47 @@
    -
    simd_vec4.hpp
    +
    string_cast.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_simd_vec4
    -
    39 #define GLM_GTX_simd_vec4
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    +
    42 #pragma once
    43 
    -
    44 #if(GLM_ARCH != GLM_ARCH_PURE)
    -
    45 
    -
    46 #if(GLM_ARCH & GLM_ARCH_SSE2)
    -
    47 # include "../detail/intrinsic_common.hpp"
    -
    48 # include "../detail/intrinsic_geometric.hpp"
    -
    49 # include "../detail/intrinsic_integer.hpp"
    -
    50 #else
    -
    51 # error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
    -
    52 #endif
    -
    53 
    -
    54 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    55 # pragma message("GLM: GLM_GTX_simd_vec4 extension included")
    -
    56 #endif
    -
    57 
    -
    58 
    -
    59 // Warning silencer for nameless struct/union.
    -
    60 #if (GLM_COMPILER & GLM_COMPILER_VC)
    -
    61 # pragma warning(push)
    -
    62 # pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
    -
    63 #endif
    -
    64 
    -
    65 namespace glm
    -
    66 {
    -
    67  enum comp
    -
    68  {
    -
    69  X = 0,
    -
    70  R = 0,
    -
    71  S = 0,
    -
    72  Y = 1,
    -
    73  G = 1,
    -
    74  T = 1,
    -
    75  Z = 2,
    -
    76  B = 2,
    -
    77  P = 2,
    -
    78  W = 3,
    -
    79  A = 3,
    -
    80  Q = 3
    -
    81  };
    -
    82 
    -
    83 }//namespace glm
    -
    84 
    -
    85 namespace glm{
    -
    86 namespace detail
    -
    87 {
    -
    90  GLM_ALIGNED_STRUCT(16) fvec4SIMD
    -
    91  {
    -
    92  enum ctor{null};
    -
    93  typedef __m128 value_type;
    -
    94  typedef std::size_t size_type;
    -
    95  static size_type value_size();
    -
    96 
    -
    97  typedef fvec4SIMD type;
    -
    98  typedef tvec4<bool, highp> bool_type;
    -
    99 
    -
    100 #ifdef GLM_SIMD_ENABLE_XYZW_UNION
    -
    101  union
    -
    102  {
    -
    103  __m128 Data;
    -
    104  struct {float x, y, z, w;};
    -
    105  };
    -
    106 #else
    -
    107  __m128 Data;
    -
    108 #endif
    -
    109 
    -
    111  // Implicit basic constructors
    -
    112 
    -
    113  fvec4SIMD();
    -
    114  fvec4SIMD(__m128 const & Data);
    -
    115  fvec4SIMD(fvec4SIMD const & v);
    -
    116 
    -
    118  // Explicit basic constructors
    -
    119 
    -
    120  explicit fvec4SIMD(
    -
    121  ctor);
    -
    122  explicit fvec4SIMD(
    -
    123  float const & s);
    -
    124  explicit fvec4SIMD(
    -
    125  float const & x,
    -
    126  float const & y,
    -
    127  float const & z,
    -
    128  float const & w);
    -
    129  explicit fvec4SIMD(
    -
    130  vec4 const & v);
    -
    131 
    -
    134 
    -
    135  fvec4SIMD(vec2 const & v, float const & s1, float const & s2);
    -
    136  fvec4SIMD(float const & s1, vec2 const & v, float const & s2);
    -
    137  fvec4SIMD(float const & s1, float const & s2, vec2 const & v);
    -
    138  fvec4SIMD(vec3 const & v, float const & s);
    -
    139  fvec4SIMD(float const & s, vec3 const & v);
    -
    140  fvec4SIMD(vec2 const & v1, vec2 const & v2);
    -
    141  //fvec4SIMD(ivec4SIMD const & v);
    -
    142 
    -
    144  // Unary arithmetic operators
    -
    145 
    -
    146  fvec4SIMD& operator= (fvec4SIMD const & v);
    -
    147  fvec4SIMD& operator+=(fvec4SIMD const & v);
    -
    148  fvec4SIMD& operator-=(fvec4SIMD const & v);
    -
    149  fvec4SIMD& operator*=(fvec4SIMD const & v);
    -
    150  fvec4SIMD& operator/=(fvec4SIMD const & v);
    -
    151 
    -
    152  fvec4SIMD& operator+=(float const & s);
    -
    153  fvec4SIMD& operator-=(float const & s);
    -
    154  fvec4SIMD& operator*=(float const & s);
    -
    155  fvec4SIMD& operator/=(float const & s);
    -
    156 
    -
    157  fvec4SIMD& operator++();
    -
    158  fvec4SIMD& operator--();
    -
    159 
    -
    161  // Swizzle operators
    -
    162 
    -
    163  template <comp X, comp Y, comp Z, comp W>
    -
    164  fvec4SIMD& swizzle();
    -
    165  template <comp X, comp Y, comp Z, comp W>
    -
    166  fvec4SIMD swizzle() const;
    -
    167  template <comp X, comp Y, comp Z>
    -
    168  fvec4SIMD swizzle() const;
    -
    169  template <comp X, comp Y>
    -
    170  fvec4SIMD swizzle() const;
    -
    171  template <comp X>
    -
    172  fvec4SIMD swizzle() const;
    -
    173  };
    -
    174 }//namespace detail
    -
    175 
    -
    176  typedef glm::detail::fvec4SIMD simdVec4;
    -
    177 
    -
    180 
    -
    183  vec4 vec4_cast(
    -
    184  detail::fvec4SIMD const & x);
    -
    185 
    -
    188  detail::fvec4SIMD abs(detail::fvec4SIMD const & x);
    -
    189 
    -
    192  detail::fvec4SIMD sign(detail::fvec4SIMD const & x);
    -
    193 
    -
    196  detail::fvec4SIMD floor(detail::fvec4SIMD const & x);
    -
    197 
    -
    201  detail::fvec4SIMD trunc(detail::fvec4SIMD const & x);
    -
    202 
    -
    210  detail::fvec4SIMD round(detail::fvec4SIMD const & x);
    -
    211 
    -
    217  //detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);
    -
    218 
    -
    222  detail::fvec4SIMD ceil(detail::fvec4SIMD const & x);
    -
    223 
    -
    227  detail::fvec4SIMD fract(detail::fvec4SIMD const & x);
    -
    228 
    -
    233  detail::fvec4SIMD mod(
    -
    234  detail::fvec4SIMD const & x,
    -
    235  detail::fvec4SIMD const & y);
    -
    236 
    -
    241  detail::fvec4SIMD mod(
    -
    242  detail::fvec4SIMD const & x,
    -
    243  float const & y);
    -
    244 
    -
    250  //detail::fvec4SIMD modf(
    -
    251  // detail::fvec4SIMD const & x,
    -
    252  // detail::fvec4SIMD & i);
    -
    253 
    -
    257  detail::fvec4SIMD min(
    -
    258  detail::fvec4SIMD const & x,
    -
    259  detail::fvec4SIMD const & y);
    -
    260 
    -
    261  detail::fvec4SIMD min(
    -
    262  detail::fvec4SIMD const & x,
    -
    263  float const & y);
    -
    264 
    -
    268  detail::fvec4SIMD max(
    -
    269  detail::fvec4SIMD const & x,
    -
    270  detail::fvec4SIMD const & y);
    -
    271 
    -
    272  detail::fvec4SIMD max(
    -
    273  detail::fvec4SIMD const & x,
    -
    274  float const & y);
    -
    275 
    -
    280  detail::fvec4SIMD clamp(
    -
    281  detail::fvec4SIMD const & x,
    -
    282  detail::fvec4SIMD const & minVal,
    -
    283  detail::fvec4SIMD const & maxVal);
    -
    284 
    -
    285  detail::fvec4SIMD clamp(
    -
    286  detail::fvec4SIMD const & x,
    -
    287  float const & minVal,
    -
    288  float const & maxVal);
    -
    289 
    -
    316  detail::fvec4SIMD mix(
    -
    317  detail::fvec4SIMD const & x,
    -
    318  detail::fvec4SIMD const & y,
    -
    319  detail::fvec4SIMD const & a);
    -
    320 
    -
    324  detail::fvec4SIMD step(
    -
    325  detail::fvec4SIMD const & edge,
    -
    326  detail::fvec4SIMD const & x);
    -
    327 
    -
    328  detail::fvec4SIMD step(
    -
    329  float const & edge,
    -
    330  detail::fvec4SIMD const & x);
    -
    331 
    -
    343  detail::fvec4SIMD smoothstep(
    -
    344  detail::fvec4SIMD const & edge0,
    -
    345  detail::fvec4SIMD const & edge1,
    -
    346  detail::fvec4SIMD const & x);
    -
    347 
    -
    348  detail::fvec4SIMD smoothstep(
    -
    349  float const & edge0,
    -
    350  float const & edge1,
    -
    351  detail::fvec4SIMD const & x);
    -
    352 
    -
    360  //bvec4 isnan(detail::fvec4SIMD const & x);
    -
    361 
    -
    369  //bvec4 isinf(detail::fvec4SIMD const & x);
    -
    370 
    -
    376  //detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);
    -
    377 
    -
    385  //detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);
    -
    386 
    -
    390  detail::fvec4SIMD fma(
    -
    391  detail::fvec4SIMD const & a,
    -
    392  detail::fvec4SIMD const & b,
    -
    393  detail::fvec4SIMD const & c);
    -
    394 
    -
    405  //detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);
    -
    406 
    -
    414  //detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);
    -
    415 
    -
    419  float length(
    -
    420  detail::fvec4SIMD const & x);
    -
    421 
    -
    426  float fastLength(
    -
    427  detail::fvec4SIMD const & x);
    -
    428 
    -
    433  float niceLength(
    -
    434  detail::fvec4SIMD const & x);
    -
    435 
    -
    439  detail::fvec4SIMD length4(
    -
    440  detail::fvec4SIMD const & x);
    -
    441 
    -
    446  detail::fvec4SIMD fastLength4(
    -
    447  detail::fvec4SIMD const & x);
    -
    448 
    -
    453  detail::fvec4SIMD niceLength4(
    -
    454  detail::fvec4SIMD const & x);
    -
    455 
    -
    459  float distance(
    -
    460  detail::fvec4SIMD const & p0,
    -
    461  detail::fvec4SIMD const & p1);
    -
    462 
    -
    466  detail::fvec4SIMD distance4(
    -
    467  detail::fvec4SIMD const & p0,
    -
    468  detail::fvec4SIMD const & p1);
    -
    469 
    -
    473  float simdDot(
    -
    474  detail::fvec4SIMD const & x,
    -
    475  detail::fvec4SIMD const & y);
    -
    476 
    -
    480  detail::fvec4SIMD dot4(
    -
    481  detail::fvec4SIMD const & x,
    -
    482  detail::fvec4SIMD const & y);
    -
    483 
    -
    487  detail::fvec4SIMD cross(
    -
    488  detail::fvec4SIMD const & x,
    -
    489  detail::fvec4SIMD const & y);
    -
    490 
    -
    494  detail::fvec4SIMD normalize(
    -
    495  detail::fvec4SIMD const & x);
    -
    496 
    -
    501  detail::fvec4SIMD fastNormalize(
    -
    502  detail::fvec4SIMD const & x);
    -
    503 
    -
    507  detail::fvec4SIMD simdFaceforward(
    -
    508  detail::fvec4SIMD const & N,
    -
    509  detail::fvec4SIMD const & I,
    -
    510  detail::fvec4SIMD const & Nref);
    -
    511 
    -
    516  detail::fvec4SIMD reflect(
    -
    517  detail::fvec4SIMD const & I,
    -
    518  detail::fvec4SIMD const & N);
    -
    519 
    -
    525  detail::fvec4SIMD refract(
    -
    526  detail::fvec4SIMD const & I,
    -
    527  detail::fvec4SIMD const & N,
    -
    528  float const & eta);
    -
    529 
    -
    533  detail::fvec4SIMD sqrt(
    -
    534  detail::fvec4SIMD const & x);
    -
    535 
    -
    540  detail::fvec4SIMD niceSqrt(
    -
    541  detail::fvec4SIMD const & x);
    -
    542 
    -
    547  detail::fvec4SIMD fastSqrt(
    -
    548  detail::fvec4SIMD const & x);
    -
    549 
    -
    553  detail::fvec4SIMD inversesqrt(
    -
    554  detail::fvec4SIMD const & x);
    -
    555 
    -
    560  detail::fvec4SIMD fastInversesqrt(
    -
    561  detail::fvec4SIMD const & x);
    -
    562 
    -
    564 }//namespace glm
    -
    565 
    -
    566 #include "simd_vec4.inl"
    -
    567 
    -
    568 #if (GLM_COMPILER & GLM_COMPILER_VC)
    -
    569 # pragma warning(pop)
    -
    570 #endif
    -
    571 
    -
    572 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    -
    573 
    -
    574 #endif//GLM_GTX_simd_vec4
    -
    GLM_FUNC_DECL genType sqrt(genType const &x)
    Returns the positive square root of x.
    -
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    -
    GLM_FUNC_DECL genType floor(genType const &x)
    Returns a value equal to the nearest integer that is less then or equal to x.
    -
    GLM_FUNC_DECL detail::tvec3< T, P > cross(detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
    Returns the cross product of x and y.
    -
    GLM_FUNC_DECL genTypeT mix(genTypeT const &x, genTypeT const &y, genTypeU const &a)
    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
    -
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    -
    genType fastSqrt(genType const &x)
    Faster than the common sqrt function but less accurate.
    -
    GLM_FUNC_DECL genType mod(genType const &x, genType const &y)
    Modulus.
    -
    GLM_FUNC_DECL genType inversesqrt(genType const &x)
    Returns the reciprocal of the positive square root of x.
    -
    GLM_FUNC_DECL genType normalize(genType const &x)
    Returns a vector in the same direction as x but with length of 1.
    -
    GLM_FUNC_DECL genType fract(genType const &x)
    Return x - floor(x).
    -
    GLM_FUNC_DECL genType ceil(genType const &x)
    Returns a value equal to the nearest integer that is greater than or equal to x.
    -
    GLM_FUNC_DECL genType fma(genType const &a, genType const &b, genType const &c)
    Computes and returns a * b + c.
    -
    genType fastNormalize(genType const &x)
    Faster than the common normalize function but less accurate.
    -
    GLM_FUNC_DECL genType step(genType const &edge, genType const &x)
    Returns 0.0 if x &lt; edge, otherwise it returns 1.0 for each component of a genType.
    -
    GLM_FUNC_DECL genType trunc(genType const &x)
    Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    -
    GLM_FUNC_DECL genType round(genType const &x)
    Returns a value equal to the nearest integer to x.
    -
    GLM_FUNC_DECL vecType< T, P > refract(vecType< T, P > const &I, vecType< T, P > const &N, T const &eta)
    For the incident vector I and surface normal N, and the ratio of indices of refraction eta...
    -
    GLM_FUNC_DECL genType abs(genType const &x)
    Returns x if x &gt;= 0; otherwise, it returns -x.
    -
    GLM_FUNC_DECL genType smoothstep(genType const &edge0, genType const &edge1, genType const &x)
    Returns 0.0 if x &lt;= edge0 and 1.0 if x &gt;= edge1 and performs smooth Hermite interpolation between 0 a...
    -
    GLM_FUNC_DECL genType clamp(genType const &x, genType const &minVal, genType const &maxVal)
    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...
    -
    GLM_FUNC_DECL genType reflect(genType const &I, genType const &N)
    For the incident vector I and surface orientation N, returns the reflection direction : result = I - ...
    -
    GLM_FUNC_DECL genType max(genType const &x, genType const &y)
    Returns y if x &lt; y; otherwise, it returns x.
    -
    GLM_FUNC_DECL genType::value_type distance(genType const &p0, genType const &p1)
    Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
    -
    GLM_FUNC_DECL genType sign(genType const &x)
    Returns 1.0 if x &gt; 0, 0.0 if x == 0, or -1.0 if x &lt; 0.
    -
    genType::value_type fastLength(genType const &x)
    Faster than the common length function but less accurate.
    -
    GLM_FUNC_DECL genType min(genType const &x, genType const &y)
    Returns y if y &lt; x; otherwise, it returns x.
    -
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    +
    44 // Dependency:
    +
    45 #include "../glm.hpp"
    +
    46 #include "../gtc/type_precision.hpp"
    +
    47 #include <string>
    +
    48 
    +
    49 #if(GLM_COMPILER & GLM_COMPILER_CUDA)
    +
    50 # error "GLM_GTX_string_cast is not supported on CUDA compiler"
    +
    51 #endif
    +
    52 
    +
    53 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    54 # pragma message("GLM: GLM_GTX_string_cast extension included")
    +
    55 #endif
    +
    56 
    +
    57 namespace glm
    +
    58 {
    +
    61 
    +
    64  template <template <typename, precision> class matType, typename T, precision P>
    +
    65  GLM_FUNC_DECL std::string to_string(matType<T, P> const & x);
    +
    66 
    +
    68 }//namespace glm
    +
    69 
    +
    70 #include "string_cast.inl"
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL std::string to_string(matType< T, P > const &x)
    Create a string from a GLM vector or matrix typed variable.
    diff --git a/doc/api/a00112.html b/doc/api/a00112.html index 83bd954e..c0406711 100644 --- a/doc/api/a00112.html +++ b/doc/api/a00112.html @@ -3,8 +3,8 @@ - -GLM: spline.hpp File Reference + +0.9.6: transform.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,54 +41,54 @@
    -
    spline.hpp File Reference
    +
    transform.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rotate (T angle, tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > scale (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > translate (tvec3< T, P > const &v)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_spline

    -
    Date
    2007-01-25 / 2011-06-07
    +

    GLM_GTX_transform

    +
    Date
    2005-12-21 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTC_matrix_transform (dependence)
    +
    +GLM_GTX_transform
    +
    +GLM_GTX_transform2
    -

    Definition in file spline.hpp.

    +

    Definition in file transform.hpp.

    diff --git a/doc/api/a00112_source.html b/doc/api/a00112_source.html index 2d7f5f86..75c5ad58 100644 --- a/doc/api/a00112_source.html +++ b/doc/api/a00112_source.html @@ -3,8 +3,8 @@ - -GLM: spline.hpp Source File + +0.9.6: transform.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,68 +41,55 @@
    -
    spline.hpp
    +
    transform.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_spline
    -
    39 #define GLM_GTX_spline
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 #include "../gtx/optimum_pow.hpp"
    -
    44 
    -
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_spline extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    -
    50 {
    -
    53 
    -
    56  template <typename genType>
    -
    57  GLM_FUNC_DECL genType catmullRom(
    -
    58  genType const & v1,
    -
    59  genType const & v2,
    -
    60  genType const & v3,
    -
    61  genType const & v4,
    -
    62  typename genType::value_type const & s);
    -
    63 
    -
    66  template <typename genType>
    -
    67  GLM_FUNC_DECL genType hermite(
    -
    68  genType const & v1,
    -
    69  genType const & t1,
    -
    70  genType const & v2,
    -
    71  genType const & t2,
    -
    72  typename genType::value_type const & s);
    -
    73 
    -
    76  template <typename genType>
    -
    77  GLM_FUNC_DECL genType cubic(
    -
    78  genType const & v1,
    -
    79  genType const & v2,
    -
    80  genType const & v3,
    -
    81  genType const & v4,
    -
    82  typename genType::value_type const & s);
    -
    83 
    -
    85 }//namespace glm
    -
    86 
    -
    87 #include "spline.inl"
    -
    88 
    -
    89 #endif//GLM_GTX_spline
    -
    90 
    -
    GLM_FUNC_DECL genType catmullRom(genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
    Return a point from a catmull rom curve.
    -
    GLM_FUNC_DECL genType cubic(genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
    Return a point from a cubic curve.
    -
    GLM_FUNC_DECL genType hermite(genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
    Return a point from a hermite curve.
    +
    41 #pragma once
    +
    42 
    +
    43 // Dependency:
    +
    44 #include "../glm.hpp"
    +
    45 #include "../gtc/matrix_transform.hpp"
    +
    46 
    +
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    48 # pragma message("GLM: GLM_GTX_transform extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    +
    52 {
    +
    55 
    +
    59  template <typename T, precision P>
    +
    60  GLM_FUNC_DECL tmat4x4<T, P> translate(
    +
    61  tvec3<T, P> const & v);
    +
    62 
    +
    66  template <typename T, precision P>
    +
    67  GLM_FUNC_DECL tmat4x4<T, P> rotate(
    +
    68  T angle,
    +
    69  tvec3<T, P> const & v);
    +
    70 
    +
    74  template <typename T, precision P>
    +
    75  GLM_FUNC_DECL tmat4x4<T, P> scale(
    +
    76  tvec3<T, P> const & v);
    +
    77 
    +
    79 }// namespace glm
    +
    80 
    +
    81 #include "transform.inl"
    +
    GLM_FUNC_DECL tmat4x4< T, P > scale(tvec3< T, P > const &v)
    Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.
    +
    GLM_FUNC_DECL tmat4x4< T, P > rotate(T angle, tvec3< T, P > const &v)
    Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees...
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tmat4x4< T, P > translate(tvec3< T, P > const &v)
    Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.
    +
    GLM_FUNC_DECL T angle(tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    diff --git a/doc/api/a00113.html b/doc/api/a00113.html index 5680b5c8..873e5fdd 100644 --- a/doc/api/a00113.html +++ b/doc/api/a00113.html @@ -3,8 +3,8 @@ - -GLM: std_based_type.hpp File Reference + +0.9.6: transform2.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,65 +41,68 @@
    -
    std_based_type.hpp File Reference
    +
    transform2.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    typedef detail::tvec2
    -< std::size_t, defaultp > 
    size2
     
    typedef detail::tvec2
    -< std::size_t, defaultp > 
    size2_t
     
    typedef detail::tvec3
    -< std::size_t, defaultp > 
    size3
     
    typedef detail::tvec3
    -< std::size_t, defaultp > 
    size3_t
     
    typedef detail::tvec4
    -< std::size_t, defaultp > 
    size4
     
    typedef detail::tvec4
    -< std::size_t, defaultp > 
    size4_t
     

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > proj2D (const tmat3x3< T, P > &m, const tvec3< T, P > &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > proj3D (const tmat4x4< T, P > &m, const tvec3< T, P > &normal)
     
    template<typename valType , precision P>
    GLM_FUNC_DECL tmat4x4< valType, P > scaleBias (valType scale, valType bias)
     
    template<typename valType , precision P>
    GLM_FUNC_DECL tmat4x4< valType, P > scaleBias (tmat4x4< valType, P > const &m, valType scale, valType bias)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > shearX2D (tmat3x3< T, P > const &m, T y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > shearX3D (const tmat4x4< T, P > &m, T y, T z)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > shearY2D (tmat3x3< T, P > const &m, T x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > shearY3D (const tmat4x4< T, P > &m, T x, T z)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > shearZ3D (const tmat4x4< T, P > &m, T x, T y)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_std_based_type

    -
    Date
    2008-06-08 / 2011-06-07
    +

    GLM_GTX_transform2

    +
    Date
    2005-12-21 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -GLM_GTX_extented_min_max (dependence)
    +GLM_GTX_transform (dependence)
    -

    Definition in file std_based_type.hpp.

    +

    Definition in file transform2.hpp.

    diff --git a/doc/api/a00113_source.html b/doc/api/a00113_source.html index 8de7cba8..813da5e0 100644 --- a/doc/api/a00113_source.html +++ b/doc/api/a00113_source.html @@ -3,8 +3,8 @@ - -GLM: std_based_type.hpp Source File + +0.9.6: transform2.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,58 +41,104 @@
    -
    std_based_type.hpp
    +
    transform2.hpp
    Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_std_based_type
    -
    39 #define GLM_GTX_std_based_type
    -
    40 
    +
    39 #pragma once
    +
    40 
    41 // Dependency:
    42 #include "../glm.hpp"
    -
    43 #include <cstdlib>
    +
    43 #include "../gtx/transform.hpp"
    44 
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    46 # pragma message("GLM: GLM_GTX_std_based_type extension included")
    -
    47 #endif
    -
    48 
    -
    49 namespace glm
    +
    46 # pragma message("GLM: GLM_GTX_transform2 extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    50 {
    -
    53 
    -
    56  typedef detail::tvec2<std::size_t, defaultp> size2;
    -
    57 
    -
    60  typedef detail::tvec3<std::size_t, defaultp> size3;
    -
    61 
    -
    64  typedef detail::tvec4<std::size_t, defaultp> size4;
    -
    65 
    -
    68  typedef detail::tvec2<std::size_t, defaultp> size2_t;
    -
    69 
    -
    72  typedef detail::tvec3<std::size_t, defaultp> size3_t;
    -
    73 
    -
    76  typedef detail::tvec4<std::size_t, defaultp> size4_t;
    -
    77 
    -
    79 }//namespace glm
    -
    80 
    -
    81 #include "std_based_type.inl"
    -
    82 
    -
    83 #endif//GLM_GTX_std_based_type
    -
    detail::tvec4< std::size_t, defaultp > size4
    Vector type based of four std::size_t components.
    -
    detail::tvec4< std::size_t, defaultp > size4_t
    Vector type based of four std::size_t components.
    -
    detail::tvec3< std::size_t, defaultp > size3_t
    Vector type based of three std::size_t components.
    -
    detail::tvec3< std::size_t, defaultp > size3
    Vector type based of three std::size_t components.
    -
    detail::tvec2< std::size_t, defaultp > size2_t
    Vector type based of two std::size_t components.
    -
    detail::tvec2< std::size_t, defaultp > size2
    Vector type based of two std::size_t components.
    +
    53 
    +
    56  template <typename T, precision P>
    +
    57  GLM_FUNC_DECL tmat3x3<T, P> shearX2D(
    +
    58  tmat3x3<T, P> const & m,
    +
    59  T y);
    +
    60 
    +
    63  template <typename T, precision P>
    +
    64  GLM_FUNC_DECL tmat3x3<T, P> shearY2D(
    +
    65  tmat3x3<T, P> const & m,
    +
    66  T x);
    +
    67 
    +
    70  template <typename T, precision P>
    +
    71  GLM_FUNC_DECL tmat4x4<T, P> shearX3D(
    +
    72  const tmat4x4<T, P> & m,
    +
    73  T y,
    +
    74  T z);
    +
    75 
    +
    78  template <typename T, precision P>
    +
    79  GLM_FUNC_DECL tmat4x4<T, P> shearY3D(
    +
    80  const tmat4x4<T, P> & m,
    +
    81  T x,
    +
    82  T z);
    +
    83 
    +
    86  template <typename T, precision P>
    +
    87  GLM_FUNC_DECL tmat4x4<T, P> shearZ3D(
    +
    88  const tmat4x4<T, P> & m,
    +
    89  T x,
    +
    90  T y);
    +
    91 
    +
    92  //template <typename T> GLM_FUNC_QUALIFIER tmat4x4<T, P> shear(const tmat4x4<T, P> & m, shearPlane, planePoint, angle)
    +
    93  // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0
    +
    94  // - dot(PointOnPlane, normal) * OnPlaneVector 1
    +
    95 
    +
    96  // Reflect functions seem to don't work
    +
    97  //template <typename T> tmat3x3<T, P> reflect2D(const tmat3x3<T, P> & m, const tvec3<T, P>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
    +
    98  //template <typename T> tmat4x4<T, P> reflect3D(const tmat4x4<T, P> & m, const tvec3<T, P>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
    +
    99 
    +
    102  template <typename T, precision P>
    +
    103  GLM_FUNC_DECL tmat3x3<T, P> proj2D(
    +
    104  const tmat3x3<T, P> & m,
    +
    105  const tvec3<T, P>& normal);
    +
    106 
    +
    109  template <typename T, precision P>
    +
    110  GLM_FUNC_DECL tmat4x4<T, P> proj3D(
    +
    111  const tmat4x4<T, P> & m,
    +
    112  const tvec3<T, P>& normal);
    +
    113 
    +
    116  template <typename valType, precision P>
    +
    117  GLM_FUNC_DECL tmat4x4<valType, P> scaleBias(
    +
    118  valType scale,
    +
    119  valType bias);
    +
    120 
    +
    123  template <typename valType, precision P>
    +
    124  GLM_FUNC_DECL tmat4x4<valType, P> scaleBias(
    +
    125  tmat4x4<valType, P> const & m,
    +
    126  valType scale,
    +
    127  valType bias);
    +
    128 
    +
    130 }// namespace glm
    +
    131 
    +
    132 #include "transform2.inl"
    +
    GLM_FUNC_DECL tmat3x3< T, P > shearX2D(tmat3x3< T, P > const &m, T y)
    Transforms a matrix with a shearing on X axis.
    +
    GLM_FUNC_DECL tmat4x4< T, P > shearX3D(const tmat4x4< T, P > &m, T y, T z)
    Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.
    +
    GLM_FUNC_DECL tmat4x4< T, P > shearZ3D(const tmat4x4< T, P > &m, T x, T y)
    Transforms a matrix with a shearing on Z axis.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tmat4x4< valType, P > scaleBias(tmat4x4< valType, P > const &m, valType scale, valType bias)
    Build a scale bias matrix.
    +
    GLM_FUNC_DECL tmat4x4< T, P > scale(tmat4x4< T, P > const &m, tvec3< T, P > const &v)
    Builds a scale 4 * 4 matrix created from 3 scalars.
    +
    GLM_FUNC_DECL tmat4x4< T, P > proj3D(const tmat4x4< T, P > &m, const tvec3< T, P > &normal)
    Build planar projection matrix along normal axis.
    +
    GLM_FUNC_DECL tmat3x3< T, P > proj2D(const tmat3x3< T, P > &m, const tvec3< T, P > &normal)
    Build planar projection matrix along normal axis.
    +
    GLM_FUNC_DECL tmat3x3< T, P > shearY2D(tmat3x3< T, P > const &m, T x)
    Transforms a matrix with a shearing on Y axis.
    +
    GLM_FUNC_DECL tmat4x4< T, P > shearY3D(const tmat4x4< T, P > &m, T x, T z)
    Transforms a matrix with a shearing on Y axis.
    diff --git a/doc/api/a00114.html b/doc/api/a00114.html index 4da289d4..188f5285 100644 --- a/doc/api/a00114.html +++ b/doc/api/a00114.html @@ -3,8 +3,8 @@ - -GLM: string_cast.hpp File Reference + +0.9.6: trigonometric.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,54 +41,32 @@
    -
    -
    string_cast.hpp File Reference
    +
    trigonometric.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - -

    -Functions

    template<typename genType >
    std::string to_string (genType const &x)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_string_cast

    -
    Date
    2008-04-26 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -gtc_half_float (dependence)
    -
    -GLM_GTX_integer (dependence)
    -
    -GLM_GTX_quaternion (dependence)
    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    -

    Definition in file string_cast.hpp.

    +

    Definition in file trigonometric.hpp.

    diff --git a/doc/api/a00114_source.html b/doc/api/a00114_source.html index 51b49154..0064de2c 100644 --- a/doc/api/a00114_source.html +++ b/doc/api/a00114_source.html @@ -3,8 +3,8 @@ - -GLM: string_cast.hpp Source File + +0.9.6: trigonometric.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,46 +41,25 @@
    -
    string_cast.hpp
    +
    trigonometric.hpp
    Go to the documentation of this file.
    1 
    -
    41 #ifndef GLM_GTX_string_cast
    -
    42 #define GLM_GTX_string_cast
    -
    43 
    -
    44 // Dependency:
    -
    45 #include "../glm.hpp"
    -
    46 #include "../gtx/integer.hpp"
    -
    47 #include "../gtx/quaternion.hpp"
    -
    48 #include <string>
    -
    49 
    -
    50 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    51 # pragma message("GLM: GLM_GTX_string_cast extension included")
    -
    52 #endif
    -
    53 
    -
    54 namespace glm
    -
    55 {
    -
    58 
    -
    61  template <typename genType>
    -
    62  std::string to_string(genType const & x);
    -
    63 
    -
    65 }//namespace glm
    -
    66 
    -
    67 #include "string_cast.inl"
    -
    68 
    -
    69 #endif//GLM_GTX_string_cast
    -
    std::string to_string(genType const &x)
    Create a string from a GLM type value.
    +
    29 #pragma once
    +
    30 
    + +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00115.html b/doc/api/a00115.html index 7c26c868..5cce0d6c 100644 --- a/doc/api/a00115.html +++ b/doc/api/a00115.html @@ -3,8 +3,8 @@ - -GLM: transform.hpp File Reference + +0.9.6: type_aligned.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,60 +41,459 @@
    -
    transform.hpp File Reference
    +
    type_aligned.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tmat4x4< T, P > rotate (T angle, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > scale (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > translate (detail::tvec3< T, P > const &v)
     
     GLM_ALIGNED_TYPEDEF (lowp_int8, aligned_lowp_int8, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_int16, aligned_lowp_int16, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_int32, aligned_lowp_int32, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_int64, aligned_lowp_int64, 8)
     
     GLM_ALIGNED_TYPEDEF (lowp_int8_t, aligned_lowp_int8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_int16_t, aligned_lowp_int16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_int32_t, aligned_lowp_int32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_int64_t, aligned_lowp_int64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (lowp_i8, aligned_lowp_i8, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_i16, aligned_lowp_i16, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_i32, aligned_lowp_i32, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_i64, aligned_lowp_i64, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_int8, aligned_mediump_int8, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_int16, aligned_mediump_int16, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_int32, aligned_mediump_int32, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_int64, aligned_mediump_int64, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_int8_t, aligned_mediump_int8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_int16_t, aligned_mediump_int16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_int32_t, aligned_mediump_int32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_int64_t, aligned_mediump_int64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_i8, aligned_mediump_i8, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_i16, aligned_mediump_i16, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_i32, aligned_mediump_i32, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_i64, aligned_mediump_i64, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_int8, aligned_highp_int8, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_int16, aligned_highp_int16, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_int32, aligned_highp_int32, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_int64, aligned_highp_int64, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_int8_t, aligned_highp_int8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_int16_t, aligned_highp_int16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_int32_t, aligned_highp_int32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_int64_t, aligned_highp_int64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_i8, aligned_highp_i8, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_i16, aligned_highp_i16, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_i32, aligned_highp_i32, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_i64, aligned_highp_i64, 8)
     
     GLM_ALIGNED_TYPEDEF (int8, aligned_int8, 1)
     
     GLM_ALIGNED_TYPEDEF (int16, aligned_int16, 2)
     
     GLM_ALIGNED_TYPEDEF (int32, aligned_int32, 4)
     
     GLM_ALIGNED_TYPEDEF (int64, aligned_int64, 8)
     
     GLM_ALIGNED_TYPEDEF (int8_t, aligned_int8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (int16_t, aligned_int16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (int32_t, aligned_int32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (int64_t, aligned_int64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (i8, aligned_i8, 1)
     
     GLM_ALIGNED_TYPEDEF (i16, aligned_i16, 2)
     
     GLM_ALIGNED_TYPEDEF (i32, aligned_i32, 4)
     
     GLM_ALIGNED_TYPEDEF (i64, aligned_i64, 8)
     
     GLM_ALIGNED_TYPEDEF (ivec1, aligned_ivec1, 4)
     
     GLM_ALIGNED_TYPEDEF (ivec2, aligned_ivec2, 8)
     
     GLM_ALIGNED_TYPEDEF (ivec3, aligned_ivec3, 16)
     
     GLM_ALIGNED_TYPEDEF (ivec4, aligned_ivec4, 16)
     
     GLM_ALIGNED_TYPEDEF (i8vec1, aligned_i8vec1, 1)
     
     GLM_ALIGNED_TYPEDEF (i8vec2, aligned_i8vec2, 2)
     
     GLM_ALIGNED_TYPEDEF (i8vec3, aligned_i8vec3, 4)
     
     GLM_ALIGNED_TYPEDEF (i8vec4, aligned_i8vec4, 4)
     
     GLM_ALIGNED_TYPEDEF (i16vec1, aligned_i16vec1, 2)
     
     GLM_ALIGNED_TYPEDEF (i16vec2, aligned_i16vec2, 4)
     
     GLM_ALIGNED_TYPEDEF (i16vec3, aligned_i16vec3, 8)
     
     GLM_ALIGNED_TYPEDEF (i16vec4, aligned_i16vec4, 8)
     
     GLM_ALIGNED_TYPEDEF (i32vec1, aligned_i32vec1, 4)
     
     GLM_ALIGNED_TYPEDEF (i32vec2, aligned_i32vec2, 8)
     
     GLM_ALIGNED_TYPEDEF (i32vec3, aligned_i32vec3, 16)
     
     GLM_ALIGNED_TYPEDEF (i32vec4, aligned_i32vec4, 16)
     
     GLM_ALIGNED_TYPEDEF (i64vec1, aligned_i64vec1, 8)
     
     GLM_ALIGNED_TYPEDEF (i64vec2, aligned_i64vec2, 16)
     
     GLM_ALIGNED_TYPEDEF (i64vec3, aligned_i64vec3, 32)
     
     GLM_ALIGNED_TYPEDEF (i64vec4, aligned_i64vec4, 32)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint8, aligned_lowp_uint8, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint16, aligned_lowp_uint16, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint32, aligned_lowp_uint32, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint64, aligned_lowp_uint64, 8)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint8_t, aligned_lowp_uint8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint16_t, aligned_lowp_uint16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint32_t, aligned_lowp_uint32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint64_t, aligned_lowp_uint64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (lowp_u8, aligned_lowp_u8, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_u16, aligned_lowp_u16, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_u32, aligned_lowp_u32, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_u64, aligned_lowp_u64, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint8, aligned_mediump_uint8, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint16, aligned_mediump_uint16, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint32, aligned_mediump_uint32, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint64, aligned_mediump_uint64, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint8_t, aligned_mediump_uint8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint16_t, aligned_mediump_uint16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint32_t, aligned_mediump_uint32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint64_t, aligned_mediump_uint64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_u8, aligned_mediump_u8, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_u16, aligned_mediump_u16, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_u32, aligned_mediump_u32, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_u64, aligned_mediump_u64, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_uint8, aligned_highp_uint8, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_uint16, aligned_highp_uint16, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_uint32, aligned_highp_uint32, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_uint64, aligned_highp_uint64, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_uint8_t, aligned_highp_uint8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_uint16_t, aligned_highp_uint16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_uint32_t, aligned_highp_uint32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_uint64_t, aligned_highp_uint64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_u8, aligned_highp_u8, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_u16, aligned_highp_u16, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_u32, aligned_highp_u32, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_u64, aligned_highp_u64, 8)
     
     GLM_ALIGNED_TYPEDEF (uint8, aligned_uint8, 1)
     
     GLM_ALIGNED_TYPEDEF (uint16, aligned_uint16, 2)
     
     GLM_ALIGNED_TYPEDEF (uint32, aligned_uint32, 4)
     
     GLM_ALIGNED_TYPEDEF (uint64, aligned_uint64, 8)
     
     GLM_ALIGNED_TYPEDEF (uint8_t, aligned_uint8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (uint16_t, aligned_uint16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (uint32_t, aligned_uint32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (uint64_t, aligned_uint64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (u8, aligned_u8, 1)
     
     GLM_ALIGNED_TYPEDEF (u16, aligned_u16, 2)
     
     GLM_ALIGNED_TYPEDEF (u32, aligned_u32, 4)
     
     GLM_ALIGNED_TYPEDEF (u64, aligned_u64, 8)
     
     GLM_ALIGNED_TYPEDEF (uvec1, aligned_uvec1, 4)
     
     GLM_ALIGNED_TYPEDEF (uvec2, aligned_uvec2, 8)
     
     GLM_ALIGNED_TYPEDEF (uvec3, aligned_uvec3, 16)
     
     GLM_ALIGNED_TYPEDEF (uvec4, aligned_uvec4, 16)
     
     GLM_ALIGNED_TYPEDEF (u8vec1, aligned_u8vec1, 1)
     
     GLM_ALIGNED_TYPEDEF (u8vec2, aligned_u8vec2, 2)
     
     GLM_ALIGNED_TYPEDEF (u8vec3, aligned_u8vec3, 4)
     
     GLM_ALIGNED_TYPEDEF (u8vec4, aligned_u8vec4, 4)
     
     GLM_ALIGNED_TYPEDEF (u16vec1, aligned_u16vec1, 2)
     
     GLM_ALIGNED_TYPEDEF (u16vec2, aligned_u16vec2, 4)
     
     GLM_ALIGNED_TYPEDEF (u16vec3, aligned_u16vec3, 8)
     
     GLM_ALIGNED_TYPEDEF (u16vec4, aligned_u16vec4, 8)
     
     GLM_ALIGNED_TYPEDEF (u32vec1, aligned_u32vec1, 4)
     
     GLM_ALIGNED_TYPEDEF (u32vec2, aligned_u32vec2, 8)
     
     GLM_ALIGNED_TYPEDEF (u32vec3, aligned_u32vec3, 16)
     
     GLM_ALIGNED_TYPEDEF (u32vec4, aligned_u32vec4, 16)
     
     GLM_ALIGNED_TYPEDEF (u64vec1, aligned_u64vec1, 8)
     
     GLM_ALIGNED_TYPEDEF (u64vec2, aligned_u64vec2, 16)
     
     GLM_ALIGNED_TYPEDEF (u64vec3, aligned_u64vec3, 32)
     
     GLM_ALIGNED_TYPEDEF (u64vec4, aligned_u64vec4, 32)
     
     GLM_ALIGNED_TYPEDEF (float32, aligned_float32, 4)
     
     GLM_ALIGNED_TYPEDEF (float64, aligned_float64, 8)
     
     GLM_ALIGNED_TYPEDEF (float32_t, aligned_float32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (float64_t, aligned_float64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (float32, aligned_f32, 4)
     
     GLM_ALIGNED_TYPEDEF (float64, aligned_f64, 8)
     
     GLM_ALIGNED_TYPEDEF (vec1, aligned_vec1, 4)
     
     GLM_ALIGNED_TYPEDEF (vec2, aligned_vec2, 8)
     
     GLM_ALIGNED_TYPEDEF (vec3, aligned_vec3, 16)
     
     GLM_ALIGNED_TYPEDEF (vec4, aligned_vec4, 16)
     
     GLM_ALIGNED_TYPEDEF (fvec1, aligned_fvec1, 4)
     
     GLM_ALIGNED_TYPEDEF (fvec2, aligned_fvec2, 8)
     
     GLM_ALIGNED_TYPEDEF (fvec3, aligned_fvec3, 16)
     
     GLM_ALIGNED_TYPEDEF (fvec4, aligned_fvec4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32vec1, aligned_f32vec1, 4)
     
     GLM_ALIGNED_TYPEDEF (f32vec2, aligned_f32vec2, 8)
     
     GLM_ALIGNED_TYPEDEF (f32vec3, aligned_f32vec3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32vec4, aligned_f32vec4, 16)
     
     GLM_ALIGNED_TYPEDEF (dvec1, aligned_dvec1, 8)
     
     GLM_ALIGNED_TYPEDEF (dvec2, aligned_dvec2, 16)
     
     GLM_ALIGNED_TYPEDEF (dvec3, aligned_dvec3, 32)
     
     GLM_ALIGNED_TYPEDEF (dvec4, aligned_dvec4, 32)
     
     GLM_ALIGNED_TYPEDEF (f64vec1, aligned_f64vec1, 8)
     
     GLM_ALIGNED_TYPEDEF (f64vec2, aligned_f64vec2, 16)
     
     GLM_ALIGNED_TYPEDEF (f64vec3, aligned_f64vec3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64vec4, aligned_f64vec4, 32)
     
     GLM_ALIGNED_TYPEDEF (mat2, aligned_mat2, 16)
     
     GLM_ALIGNED_TYPEDEF (mat3, aligned_mat3, 16)
     
     GLM_ALIGNED_TYPEDEF (mat4, aligned_mat4, 16)
     
     GLM_ALIGNED_TYPEDEF (mat2x2, aligned_mat2x2, 16)
     
     GLM_ALIGNED_TYPEDEF (mat3x3, aligned_mat3x3, 16)
     
     GLM_ALIGNED_TYPEDEF (mat4x4, aligned_mat4x4, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat2x2, aligned_fmat2, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat3x3, aligned_fmat3, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat4x4, aligned_fmat4, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat2x2, aligned_fmat2x2, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat2x3, aligned_fmat2x3, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat2x4, aligned_fmat2x4, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat3x2, aligned_fmat3x2, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat3x3, aligned_fmat3x3, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat3x4, aligned_fmat3x4, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat4x2, aligned_fmat4x2, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat4x3, aligned_fmat4x3, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat4x4, aligned_fmat4x4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat2x2, aligned_f32mat2, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat3x3, aligned_f32mat3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat4x4, aligned_f32mat4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat2x2, aligned_f32mat2x2, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat2x3, aligned_f32mat2x3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat2x4, aligned_f32mat2x4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat3x2, aligned_f32mat3x2, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat3x3, aligned_f32mat3x3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat3x4, aligned_f32mat3x4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat4x2, aligned_f32mat4x2, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat4x3, aligned_f32mat4x3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat4x4, aligned_f32mat4x4, 16)
     
     GLM_ALIGNED_TYPEDEF (f64mat2x2, aligned_f64mat2, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat3x3, aligned_f64mat3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat4x4, aligned_f64mat4, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat2x2, aligned_f64mat2x2, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat2x3, aligned_f64mat2x3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat2x4, aligned_f64mat2x4, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat3x2, aligned_f64mat3x2, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat3x3, aligned_f64mat3x3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat3x4, aligned_f64mat3x4, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat4x2, aligned_f64mat4x2, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat4x3, aligned_f64mat4x3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat4x4, aligned_f64mat4x4, 32)
     
     GLM_ALIGNED_TYPEDEF (quat, aligned_quat, 16)
     
     GLM_ALIGNED_TYPEDEF (fquat, aligned_fquat, 16)
     
     GLM_ALIGNED_TYPEDEF (dquat, aligned_dquat, 32)
     
     GLM_ALIGNED_TYPEDEF (f32quat, aligned_f32quat, 16)
     
     GLM_ALIGNED_TYPEDEF (f64quat, aligned_f64quat, 32)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_transform

    -
    Date
    2005-12-21 / 2011-06-07
    +

    GLM_GTX_type_aligned

    +
    Date
    2014-11-23 / 2014-12-23
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    -GLM_GTC_matrix_transform (dependence)
    -
    -GLM_GTX_transform
    -
    -GLM_GTX_transform2
    +GLM_GTC_quaternion (dependence)
    -

    Definition in file transform.hpp.

    +

    Definition in file type_aligned.hpp.

    diff --git a/doc/api/a00115_source.html b/doc/api/a00115_source.html index 1be83a0c..3573175d 100644 --- a/doc/api/a00115_source.html +++ b/doc/api/a00115_source.html @@ -3,8 +3,8 @@ - -GLM: transform.hpp Source File + +0.9.6: type_aligned.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,57 +41,714 @@
    -
    transform.hpp
    +
    type_aligned.hpp
    Go to the documentation of this file.
    1 
    -
    41 #ifndef GLM_GTX_transform
    -
    42 #define GLM_GTX_transform
    -
    43 
    -
    44 // Dependency:
    -
    45 #include "../glm.hpp"
    -
    46 #include "../gtc/matrix_transform.hpp"
    -
    47 
    -
    48 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    49 # pragma message("GLM: GLM_GTX_transform extension included")
    -
    50 #endif
    -
    51 
    -
    52 namespace glm
    -
    53 {
    -
    56 
    -
    60  template <typename T, precision P>
    -
    61  detail::tmat4x4<T, P> translate(
    -
    62  detail::tvec3<T, P> const & v);
    -
    63 
    -
    67  template <typename T, precision P>
    -
    68  detail::tmat4x4<T, P> rotate(
    -
    69  T angle,
    -
    70  detail::tvec3<T, P> const & v);
    -
    71 
    -
    75  template <typename T, precision P>
    -
    76  detail::tmat4x4<T, P> scale(
    -
    77  detail::tvec3<T, P> const & v);
    +
    41 #pragma once
    +
    42 
    +
    43 // Dependency:
    +
    44 #include "../gtc/type_precision.hpp"
    +
    45 
    +
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    47 # pragma message("GLM: GLM_GTX_type_aligned extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    +
    53  // Signed int vector types
    +
    54 
    +
    57 
    +
    60  GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1);
    +
    61 
    +
    64  GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2);
    +
    65 
    +
    68  GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4);
    +
    69 
    +
    72  GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8);
    +
    73 
    +
    74 
    +
    77  GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1);
    78 
    -
    80 }// namespace glm
    -
    81 
    -
    82 #include "transform.inl"
    -
    83 
    -
    84 #endif//GLM_GTX_transform
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > rotate(detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
    Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > scale(detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
    Builds a scale 4 * 4 matrix created from 3 scalars.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > translate(detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
    Builds a translation 4 * 4 matrix created from a vector of 3 components.
    +
    81  GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2);
    +
    82 
    +
    85  GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4);
    +
    86 
    +
    89  GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8);
    +
    90 
    +
    91 
    +
    94  GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1);
    +
    95 
    +
    98  GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2);
    +
    99 
    +
    102  GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4);
    +
    103 
    +
    106  GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8);
    +
    107 
    +
    108 
    +
    111  GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1);
    +
    112 
    +
    115  GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2);
    +
    116 
    +
    119  GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4);
    +
    120 
    +
    123  GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8);
    +
    124 
    +
    125 
    +
    128  GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1);
    +
    129 
    +
    132  GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2);
    +
    133 
    +
    136  GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4);
    +
    137 
    +
    140  GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8);
    +
    141 
    +
    142 
    +
    145  GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1);
    +
    146 
    +
    149  GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2);
    +
    150 
    +
    153  GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4);
    +
    154 
    +
    157  GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8);
    +
    158 
    +
    159 
    +
    162  GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1);
    +
    163 
    +
    166  GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2);
    +
    167 
    +
    170  GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4);
    +
    171 
    +
    174  GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8);
    +
    175 
    +
    176 
    +
    179  GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1);
    +
    180 
    +
    183  GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2);
    +
    184 
    +
    187  GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4);
    +
    188 
    +
    191  GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8);
    +
    192 
    +
    193 
    +
    196  GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1);
    +
    197 
    +
    200  GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2);
    +
    201 
    +
    204  GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4);
    +
    205 
    +
    208  GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8);
    +
    209 
    +
    210 
    +
    213  GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1);
    +
    214 
    +
    217  GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2);
    +
    218 
    +
    221  GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4);
    +
    222 
    +
    225  GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8);
    +
    226 
    +
    227 
    +
    230  GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1);
    +
    231 
    +
    234  GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2);
    +
    235 
    +
    238  GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4);
    +
    239 
    +
    242  GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8);
    +
    243 
    +
    244 
    +
    247  GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1);
    +
    248 
    +
    251  GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2);
    +
    252 
    +
    255  GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4);
    +
    256 
    +
    259  GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8);
    +
    260 
    +
    261 
    +
    264  GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4);
    +
    265 
    +
    268  GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8);
    +
    269 
    +
    272  GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16);
    +
    273 
    +
    276  GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16);
    +
    277 
    +
    278 
    +
    281  GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1);
    +
    282 
    +
    285  GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2);
    +
    286 
    +
    289  GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4);
    +
    290 
    +
    293  GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4);
    +
    294 
    +
    295 
    +
    298  GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2);
    +
    299 
    +
    302  GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4);
    +
    303 
    +
    306  GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8);
    +
    307 
    +
    310  GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8);
    +
    311 
    +
    312 
    +
    315  GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4);
    +
    316 
    +
    319  GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8);
    +
    320 
    +
    323  GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16);
    +
    324 
    +
    327  GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16);
    +
    328 
    +
    329 
    +
    332  GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8);
    +
    333 
    +
    336  GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16);
    +
    337 
    +
    340  GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32);
    +
    341 
    +
    344  GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32);
    +
    345 
    +
    346 
    +
    348  // Unsigned int vector types
    +
    349 
    +
    352  GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1);
    +
    353 
    +
    356  GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2);
    +
    357 
    +
    360  GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4);
    +
    361 
    +
    364  GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8);
    +
    365 
    +
    366 
    +
    369  GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1);
    +
    370 
    +
    373  GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2);
    +
    374 
    +
    377  GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4);
    +
    378 
    +
    381  GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8);
    +
    382 
    +
    383 
    +
    386  GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1);
    +
    387 
    +
    390  GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2);
    +
    391 
    +
    394  GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4);
    +
    395 
    +
    398  GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8);
    +
    399 
    +
    400 
    +
    403  GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1);
    +
    404 
    +
    407  GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2);
    +
    408 
    +
    411  GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4);
    +
    412 
    +
    415  GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8);
    +
    416 
    +
    417 
    +
    420  GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1);
    +
    421 
    +
    424  GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2);
    +
    425 
    +
    428  GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4);
    +
    429 
    +
    432  GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8);
    +
    433 
    +
    434 
    +
    437  GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1);
    +
    438 
    +
    441  GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2);
    +
    442 
    +
    445  GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4);
    +
    446 
    +
    449  GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8);
    +
    450 
    +
    451 
    +
    454  GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1);
    +
    455 
    +
    458  GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2);
    +
    459 
    +
    462  GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4);
    +
    463 
    +
    466  GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8);
    +
    467 
    +
    468 
    +
    471  GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1);
    +
    472 
    +
    475  GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2);
    +
    476 
    +
    479  GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4);
    +
    480 
    +
    483  GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8);
    +
    484 
    +
    485 
    +
    488  GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1);
    +
    489 
    +
    492  GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2);
    +
    493 
    +
    496  GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4);
    +
    497 
    +
    500  GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8);
    +
    501 
    +
    502 
    +
    505  GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1);
    +
    506 
    +
    509  GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2);
    +
    510 
    +
    513  GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4);
    +
    514 
    +
    517  GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8);
    +
    518 
    +
    519 
    +
    522  GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1);
    +
    523 
    +
    526  GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2);
    +
    527 
    +
    530  GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4);
    +
    531 
    +
    534  GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8);
    +
    535 
    +
    536 
    +
    539  GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1);
    +
    540 
    +
    543  GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2);
    +
    544 
    +
    547  GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4);
    +
    548 
    +
    551  GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8);
    +
    552 
    +
    553 
    +
    556  GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4);
    +
    557 
    +
    560  GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8);
    +
    561 
    +
    564  GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16);
    +
    565 
    +
    568  GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16);
    +
    569 
    +
    570 
    +
    573  GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1);
    +
    574 
    +
    577  GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2);
    +
    578 
    +
    581  GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4);
    +
    582 
    +
    585  GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4);
    +
    586 
    +
    587 
    +
    590  GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2);
    +
    591 
    +
    594  GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4);
    +
    595 
    +
    598  GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8);
    +
    599 
    +
    602  GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8);
    +
    603 
    +
    604 
    +
    607  GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4);
    +
    608 
    +
    611  GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8);
    +
    612 
    +
    615  GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16);
    +
    616 
    +
    619  GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16);
    +
    620 
    +
    621 
    +
    624  GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8);
    +
    625 
    +
    628  GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16);
    +
    629 
    +
    632  GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32);
    +
    633 
    +
    636  GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32);
    +
    637 
    +
    638 
    +
    640  // Float vector types
    +
    641 
    +
    644  GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4);
    +
    645 
    +
    648  GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8);
    +
    649 
    +
    650 
    +
    653  GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4);
    +
    654 
    +
    657  GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8);
    +
    658 
    +
    659 
    +
    662  GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4);
    +
    663 
    +
    666  GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8);
    +
    667 
    +
    668 
    +
    671  GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4);
    +
    672 
    +
    675  GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8);
    +
    676 
    +
    679  GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16);
    +
    680 
    +
    683  GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16);
    +
    684 
    +
    685 
    +
    688  GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4);
    +
    689 
    +
    692  GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8);
    +
    693 
    +
    696  GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16);
    +
    697 
    +
    700  GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16);
    +
    701 
    +
    702 
    +
    705  GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4);
    +
    706 
    +
    709  GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8);
    +
    710 
    +
    713  GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16);
    +
    714 
    +
    717  GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16);
    +
    718 
    +
    719 
    +
    722  GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8);
    +
    723 
    +
    726  GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16);
    +
    727 
    +
    730  GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32);
    +
    731 
    +
    734  GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32);
    +
    735 
    +
    736 
    +
    739  GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8);
    +
    740 
    +
    743  GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16);
    +
    744 
    +
    747  GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32);
    +
    748 
    +
    751  GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32);
    +
    752 
    +
    753 
    +
    755  // Float matrix types
    +
    756 
    +
    759  //typedef detail::tmat1<f32> mat1;
    +
    760 
    +
    763  GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16);
    +
    764 
    +
    767  GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16);
    +
    768 
    +
    771  GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16);
    +
    772 
    +
    773 
    +
    776  //typedef detail::tmat1x1<f32> mat1;
    +
    777 
    +
    780  GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16);
    +
    781 
    +
    784  GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16);
    +
    785 
    +
    788  GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16);
    +
    789 
    +
    790 
    +
    793  //typedef detail::tmat1x1<f32> fmat1;
    +
    794 
    +
    797  GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16);
    +
    798 
    +
    801  GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16);
    +
    802 
    +
    805  GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16);
    +
    806 
    +
    807 
    +
    810  //typedef f32 fmat1x1;
    +
    811 
    +
    814  GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16);
    +
    815 
    +
    818  GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16);
    +
    819 
    +
    822  GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16);
    +
    823 
    +
    826  GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16);
    +
    827 
    +
    830  GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16);
    +
    831 
    +
    834  GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16);
    +
    835 
    +
    838  GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16);
    +
    839 
    +
    842  GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16);
    +
    843 
    +
    846  GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16);
    +
    847 
    +
    848 
    +
    851  //typedef detail::tmat1x1<f32, defaultp> f32mat1;
    +
    852 
    +
    855  GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16);
    +
    856 
    +
    859  GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16);
    +
    860 
    +
    863  GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16);
    +
    864 
    +
    865 
    +
    868  //typedef f32 f32mat1x1;
    +
    869 
    +
    872  GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16);
    +
    873 
    +
    876  GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16);
    +
    877 
    +
    880  GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16);
    +
    881 
    +
    884  GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16);
    +
    885 
    +
    888  GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16);
    +
    889 
    +
    892  GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16);
    +
    893 
    +
    896  GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16);
    +
    897 
    +
    900  GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16);
    +
    901 
    +
    904  GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16);
    +
    905 
    +
    906 
    +
    909  //typedef detail::tmat1x1<f64, defaultp> f64mat1;
    +
    910 
    +
    913  GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32);
    +
    914 
    +
    917  GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32);
    +
    918 
    +
    921  GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32);
    +
    922 
    +
    923 
    +
    926  //typedef f64 f64mat1x1;
    +
    927 
    +
    930  GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32);
    +
    931 
    +
    934  GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32);
    +
    935 
    +
    938  GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32);
    +
    939 
    +
    942  GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32);
    +
    943 
    +
    946  GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32);
    +
    947 
    +
    950  GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32);
    +
    951 
    +
    954  GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32);
    +
    955 
    +
    958  GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32);
    +
    959 
    +
    962  GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32);
    +
    963 
    +
    964 
    +
    966  // Quaternion types
    +
    967 
    +
    970  GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16);
    +
    971 
    +
    974  GLM_ALIGNED_TYPEDEF(fquat, aligned_fquat, 16);
    +
    975 
    +
    978  GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32);
    +
    979 
    +
    982  GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16);
    +
    983 
    +
    986  GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32);
    +
    987 
    +
    989 }//namespace glm
    +
    990 
    +
    991 #include "type_aligned.inl"
    +
    highp_u32vec3 u32vec3
    Default precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1168
    +
    detail::uint64 u64
    64 bit unsigned integer type.
    Definition: fwd.hpp:934
    +
    mat3x3 mat3
    3 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:433
    +
    highp_f32mat3x3 f32mat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2457
    +
    detail::int64 mediump_i64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:220
    +
    highp_uvec3 uvec3
    3 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:477
    +
    detail::uint64 highp_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:877
    +
    detail::int16 int16_t
    16 bit signed integer type.
    Definition: fwd.hpp:300
    +
    detail::int64 int64_t
    64 bit signed integer type.
    Definition: fwd.hpp:308
    +
    detail::int32 i32
    32 bit signed integer type.
    Definition: fwd.hpp:321
    +
    detail::uint32 lowp_uint32_t
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:756
    +
    mat2x2 mat2
    2 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:428
    +
    detail::int16 highp_int16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:228
    +
    detail::int8 lowp_int8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:128
    +
    detail::int16 lowp_int16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:132
    +
    highp_f32quat f32quat
    Default single-precision floating-point quaternion.
    Definition: fwd.hpp:2489
    +
    highp_f64vec2 f64vec2
    Default double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2535
    +
    detail::int16 i16
    16 bit signed integer type.
    Definition: fwd.hpp:317
    +
    highp_f64mat3x2 f64mat3x2
    Default double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2559
    +
    detail::int64 i64
    64 bit signed integer type.
    Definition: fwd.hpp:325
    +
    highp_dvec2 dvec2
    2 components vector of double-precision floating-point numbers.
    Definition: type_vec.hpp:416
    +
    highp_f64mat2x4 f64mat2x4
    Default double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2555
    +
    detail::int16 highp_int16_t
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:244
    +
    detail::uint8 highp_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:833
    +
    detail::int8 highp_int8_t
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:240
    +
    detail::uint8 mediump_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:783
    +
    detail::uint8 mediump_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:815
    +
    highp_mat4x4 mat4x4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:421
    +
    mat4x4 mat4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:438
    +
    highp_i16vec1 i16vec1
    Default precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:472
    +
    highp_f32vec1 f32vec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2425
    +
    highp_f32mat2x4 f32mat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2449
    +
    highp_f64vec4 f64vec4
    Default double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2543
    +
    detail::uint32 u32
    32 bit unsigned integer type.
    Definition: fwd.hpp:930
    +
    highp_f64mat4x4 f64mat4x4
    Default double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2579
    +
    detail::int8 mediump_int8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:176
    +
    detail::int8 mediump_i8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:208
    +
    detail::uint64 highp_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:861
    +
    detail::uint32 lowp_uint32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:739
    +
    highp_mat3x3 mat3x3
    3 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:401
    +
    detail::int16 mediump_int16_t
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:196
    +
    highp_i64vec2 i64vec2
    Default precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:714
    +
    detail::uint16 lowp_uint16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:735
    +
    highp_u8vec3 u8vec3
    Default precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1009
    +
    highp_u16vec4 u16vec4
    Default precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1093
    +
    detail::uint16 u16
    16 bit unsigned integer type.
    Definition: fwd.hpp:926
    +
    highp_f64vec1 f64vec1
    Default double-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2531
    +
    highp_f32vec4 fvec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2367
    +
    highp_u64vec4 u64vec4
    Default precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1331
    +
    highp_u32vec2 u32vec2
    Default precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1164
    +
    detail::int32 mediump_int32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:184
    +
    highp_i16vec4 i16vec4
    Default precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:484
    +
    detail::int32 lowp_i32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:168
    +
    detail::int16 highp_i16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:260
    +
    detail::uint8 uint8_t
    8 bit unsigned integer type.
    Definition: fwd.hpp:905
    +
    detail::int32 lowp_int32_t
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:152
    +
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    +
    detail::int32 highp_i32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:264
    +
    highp_f32mat2x3 fmat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2375
    +
    highp_float32_t float32_t
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1525
    +
    highp_f32mat4x2 f32mat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2465
    +
    detail::uint16 highp_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:869
    +
    detail::uint32 highp_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:873
    +
    detail::uint64 lowp_uint64_t
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:760
    +
    highp_i32vec1 i32vec1
    Default precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:551
    +
    highp_uvec4 uvec4
    4 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:482
    +
    detail::uint32 lowp_u32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:773
    +
    detail::int8 highp_int8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:224
    +
    quat fquat
    Quaternion of default single-precision floating-point numbers.
    Definition: fwd.hpp:86
    +
    highp_f64mat2x3 f64mat2x3
    Default double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2551
    +
    highp_u16vec3 u16vec3
    Default precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1089
    +
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    +
    highp_f32vec2 f32vec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2429
    +
    detail::uint8 lowp_uint8_t
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:748
    +
    highp_i16vec2 i16vec2
    Default precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:476
    +
    highp_i64vec4 i64vec4
    Default precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:722
    +
    highp_dvec3 dvec3
    3 components vector of double-precision floating-point numbers.
    Definition: type_vec.hpp:421
    +
    highp_ivec3 ivec3
    3 components vector of signed integer numbers.
    Definition: type_vec.hpp:449
    +
    highp_f32vec2 fvec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2359
    +
    detail::int8 int8_t
    8 bit signed integer type.
    Definition: fwd.hpp:296
    +
    highp_f32vec4 f32vec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2437
    +
    detail::uint64 lowp_u64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:777
    +
    highp_f32mat2x2 fmat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2371
    +
    highp_i64vec3 i64vec3
    Default precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:718
    +
    detail::uint64 mediump_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:795
    +
    highp_f32mat4x3 fmat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2399
    +
    highp_ivec2 ivec2
    2 components vector of signed integer numbers.
    Definition: type_vec.hpp:444
    +
    highp_f32mat2x2 f32mat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2441
    +
    highp_f32mat3x2 f32mat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2453
    +
    detail::uint8 u8
    8 bit unsigned integer type.
    Definition: fwd.hpp:922
    +
    detail::uint8 highp_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:849
    +
    highp_f64mat4x2 f64mat4x2
    Default double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2571
    +
    highp_f64mat3x4 f64mat3x4
    Default double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2567
    +
    detail::int64 lowp_int64_t
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:156
    +
    detail::uint16 lowp_u16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:769
    +
    highp_u16vec2 u16vec2
    Default precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1085
    +
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    +
    highp_f32mat4x4 fmat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2403
    +
    highp_dvec4 dvec4
    4 components vector of double-precision floating-point numbers.
    Definition: type_vec.hpp:426
    +
    detail::uint64 highp_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:845
    +
    GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)
    Double-precision floating-point aligned quaternion.
    +
    highp_u64vec1 u64vec1
    Default precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1319
    +
    highp_mat2x2 mat2x2
    2 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:381
    +
    detail::int64 lowp_i64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:172
    +
    highp_f64vec3 f64vec3
    Default double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2539
    +
    detail::int32 lowp_int32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:136
    +
    detail::uint16 lowp_uint16_t
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:752
    +
    detail::int64 highp_i64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:268
    +
    Definition: _noise.hpp:31
    +
    detail::int32 highp_int32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:232
    +
    highp_u32vec4 u32vec4
    Default precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1172
    +
    highp_u8vec2 u8vec2
    Default precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1005
    +
    highp_i16vec3 i16vec3
    Default precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:480
    +
    detail::int32 mediump_int32_t
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:200
    +
    detail::uint16 mediump_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:819
    +
    detail::uint16 highp_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:853
    +
    detail::uint32 mediump_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:791
    +
    detail::int8 i8
    8 bit signed integer type.
    Definition: fwd.hpp:313
    +
    highp_f64mat4x3 f64mat4x3
    Default double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2575
    +
    highp_f32mat2x4 fmat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2379
    +
    highp_f32mat3x4 fmat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2391
    +
    detail::int16 lowp_i16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:164
    +
    highp_i32vec2 i32vec2
    Default precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:555
    +
    detail::uint64 lowp_uint64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:743
    +
    detail::int64 highp_int64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:236
    +
    detail::uint32 mediump_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:823
    +
    highp_i8vec3 i8vec3
    Default precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:400
    +
    highp_f64mat2x2 f64mat2x2
    Default double-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2547
    +
    detail::int64 mediump_int64_t
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:204
    +
    detail::uint32 mediump_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:807
    +
    highp_u16vec1 u16vec1
    Default precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1081
    +
    highp_f32vec3 f32vec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2433
    +
    highp_f32vec1 fvec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2355
    +
    highp_u64vec3 u64vec3
    Default precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1327
    +
    highp_f64quat f64quat
    Default double-precision floating-point quaternion.
    Definition: fwd.hpp:2595
    +
    detail::int16 mediump_i16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:212
    +
    highp_u64vec2 u64vec2
    Default precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1323
    +
    highp_f32mat2x3 f32mat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2445
    +
    highp_f32mat4x2 fmat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2395
    +
    detail::uint32 uint32_t
    32 bit unsigned integer type.
    Definition: fwd.hpp:913
    +
    detail::int32 int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:304
    +
    highp_f32mat3x4 f32mat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2461
    +
    detail::uint16 mediump_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:787
    +
    detail::uint64 uint64_t
    64 bit unsigned integer type.
    Definition: fwd.hpp:917
    +
    highp_i8vec2 i8vec2
    Default precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:396
    +
    highp_f32mat4x3 f32mat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2469
    +
    detail::int64 lowp_int64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:140
    +
    detail::int16 lowp_int16_t
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:148
    +
    detail::uint8 mediump_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:799
    +
    detail::int16 mediump_int16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:180
    +
    highp_float64_t float64_t
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1529
    +
    detail::uint16 uint16_t
    16 bit unsigned integer type.
    Definition: fwd.hpp:909
    +
    highp_f32mat4x4 f32mat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2473
    +
    highp_i8vec1 i8vec1
    Default precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:392
    +
    highp_f64mat3x3 f64mat3x3
    Default double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2563
    +
    highp_i32vec4 i32vec4
    Default precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:563
    +
    highp_f32mat3x2 fmat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2383
    +
    highp_u8vec1 u8vec1
    Default precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:1001
    +
    detail::int8 lowp_i8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:160
    +
    detail::int8 lowp_int8_t
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:144
    +
    highp_ivec4 ivec4
    4 components vector of signed integer numbers.
    Definition: type_vec.hpp:454
    +
    detail::int32 highp_int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:248
    +
    detail::int64 mediump_int64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:188
    +
    detail::uint64 mediump_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:827
    +
    detail::uint8 lowp_uint8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:731
    +
    highp_f32mat3x3 fmat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2387
    +
    highp_i8vec4 i8vec4
    Default precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:404
    +
    highp_f32vec3 fvec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2363
    +
    highp_u32vec1 u32vec1
    Default precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1160
    +
    detail::uint8 lowp_u8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:765
    +
    detail::uint32 highp_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:841
    +
    detail::uint16 mediump_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:803
    +
    detail::uint64 mediump_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:811
    +
    highp_i32vec3 i32vec3
    Default precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:559
    +
    detail::uint8 highp_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:865
    +
    highp_u8vec4 u8vec4
    Default precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1013
    +
    detail::int64 highp_int64_t
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:252
    +
    detail::int8 mediump_int8_t
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:192
    +
    detail::uint16 highp_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:837
    +
    highp_i64vec1 i64vec1
    Default precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:710
    +
    highp_uvec2 uvec2
    2 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:472
    +
    detail::uint32 highp_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:857
    +
    detail::int32 mediump_i32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:216
    +
    detail::int8 highp_i8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:256
    diff --git a/doc/api/a00116.html b/doc/api/a00116.html index e7b1afcb..ca92068e 100644 --- a/doc/api/a00116.html +++ b/doc/api/a00116.html @@ -3,8 +3,8 @@ - -GLM: transform2.hpp File Reference + +0.9.6: type_float.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,74 +41,48 @@
    -
    transform2.hpp File Reference
    +
    type_float.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + +

    -Functions

    template<typename T , precision P>
    detail::tmat3x3< T, P > proj2D (const detail::tmat3x3< T, P > &m, const detail::tvec3< T, P > &normal)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > proj3D (const detail::tmat4x4< T, P > &m, const detail::tvec3< T, P > &normal)
     
    template<typename valType , precision P>
    detail::tmat4x4< valType, P > scaleBias (valType scale, valType bias)
     
    template<typename valType , precision P>
    detail::tmat4x4< valType, P > scaleBias (detail::tmat4x4< valType, P > const &m, valType scale, valType bias)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > shearX2D (detail::tmat3x3< T, P > const &m, T y)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > shearX3D (const detail::tmat4x4< T, P > &m, T y, T z)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > shearY2D (detail::tmat3x3< T, P > const &m, T x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > shearY3D (const detail::tmat4x4< T, P > &m, T x, T z)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > shearZ3D (const detail::tmat4x4< T, P > &m, T x, T y)
     

    +Typedefs

    typedef float float32
     
    typedef double float64
     
    typedef highp_float_t highp_float
     
    typedef lowp_float_t lowp_float
     
    typedef mediump_float_t mediump_float
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_transform2

    -
    Date
    2005-12-21 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_transform (dependence)
    +

    GLM Core

    +
    Date
    2008-08-22 / 2011-06-15
    +
    Author
    Christophe Riccio
    -

    Definition in file transform2.hpp.

    +

    Definition in file type_float.hpp.

    diff --git a/doc/api/a00116_source.html b/doc/api/a00116_source.html index 3049a1ab..c19a8793 100644 --- a/doc/api/a00116_source.html +++ b/doc/api/a00116_source.html @@ -3,8 +3,8 @@ - -GLM: transform2.hpp Source File + +0.9.6: type_float.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,106 +41,73 @@
    -
    transform2.hpp
    +
    type_float.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTX_transform2
    -
    40 #define GLM_GTX_transform2
    -
    41 
    -
    42 // Dependency:
    -
    43 #include "../glm.hpp"
    -
    44 #include "../gtx/transform.hpp"
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_transform2 extension included")
    -
    48 #endif
    -
    49 
    -
    50 namespace glm
    -
    51 {
    -
    54 
    -
    57  template <typename T, precision P>
    -
    58  detail::tmat3x3<T, P> shearX2D(
    -
    59  detail::tmat3x3<T, P> const & m,
    -
    60  T y);
    -
    61 
    -
    64  template <typename T, precision P>
    -
    65  detail::tmat3x3<T, P> shearY2D(
    -
    66  detail::tmat3x3<T, P> const & m,
    -
    67  T x);
    -
    68 
    -
    71  template <typename T, precision P>
    -
    72  detail::tmat4x4<T, P> shearX3D(
    -
    73  const detail::tmat4x4<T, P> & m,
    -
    74  T y,
    -
    75  T z);
    -
    76 
    -
    79  template <typename T, precision P>
    -
    80  detail::tmat4x4<T, P> shearY3D(
    -
    81  const detail::tmat4x4<T, P> & m,
    -
    82  T x,
    -
    83  T z);
    -
    84 
    -
    87  template <typename T, precision P>
    -
    88  detail::tmat4x4<T, P> shearZ3D(
    -
    89  const detail::tmat4x4<T, P> & m,
    -
    90  T x,
    -
    91  T y);
    -
    92 
    -
    93  //template <typename T> GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> shear(const detail::tmat4x4<T, P> & m, shearPlane, planePoint, angle)
    -
    94  // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0
    -
    95  // - dot(PointOnPlane, normal) * OnPlaneVector 1
    -
    96 
    -
    97  // Reflect functions seem to don't work
    -
    98  //template <typename T> detail::tmat3x3<T, P> reflect2D(const detail::tmat3x3<T, P> & m, const detail::tvec3<T, P>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
    -
    99  //template <typename T> detail::tmat4x4<T, P> reflect3D(const detail::tmat4x4<T, P> & m, const detail::tvec3<T, P>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
    -
    100 
    -
    103  template <typename T, precision P>
    -
    104  detail::tmat3x3<T, P> proj2D(
    -
    105  const detail::tmat3x3<T, P> & m,
    -
    106  const detail::tvec3<T, P>& normal);
    -
    107 
    -
    110  template <typename T, precision P>
    -
    111  detail::tmat4x4<T, P> proj3D(
    -
    112  const detail::tmat4x4<T, P> & m,
    -
    113  const detail::tvec3<T, P>& normal);
    -
    114 
    -
    117  template <typename valType, precision P>
    -
    118  detail::tmat4x4<valType, P> scaleBias(
    -
    119  valType scale,
    -
    120  valType bias);
    -
    121 
    -
    124  template <typename valType, precision P>
    -
    125  detail::tmat4x4<valType, P> scaleBias(
    -
    126  detail::tmat4x4<valType, P> const & m,
    -
    127  valType scale,
    -
    128  valType bias);
    -
    129 
    -
    131 }// namespace glm
    -
    132 
    -
    133 #include "transform2.inl"
    -
    134 
    -
    135 #endif//GLM_GTX_transform2
    -
    detail::tmat4x4< valType, P > scaleBias(valType scale, valType bias)
    Build a scale bias matrix.
    -
    detail::tmat3x3< T, P > shearX2D(detail::tmat3x3< T, P > const &m, T y)
    Transforms a matrix with a shearing on X axis.
    -
    detail::tmat3x3< T, P > proj2D(const detail::tmat3x3< T, P > &m, const detail::tvec3< T, P > &normal)
    Build planar projection matrix along normal axis.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, P > scale(detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
    Builds a scale 4 * 4 matrix created from 3 scalars.
    -
    detail::tmat4x4< T, P > shearY3D(const detail::tmat4x4< T, P > &m, T x, T z)
    Transforms a matrix with a shearing on Y axis.
    -
    detail::tmat4x4< T, P > proj3D(const detail::tmat4x4< T, P > &m, const detail::tvec3< T, P > &normal)
    Build planar projection matrix along normal axis.
    -
    detail::tmat4x4< T, P > shearZ3D(const detail::tmat4x4< T, P > &m, T x, T y)
    Transforms a matrix with a shearing on Z axis.
    -
    detail::tmat3x3< T, P > shearY2D(detail::tmat3x3< T, P > const &m, T x)
    Transforms a matrix with a shearing on Y axis.
    -
    detail::tmat4x4< T, P > shearX3D(const detail::tmat4x4< T, P > &m, T y, T z)
    Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.
    +
    29 #pragma once
    +
    30 
    +
    31 #include "setup.hpp"
    +
    32 
    +
    33 namespace glm{
    +
    34 namespace detail
    +
    35 {
    +
    36  typedef float float32;
    +
    37  typedef double float64;
    +
    38 }//namespace detail
    +
    39 
    +
    40  typedef float lowp_float_t;
    +
    41  typedef float mediump_float_t;
    +
    42  typedef double highp_float_t;
    +
    43 
    +
    46 
    +
    52  typedef lowp_float_t lowp_float;
    +
    53 
    +
    59  typedef mediump_float_t mediump_float;
    +
    60 
    +
    66  typedef highp_float_t highp_float;
    +
    67 
    +
    68 #if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    69  typedef mediump_float float_t;
    +
    70 #elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    71  typedef highp_float float_t;
    +
    72 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    +
    73  typedef mediump_float float_t;
    +
    74 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
    +
    75  typedef lowp_float float_t;
    +
    76 #else
    +
    77 # error "GLM error: multiple default precision requested for floating-point types"
    +
    78 #endif
    +
    79 
    +
    80  typedef float float32;
    +
    81  typedef double float64;
    +
    82 
    +
    84 // check type sizes
    +
    85 #ifndef GLM_STATIC_ASSERT_NULL
    +
    86  GLM_STATIC_ASSERT(sizeof(glm::float32) == 4, "float32 size isn't 4 bytes on this platform");
    +
    87  GLM_STATIC_ASSERT(sizeof(glm::float64) == 8, "float64 size isn't 8 bytes on this platform");
    +
    88 #endif//GLM_STATIC_ASSERT_NULL
    +
    89 
    +
    91 
    +
    92 }//namespace glm
    +
    highp_float_t highp_float
    High precision floating-point numbers.
    Definition: type_float.hpp:66
    +
    double float64
    Default 64 bit double-precision floating-point scalar.
    Definition: type_float.hpp:81
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    lowp_float_t lowp_float
    Low precision floating-point numbers.
    Definition: type_float.hpp:52
    +
    float float32
    Default 32 bit single-precision floating-point scalar.
    Definition: type_float.hpp:80
    +
    mediump_float_t mediump_float
    Medium precision floating-point numbers.
    Definition: type_float.hpp:59
    diff --git a/doc/api/a00117.html b/doc/api/a00117.html index 6449c4b8..0deb346c 100644 --- a/doc/api/a00117.html +++ b/doc/api/a00117.html @@ -3,8 +3,8 @@ - -GLM: trigonometric.hpp File Reference + +0.9.6: type_gentype.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,12 +41,12 @@
    -
    trigonometric.hpp File Reference
    +
    type_gentype.hpp File Reference
    @@ -58,17 +56,17 @@

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    +

    GLM Core

    +
    Date
    2008-10-05 / 2011-06-15
    Author
    Christophe Riccio
    -

    Definition in file trigonometric.hpp.

    +

    Definition in file type_gentype.hpp.

    diff --git a/doc/api/a00117_source.html b/doc/api/a00117_source.html index 94a51a1d..1bdb1c2a 100644 --- a/doc/api/a00117_source.html +++ b/doc/api/a00117_source.html @@ -3,8 +3,8 @@ - -GLM: trigonometric.hpp Source File + +0.9.6: type_gentype.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,208 @@
    -
    trigonometric.hpp
    +
    type_gentype.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_TRIGONOMETRIC_INCLUDED
    -
    30 #define GLM_TRIGONOMETRIC_INCLUDED
    -
    31 
    -
    32 #include "detail/func_trigonometric.hpp"
    -
    33 
    -
    34 #endif//GLM_TRIGONOMETRIC_INCLUDED
    +
    29 #pragma once
    +
    30 
    +
    31 namespace glm
    +
    32 {
    +
    33  enum profile
    +
    34  {
    +
    35  nice,
    +
    36  fast,
    +
    37  simd
    +
    38  };
    +
    39 
    +
    40  typedef std::size_t sizeType;
    +
    41 
    +
    42 namespace detail
    +
    43 {
    +
    44  template
    +
    45  <
    +
    46  typename VALTYPE,
    +
    47  template <typename> class TYPE
    +
    48  >
    +
    49  struct genType
    +
    50  {
    +
    51  public:
    +
    52  enum ctor{null};
    +
    53 
    +
    54  typedef VALTYPE value_type;
    +
    55  typedef VALTYPE & value_reference;
    +
    56  typedef VALTYPE * value_pointer;
    +
    57  typedef VALTYPE const * value_const_pointer;
    +
    58  typedef TYPE<bool> bool_type;
    +
    59 
    +
    60  typedef sizeType size_type;
    +
    61  static bool is_vector();
    +
    62  static bool is_matrix();
    +
    63 
    +
    64  typedef TYPE<VALTYPE> type;
    +
    65  typedef TYPE<VALTYPE> * pointer;
    +
    66  typedef TYPE<VALTYPE> const * const_pointer;
    +
    67  typedef TYPE<VALTYPE> const * const const_pointer_const;
    +
    68  typedef TYPE<VALTYPE> * const pointer_const;
    +
    69  typedef TYPE<VALTYPE> & reference;
    +
    70  typedef TYPE<VALTYPE> const & const_reference;
    +
    71  typedef TYPE<VALTYPE> const & param_type;
    +
    72 
    +
    74  // Address (Implementation details)
    +
    75 
    +
    76  value_const_pointer value_address() const{return value_pointer(this);}
    +
    77  value_pointer value_address(){return value_pointer(this);}
    +
    78 
    +
    79  //protected:
    +
    80  // enum kind
    +
    81  // {
    +
    82  // GEN_TYPE,
    +
    83  // VEC_TYPE,
    +
    84  // MAT_TYPE
    +
    85  // };
    +
    86 
    +
    87  // typedef typename TYPE::kind kind;
    +
    88  };
    +
    89 
    +
    90  template
    +
    91  <
    +
    92  typename VALTYPE,
    +
    93  template <typename> class TYPE
    +
    94  >
    +
    95  bool genType<VALTYPE, TYPE>::is_vector()
    +
    96  {
    +
    97  return true;
    +
    98  }
    +
    99 /*
    +
    100  template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
    +
    101  class base
    +
    102  {
    +
    103  public:
    +
    105  // Traits
    +
    106 
    +
    107  typedef sizeType size_type;
    +
    108  typedef valTypeT value_type;
    +
    109 
    +
    110  typedef base<value_type, colT, rowT> class_type;
    +
    111 
    +
    112  typedef base<bool, colT, rowT> bool_type;
    +
    113  typedef base<value_type, rowT, 1> col_type;
    +
    114  typedef base<value_type, colT, 1> row_type;
    +
    115  typedef base<value_type, rowT, colT> transpose_type;
    +
    116 
    +
    117  static size_type col_size();
    +
    118  static size_type row_size();
    +
    119  static size_type value_size();
    +
    120  static bool is_scalar();
    +
    121  static bool is_vector();
    +
    122  static bool is_matrix();
    +
    123 
    +
    124  private:
    +
    125  // Data
    +
    126  col_type value[colT];
    +
    127 
    +
    128  public:
    +
    130  // Constructors
    +
    131  base();
    +
    132  base(class_type const & m);
    +
    133 
    +
    134  explicit base(T const & x);
    +
    135  explicit base(value_type const * const x);
    +
    136  explicit base(col_type const * const x);
    +
    137 
    +
    139  // Conversions
    +
    140  template <typename vU, uint cU, uint rU, profile pU>
    +
    141  explicit base(base<vU, cU, rU, pU> const & m);
    +
    142 
    +
    144  // Accesses
    +
    145  col_type& operator[](size_type i);
    +
    146  col_type const & operator[](size_type i) const;
    +
    147 
    +
    149  // Unary updatable operators
    +
    150  class_type& operator= (class_type const & x);
    +
    151  class_type& operator+= (T const & x);
    +
    152  class_type& operator+= (class_type const & x);
    +
    153  class_type& operator-= (T const & x);
    +
    154  class_type& operator-= (class_type const & x);
    +
    155  class_type& operator*= (T const & x);
    +
    156  class_type& operator*= (class_type const & x);
    +
    157  class_type& operator/= (T const & x);
    +
    158  class_type& operator/= (class_type const & x);
    +
    159  class_type& operator++ ();
    +
    160  class_type& operator-- ();
    +
    161  };
    +
    162 */
    +
    163 
    +
    164  //template <typename T>
    +
    165  //struct traits
    +
    166  //{
    +
    167  // static const bool is_signed = false;
    +
    168  // static const bool is_float = false;
    +
    169  // static const bool is_vector = false;
    +
    170  // static const bool is_matrix = false;
    +
    171  // static const bool is_genType = false;
    +
    172  // static const bool is_genIType = false;
    +
    173  // static const bool is_genUType = false;
    +
    174  //};
    +
    175 
    +
    176  //template <>
    +
    177  //struct traits<half>
    +
    178  //{
    +
    179  // static const bool is_float = true;
    +
    180  // static const bool is_genType = true;
    +
    181  //};
    +
    182 
    +
    183  //template <>
    +
    184  //struct traits<float>
    +
    185  //{
    +
    186  // static const bool is_float = true;
    +
    187  // static const bool is_genType = true;
    +
    188  //};
    +
    189 
    +
    190  //template <>
    +
    191  //struct traits<double>
    +
    192  //{
    +
    193  // static const bool is_float = true;
    +
    194  // static const bool is_genType = true;
    +
    195  //};
    +
    196 
    +
    197  //template <typename genType>
    +
    198  //struct desc
    +
    199  //{
    +
    200  // typedef genType type;
    +
    201  // typedef genType * pointer;
    +
    202  // typedef genType const* const_pointer;
    +
    203  // typedef genType const *const const_pointer_const;
    +
    204  // typedef genType *const pointer_const;
    +
    205  // typedef genType & reference;
    +
    206  // typedef genType const& const_reference;
    +
    207  // typedef genType const& param_type;
    +
    208 
    +
    209  // typedef typename genType::value_type value_type;
    +
    210  // typedef typename genType::size_type size_type;
    +
    211  // static const typename size_type value_size;
    +
    212  //};
    +
    213 
    +
    214  //template <typename genType>
    +
    215  //const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
    +
    216 
    +
    217 }//namespace detail
    +
    218 }//namespace glm
    +
    219 
    +
    220 //#include "type_gentype.inl"
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00118.html b/doc/api/a00118.html new file mode 100644 index 00000000..9251c30b --- /dev/null +++ b/doc/api/a00118.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_half.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_half.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2008-08-17 / 2011-09-20
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_half.hpp.

    +
    + + + + diff --git a/doc/api/a00118_source.html b/doc/api/a00118_source.html index 12eaa785..0d52ed6d 100644 --- a/doc/api/a00118_source.html +++ b/doc/api/a00118_source.html @@ -3,8 +3,8 @@ - -GLM: type_float.hpp Source File + +0.9.6: type_half.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,74 +41,39 @@
    -
    type_float.hpp
    +
    type_half.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_float
    -
    30 #define glm_core_type_float
    -
    31 
    -
    32 #include "setup.hpp"
    -
    33 
    -
    34 namespace glm{
    -
    35 namespace detail
    -
    36 {
    -
    37  typedef float float32;
    -
    38  typedef double float64;
    -
    39 }//namespace detail
    -
    40 
    -
    41  typedef float lowp_float_t;
    -
    42  typedef float mediump_float_t;
    -
    43  typedef double highp_float_t;
    -
    44 
    -
    47 
    -
    53  typedef lowp_float_t lowp_float;
    -
    54 
    -
    60  typedef mediump_float_t mediump_float;
    -
    61 
    -
    67  typedef highp_float_t highp_float;
    -
    68 
    -
    69 #if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -
    70  typedef mediump_float float_t;
    -
    71 #elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -
    72  typedef highp_float float_t;
    -
    73 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
    -
    74  typedef mediump_float float_t;
    -
    75 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
    -
    76  typedef lowp_float float_t;
    -
    77 #else
    -
    78 # error "GLM error: multiple default precision requested for floating-point types"
    -
    79 #endif
    -
    80 
    -
    81  typedef float float32;
    -
    82  typedef double float64;
    -
    83 
    -
    85 // check type sizes
    -
    86 #ifndef GLM_STATIC_ASSERT_NULL
    -
    87  GLM_STATIC_ASSERT(sizeof(glm::float32) == 4, "float32 size isn't 4 bytes on this platform");
    -
    88  GLM_STATIC_ASSERT(sizeof(glm::float64) == 8, "float64 size isn't 8 bytes on this platform");
    -
    89 #endif//GLM_STATIC_ASSERT_NULL
    -
    90 
    -
    92 
    -
    93 }//namespace glm
    -
    94 
    -
    95 #endif//glm_core_type_float
    -
    float float32
    Default 32 bit single-precision floating-point scalar.
    Definition: type_float.hpp:81
    -
    highp_float_t highp_float
    High precision floating-point numbers.
    Definition: type_float.hpp:67
    -
    mediump_float_t mediump_float
    Medium precision floating-point numbers.
    Definition: type_float.hpp:60
    -
    lowp_float_t lowp_float
    Low precision floating-point numbers.
    Definition: type_float.hpp:53
    -
    double float64
    Default 64 bit double-precision floating-point scalar.
    Definition: type_float.hpp:82
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "setup.hpp"
    +
    32 
    +
    33 namespace glm{
    +
    34 namespace detail
    +
    35 {
    +
    36  typedef short hdata;
    +
    37 
    +
    38  GLM_FUNC_DECL float toFloat32(hdata value);
    +
    39  GLM_FUNC_DECL hdata toFloat16(float const & value);
    +
    40 
    +
    41 }//namespace detail
    +
    42 }//namespace glm
    +
    43 
    +
    44 #include "type_half.inl"
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00119.html b/doc/api/a00119.html new file mode 100644 index 00000000..ad6bc371 --- /dev/null +++ b/doc/api/a00119.html @@ -0,0 +1,108 @@ + + + + + + +0.9.6: type_int.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    type_int.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef detail::highp_int_t highp_int
     
    typedef detail::highp_uint_t highp_uint
     
    typedef detail::int16 int16
     
    typedef detail::int32 int32
     
    typedef detail::int64 int64
     
    typedef detail::int8 int8
     
    typedef detail::lowp_int_t lowp_int
     
    typedef detail::lowp_uint_t lowp_uint
     
    typedef detail::mediump_int_t mediump_int
     
    typedef detail::mediump_uint_t mediump_uint
     
    typedef unsigned int uint
     
    typedef detail::uint16 uint16
     
    typedef detail::uint32 uint32
     
    typedef detail::uint64 uint64
     
    typedef detail::uint8 uint8
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2008-08-22 / 2013-03-30
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_int.hpp.

    +
    + + + + diff --git a/doc/api/a00119_source.html b/doc/api/a00119_source.html index 9354b449..cf8ceeeb 100644 --- a/doc/api/a00119_source.html +++ b/doc/api/a00119_source.html @@ -3,8 +3,8 @@ - -GLM: type_gentype.hpp Source File + +0.9.6: type_int.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,210 +41,301 @@
    -
    type_gentype.hpp
    +
    type_int.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_gentype
    -
    30 #define glm_core_type_gentype
    -
    31 
    -
    32 namespace glm
    -
    33 {
    -
    34  enum profile
    -
    35  {
    -
    36  nice,
    -
    37  fast,
    -
    38  simd
    -
    39  };
    -
    40 
    -
    41  typedef std::size_t sizeType;
    -
    42 
    -
    43 namespace detail
    -
    44 {
    -
    45  template
    -
    46  <
    -
    47  typename VALTYPE,
    -
    48  template <typename> class TYPE
    -
    49  >
    -
    50  struct genType
    -
    51  {
    -
    52  public:
    -
    53  enum ctor{null};
    -
    54 
    -
    55  typedef VALTYPE value_type;
    -
    56  typedef VALTYPE & value_reference;
    -
    57  typedef VALTYPE * value_pointer;
    -
    58  typedef VALTYPE const * value_const_pointer;
    -
    59  typedef TYPE<bool> bool_type;
    -
    60 
    -
    61  typedef sizeType size_type;
    -
    62  static bool is_vector();
    -
    63  static bool is_matrix();
    -
    64 
    -
    65  typedef TYPE<VALTYPE> type;
    -
    66  typedef TYPE<VALTYPE> * pointer;
    -
    67  typedef TYPE<VALTYPE> const * const_pointer;
    -
    68  typedef TYPE<VALTYPE> const * const const_pointer_const;
    -
    69  typedef TYPE<VALTYPE> * const pointer_const;
    -
    70  typedef TYPE<VALTYPE> & reference;
    -
    71  typedef TYPE<VALTYPE> const & const_reference;
    -
    72  typedef TYPE<VALTYPE> const & param_type;
    -
    73 
    -
    75  // Address (Implementation details)
    -
    76 
    -
    77  value_const_pointer value_address() const{return value_pointer(this);}
    -
    78  value_pointer value_address(){return value_pointer(this);}
    -
    79 
    -
    80  //protected:
    -
    81  // enum kind
    -
    82  // {
    -
    83  // GEN_TYPE,
    -
    84  // VEC_TYPE,
    -
    85  // MAT_TYPE
    -
    86  // };
    -
    87 
    -
    88  // typedef typename TYPE::kind kind;
    -
    89  };
    -
    90 
    -
    91  template
    -
    92  <
    -
    93  typename VALTYPE,
    -
    94  template <typename> class TYPE
    -
    95  >
    -
    96  bool genType<VALTYPE, TYPE>::is_vector()
    -
    97  {
    -
    98  return true;
    -
    99  }
    -
    100 /*
    -
    101  template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
    -
    102  class base
    -
    103  {
    -
    104  public:
    -
    106  // Traits
    -
    107 
    -
    108  typedef sizeType size_type;
    -
    109  typedef valTypeT value_type;
    -
    110 
    -
    111  typedef base<value_type, colT, rowT> class_type;
    -
    112 
    -
    113  typedef base<bool, colT, rowT> bool_type;
    -
    114  typedef base<value_type, rowT, 1> col_type;
    -
    115  typedef base<value_type, colT, 1> row_type;
    -
    116  typedef base<value_type, rowT, colT> transpose_type;
    -
    117 
    -
    118  static size_type col_size();
    -
    119  static size_type row_size();
    -
    120  static size_type value_size();
    -
    121  static bool is_scalar();
    -
    122  static bool is_vector();
    -
    123  static bool is_matrix();
    -
    124 
    -
    125  private:
    -
    126  // Data
    -
    127  col_type value[colT];
    -
    128 
    -
    129  public:
    -
    131  // Constructors
    -
    132  base();
    -
    133  base(class_type const & m);
    -
    134 
    -
    135  explicit base(T const & x);
    -
    136  explicit base(value_type const * const x);
    -
    137  explicit base(col_type const * const x);
    -
    138 
    -
    140  // Conversions
    -
    141  template <typename vU, uint cU, uint rU, profile pU>
    -
    142  explicit base(base<vU, cU, rU, pU> const & m);
    -
    143 
    -
    145  // Accesses
    -
    146  col_type& operator[](size_type i);
    -
    147  col_type const & operator[](size_type i) const;
    -
    148 
    -
    150  // Unary updatable operators
    -
    151  class_type& operator= (class_type const & x);
    -
    152  class_type& operator+= (T const & x);
    -
    153  class_type& operator+= (class_type const & x);
    -
    154  class_type& operator-= (T const & x);
    -
    155  class_type& operator-= (class_type const & x);
    -
    156  class_type& operator*= (T const & x);
    -
    157  class_type& operator*= (class_type const & x);
    -
    158  class_type& operator/= (T const & x);
    -
    159  class_type& operator/= (class_type const & x);
    -
    160  class_type& operator++ ();
    -
    161  class_type& operator-- ();
    -
    162  };
    -
    163 */
    -
    164 
    -
    165  //template <typename T>
    -
    166  //struct traits
    -
    167  //{
    -
    168  // static const bool is_signed = false;
    -
    169  // static const bool is_float = false;
    -
    170  // static const bool is_vector = false;
    -
    171  // static const bool is_matrix = false;
    -
    172  // static const bool is_genType = false;
    -
    173  // static const bool is_genIType = false;
    -
    174  // static const bool is_genUType = false;
    -
    175  //};
    -
    176 
    -
    177  //template <>
    -
    178  //struct traits<half>
    -
    179  //{
    -
    180  // static const bool is_float = true;
    -
    181  // static const bool is_genType = true;
    -
    182  //};
    -
    183 
    -
    184  //template <>
    -
    185  //struct traits<float>
    -
    186  //{
    -
    187  // static const bool is_float = true;
    -
    188  // static const bool is_genType = true;
    -
    189  //};
    -
    190 
    -
    191  //template <>
    -
    192  //struct traits<double>
    -
    193  //{
    -
    194  // static const bool is_float = true;
    -
    195  // static const bool is_genType = true;
    -
    196  //};
    -
    197 
    -
    198  //template <typename genType>
    -
    199  //struct desc
    -
    200  //{
    -
    201  // typedef genType type;
    -
    202  // typedef genType * pointer;
    -
    203  // typedef genType const* const_pointer;
    -
    204  // typedef genType const *const const_pointer_const;
    -
    205  // typedef genType *const pointer_const;
    -
    206  // typedef genType & reference;
    -
    207  // typedef genType const& const_reference;
    -
    208  // typedef genType const& param_type;
    -
    209 
    -
    210  // typedef typename genType::value_type value_type;
    -
    211  // typedef typename genType::size_type size_type;
    -
    212  // static const typename size_type value_size;
    -
    213  //};
    -
    214 
    -
    215  //template <typename genType>
    -
    216  //const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
    -
    217 
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "setup.hpp"
    +
    32 #include <type_traits>
    +
    33 
    +
    34 #if GLM_HAS_EXTENDED_INTEGER_TYPE
    +
    35 # include <cstdint>
    +
    36 #endif
    +
    37 
    +
    38 namespace glm{
    +
    39 namespace detail
    +
    40 {
    +
    41 # if GLM_HAS_EXTENDED_INTEGER_TYPE
    +
    42  typedef std::int8_t int8;
    +
    43  typedef std::int16_t int16;
    +
    44  typedef std::int32_t int32;
    +
    45  typedef std::int64_t int64;
    +
    46 
    +
    47  typedef std::uint8_t uint8;
    +
    48  typedef std::uint16_t uint16;
    +
    49  typedef std::uint32_t uint32;
    +
    50  typedef std::uint64_t uint64;
    +
    51 # else
    +
    52 # if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available
    +
    53  typedef int64_t sint64;
    +
    54  typedef uint64_t uint64;
    +
    55 # elif GLM_COMPILER & GLM_COMPILER_VC
    +
    56  typedef signed __int64 sint64;
    +
    57  typedef unsigned __int64 uint64;
    +
    58 # elif GLM_COMPILER & GLM_COMPILER_GCC
    +
    59  __extension__ typedef signed long long sint64;
    +
    60  __extension__ typedef unsigned long long uint64;
    +
    61 # else//unknown compiler
    +
    62  typedef signed long long sint64;
    +
    63  typedef unsigned long long uint64;
    +
    64 # endif//GLM_COMPILER
    +
    65 
    +
    66  typedef signed char int8;
    +
    67  typedef signed short int16;
    +
    68  typedef signed int int32;
    +
    69  typedef sint64 int64;
    +
    70 
    +
    71  typedef unsigned char uint8;
    +
    72  typedef unsigned short uint16;
    +
    73  typedef unsigned int uint32;
    +
    74  typedef uint64 uint64;
    +
    75 #endif//
    +
    76 
    +
    77  typedef signed int lowp_int_t;
    +
    78  typedef signed int mediump_int_t;
    +
    79  typedef signed int highp_int_t;
    +
    80 
    +
    81  typedef unsigned int lowp_uint_t;
    +
    82  typedef unsigned int mediump_uint_t;
    +
    83  typedef unsigned int highp_uint_t;
    +
    84 
    +
    85 # if GLM_HAS_MAKE_SIGNED
    +
    86  using std::make_signed;
    +
    87  using std::make_unsigned;
    +
    88 
    +
    89 # else//GLM_HAS_MAKE_SIGNED
    +
    90  template <typename genType>
    +
    91  struct make_signed
    +
    92  {};
    +
    93 
    +
    94  template <>
    +
    95  struct make_signed<char>
    +
    96  {
    +
    97  typedef char type;
    +
    98  };
    +
    99 
    +
    100  template <>
    +
    101  struct make_signed<short>
    +
    102  {
    +
    103  typedef short type;
    +
    104  };
    +
    105 
    +
    106  template <>
    +
    107  struct make_signed<int>
    +
    108  {
    +
    109  typedef int type;
    +
    110  };
    +
    111 
    +
    112  template <>
    +
    113  struct make_signed<long>
    +
    114  {
    +
    115  typedef long type;
    +
    116  };
    +
    117 
    +
    118  template <>
    +
    119  struct make_signed<long long>
    +
    120  {
    +
    121  typedef long long type;
    +
    122  };
    +
    123 
    +
    124  template <>
    +
    125  struct make_signed<unsigned char>
    +
    126  {
    +
    127  typedef char type;
    +
    128  };
    +
    129 
    +
    130  template <>
    +
    131  struct make_signed<unsigned short>
    +
    132  {
    +
    133  typedef short type;
    +
    134  };
    +
    135 
    +
    136  template <>
    +
    137  struct make_signed<unsigned int>
    +
    138  {
    +
    139  typedef int type;
    +
    140  };
    +
    141 
    +
    142  template <>
    +
    143  struct make_signed<unsigned long>
    +
    144  {
    +
    145  typedef long type;
    +
    146  };
    +
    147 
    +
    148  template <>
    +
    149  struct make_signed<unsigned long long>
    +
    150  {
    +
    151  typedef long long type;
    +
    152  };
    +
    153 
    +
    154  template <typename genType>
    +
    155  struct make_unsigned
    +
    156  {};
    +
    157 
    +
    158  template <>
    +
    159  struct make_unsigned<char>
    +
    160  {
    +
    161  typedef unsigned char type;
    +
    162  };
    +
    163 
    +
    164  template <>
    +
    165  struct make_unsigned<short>
    +
    166  {
    +
    167  typedef unsigned short type;
    +
    168  };
    +
    169 
    +
    170  template <>
    +
    171  struct make_unsigned<int>
    +
    172  {
    +
    173  typedef unsigned int type;
    +
    174  };
    +
    175 
    +
    176  template <>
    +
    177  struct make_unsigned<long>
    +
    178  {
    +
    179  typedef unsigned long type;
    +
    180  };
    +
    181 
    +
    182  template <>
    +
    183  struct make_unsigned<long long>
    +
    184  {
    +
    185  typedef unsigned long long type;
    +
    186  };
    +
    187 
    +
    188  template <>
    +
    189  struct make_unsigned<unsigned char>
    +
    190  {
    +
    191  typedef unsigned char type;
    +
    192  };
    +
    193 
    +
    194  template <>
    +
    195  struct make_unsigned<unsigned short>
    +
    196  {
    +
    197  typedef unsigned short type;
    +
    198  };
    +
    199 
    +
    200  template <>
    +
    201  struct make_unsigned<unsigned int>
    +
    202  {
    +
    203  typedef unsigned int type;
    +
    204  };
    +
    205 
    +
    206  template <>
    +
    207  struct make_unsigned<unsigned long>
    +
    208  {
    +
    209  typedef unsigned long type;
    +
    210  };
    +
    211 
    +
    212  template <>
    +
    213  struct make_unsigned<unsigned long long>
    +
    214  {
    +
    215  typedef unsigned long long type;
    +
    216  };
    +
    217 # endif//GLM_HAS_MAKE_SIGNED
    218 }//namespace detail
    -
    219 }//namespace glm
    -
    220 
    -
    221 //#include "type_gentype.inl"
    -
    222 
    -
    223 #endif//glm_core_type_gentype
    +
    219 
    +
    220  typedef detail::int8 int8;
    +
    221  typedef detail::int16 int16;
    +
    222  typedef detail::int32 int32;
    +
    223  typedef detail::int64 int64;
    +
    224 
    +
    225  typedef detail::uint8 uint8;
    +
    226  typedef detail::uint16 uint16;
    +
    227  typedef detail::uint32 uint32;
    +
    228  typedef detail::uint64 uint64;
    +
    229 
    +
    232 
    +
    238  typedef detail::lowp_int_t lowp_int;
    +
    239 
    +
    245  typedef detail::mediump_int_t mediump_int;
    +
    246 
    +
    252  typedef detail::highp_int_t highp_int;
    +
    253 
    +
    259  typedef detail::lowp_uint_t lowp_uint;
    +
    260 
    +
    266  typedef detail::mediump_uint_t mediump_uint;
    +
    267 
    +
    273  typedef detail::highp_uint_t highp_uint;
    +
    274 
    +
    275 #if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    +
    276  typedef mediump_int int_t;
    +
    277 #elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    +
    278  typedef highp_int int_t;
    +
    279 #elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    +
    280  typedef mediump_int int_t;
    +
    281 #elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))
    +
    282  typedef lowp_int int_t;
    +
    283 #else
    +
    284 # error "GLM error: multiple default precision requested for signed interger types"
    +
    285 #endif
    +
    286 
    +
    287 #if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    +
    288  typedef mediump_uint uint_t;
    +
    289 #elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    +
    290  typedef highp_uint uint_t;
    +
    291 #elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    +
    292  typedef mediump_uint uint_t;
    +
    293 #elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))
    +
    294  typedef lowp_uint uint_t;
    +
    295 #else
    +
    296 # error "GLM error: multiple default precision requested for unsigned interger types"
    +
    297 #endif
    +
    298 
    +
    302  typedef unsigned int uint;
    +
    303 
    +
    305 
    +
    307 // check type sizes
    +
    308 #ifndef GLM_STATIC_ASSERT_NULL
    +
    309  GLM_STATIC_ASSERT(sizeof(glm::int8) == 1, "int8 size isn't 1 byte on this platform");
    +
    310  GLM_STATIC_ASSERT(sizeof(glm::int16) == 2, "int16 size isn't 2 bytes on this platform");
    +
    311  GLM_STATIC_ASSERT(sizeof(glm::int32) == 4, "int32 size isn't 4 bytes on this platform");
    +
    312  GLM_STATIC_ASSERT(sizeof(glm::int64) == 8, "int64 size isn't 8 bytes on this platform");
    +
    313 
    +
    314  GLM_STATIC_ASSERT(sizeof(glm::uint8) == 1, "uint8 size isn't 1 byte on this platform");
    +
    315  GLM_STATIC_ASSERT(sizeof(glm::uint16) == 2, "uint16 size isn't 2 bytes on this platform");
    +
    316  GLM_STATIC_ASSERT(sizeof(glm::uint32) == 4, "uint32 size isn't 4 bytes on this platform");
    +
    317  GLM_STATIC_ASSERT(sizeof(glm::uint64) == 8, "uint64 size isn't 8 bytes on this platform");
    +
    318 #endif//GLM_STATIC_ASSERT_NULL
    +
    319 
    +
    320 }//namespace glm
    +
    detail::int16 int16_t
    16 bit signed integer type.
    Definition: fwd.hpp:300
    +
    detail::int64 int64_t
    64 bit signed integer type.
    Definition: fwd.hpp:308
    +
    detail::mediump_int_t mediump_int
    Medium precision signed integer.
    Definition: type_int.hpp:245
    +
    detail::int8 int8
    8 bit signed integer type.
    Definition: type_int.hpp:220
    +
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:302
    +
    detail::lowp_uint_t lowp_uint
    Low precision unsigned integer.
    Definition: type_int.hpp:259
    +
    detail::highp_int_t highp_int
    High precision signed integer.
    Definition: type_int.hpp:252
    +
    detail::uint8 uint8_t
    8 bit unsigned integer type.
    Definition: fwd.hpp:905
    +
    detail::int16 int16
    16 bit signed integer type.
    Definition: type_int.hpp:221
    +
    detail::int64 int64
    64 bit signed integer type.
    Definition: type_int.hpp:223
    +
    detail::int8 int8_t
    8 bit signed integer type.
    Definition: fwd.hpp:296
    +
    detail::uint16 uint16
    16 bit unsigned integer type.
    Definition: type_int.hpp:226
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    detail::lowp_int_t lowp_int
    Low precision signed integer.
    Definition: type_int.hpp:238
    +
    detail::uint64 uint64
    64 bit unsigned integer type.
    Definition: type_int.hpp:228
    +
    detail::uint8 uint8
    8 bit unsigned integer type.
    Definition: type_int.hpp:225
    +
    detail::uint32 uint32
    32 bit unsigned integer type.
    Definition: type_int.hpp:227
    +
    detail::uint32 uint32_t
    32 bit unsigned integer type.
    Definition: fwd.hpp:913
    +
    detail::int32 int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:304
    +
    detail::uint64 uint64_t
    64 bit unsigned integer type.
    Definition: fwd.hpp:917
    +
    detail::mediump_uint_t mediump_uint
    Medium precision unsigned integer.
    Definition: type_int.hpp:266
    +
    detail::uint16 uint16_t
    16 bit unsigned integer type.
    Definition: fwd.hpp:909
    +
    detail::highp_uint_t highp_uint
    High precision unsigned integer.
    Definition: type_int.hpp:273
    +
    detail::int32 int32
    32 bit signed integer type.
    Definition: type_int.hpp:222
    diff --git a/doc/api/a00120.html b/doc/api/a00120.html new file mode 100644 index 00000000..5f0cac00 --- /dev/null +++ b/doc/api/a00120.html @@ -0,0 +1,270 @@ + + + + + + +0.9.6: type_mat.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    type_mat.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef highp_dmat2x2 dmat2
     
    typedef highp_dmat2x2 dmat2x2
     
    typedef highp_dmat2x3 dmat2x3
     
    typedef highp_dmat2x4 dmat2x4
     
    typedef highp_dmat3x3 dmat3
     
    typedef highp_dmat3x2 dmat3x2
     
    typedef highp_dmat3x3 dmat3x3
     
    typedef highp_dmat3x4 dmat3x4
     
    typedef highp_dmat4x4 dmat4
     
    typedef highp_dmat4x2 dmat4x2
     
    typedef highp_dmat4x3 dmat4x3
     
    typedef highp_dmat4x4 dmat4x4
     
    typedef tmat2x2< double, highp > highp_dmat2
     
    typedef tmat2x2< double, highp > highp_dmat2x2
     
    typedef tmat2x3< double, highp > highp_dmat2x3
     
    typedef tmat2x4< double, highp > highp_dmat2x4
     
    typedef tmat3x3< double, highp > highp_dmat3
     
    typedef tmat3x2< double, highp > highp_dmat3x2
     
    typedef tmat3x3< double, highp > highp_dmat3x3
     
    typedef tmat3x4< double, highp > highp_dmat3x4
     
    typedef tmat4x4< double, highp > highp_dmat4
     
    typedef tmat4x2< double, highp > highp_dmat4x2
     
    typedef tmat4x3< double, highp > highp_dmat4x3
     
    typedef tmat4x4< double, highp > highp_dmat4x4
     
    typedef tmat2x2< float, highp > highp_mat2
     
    typedef tmat2x2< float, highp > highp_mat2x2
     
    typedef tmat2x3< float, highp > highp_mat2x3
     
    typedef tmat2x4< float, highp > highp_mat2x4
     
    typedef tmat3x3< float, highp > highp_mat3
     
    typedef tmat3x2< float, highp > highp_mat3x2
     
    typedef tmat3x3< float, highp > highp_mat3x3
     
    typedef tmat3x4< float, highp > highp_mat3x4
     
    typedef tmat4x4< float, highp > highp_mat4
     
    typedef tmat4x2< float, highp > highp_mat4x2
     
    typedef tmat4x3< float, highp > highp_mat4x3
     
    typedef tmat4x4< float, highp > highp_mat4x4
     
    typedef tmat2x2< double, lowp > lowp_dmat2
     
    typedef tmat2x2< double, lowp > lowp_dmat2x2
     
    typedef tmat2x3< double, lowp > lowp_dmat2x3
     
    typedef tmat2x4< double, lowp > lowp_dmat2x4
     
    typedef tmat3x3< float, lowp > lowp_dmat3
     
    typedef tmat3x2< double, lowp > lowp_dmat3x2
     
    typedef tmat3x3< double, lowp > lowp_dmat3x3
     
    typedef tmat3x4< double, lowp > lowp_dmat3x4
     
    typedef tmat4x4< double, lowp > lowp_dmat4
     
    typedef tmat4x2< double, lowp > lowp_dmat4x2
     
    typedef tmat4x3< double, lowp > lowp_dmat4x3
     
    typedef tmat4x4< double, lowp > lowp_dmat4x4
     
    typedef tmat2x2< float, lowp > lowp_mat2
     
    typedef tmat2x2< float, lowp > lowp_mat2x2
     
    typedef tmat2x3< float, lowp > lowp_mat2x3
     
    typedef tmat2x4< float, lowp > lowp_mat2x4
     
    typedef tmat3x3< float, lowp > lowp_mat3
     
    typedef tmat3x2< float, lowp > lowp_mat3x2
     
    typedef tmat3x3< float, lowp > lowp_mat3x3
     
    typedef tmat3x4< float, lowp > lowp_mat3x4
     
    typedef tmat4x4< float, lowp > lowp_mat4
     
    typedef tmat4x2< float, lowp > lowp_mat4x2
     
    typedef tmat4x3< float, lowp > lowp_mat4x3
     
    typedef tmat4x4< float, lowp > lowp_mat4x4
     
    typedef mat2x2 mat2
     
    typedef highp_mat2x2 mat2x2
     
    typedef highp_mat2x3 mat2x3
     
    typedef highp_mat2x4 mat2x4
     
    typedef mat3x3 mat3
     
    typedef highp_mat3x2 mat3x2
     
    typedef highp_mat3x3 mat3x3
     
    typedef highp_mat3x4 mat3x4
     
    typedef mat4x4 mat4
     
    typedef highp_mat4x2 mat4x2
     
    typedef highp_mat4x3 mat4x3
     
    typedef highp_mat4x4 mat4x4
     
    typedef tmat2x2< double, mediump > mediump_dmat2
     
    typedef tmat2x2< double, mediump > mediump_dmat2x2
     
    typedef tmat2x3< double, mediump > mediump_dmat2x3
     
    typedef tmat2x4< double, mediump > mediump_dmat2x4
     
    typedef tmat3x3< double, mediump > mediump_dmat3
     
    typedef tmat3x2< double, mediump > mediump_dmat3x2
     
    typedef tmat3x3< double, mediump > mediump_dmat3x3
     
    typedef tmat3x4< double, mediump > mediump_dmat3x4
     
    typedef tmat4x4< double, mediump > mediump_dmat4
     
    typedef tmat4x2< double, mediump > mediump_dmat4x2
     
    typedef tmat4x3< double, mediump > mediump_dmat4x3
     
    typedef tmat4x4< double, mediump > mediump_dmat4x4
     
    typedef tmat2x2< float, mediump > mediump_mat2
     
    typedef tmat2x2< float, mediump > mediump_mat2x2
     
    typedef tmat2x3< float, mediump > mediump_mat2x3
     
    typedef tmat2x4< float, mediump > mediump_mat2x4
     
    typedef tmat3x3< float, mediump > mediump_mat3
     
    typedef tmat3x2< float, mediump > mediump_mat3x2
     
    typedef tmat3x3< float, mediump > mediump_mat3x3
     
    typedef tmat3x4< float, mediump > mediump_mat3x4
     
    typedef tmat4x4< float, mediump > mediump_mat4
     
    typedef tmat4x2< float, mediump > mediump_mat4x2
     
    typedef tmat4x3< float, mediump > mediump_mat4x3
     
    typedef tmat4x4< float, mediump > mediump_mat4x4
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2010-01-26 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat.hpp.

    +
    + + + + diff --git a/doc/api/a00120_source.html b/doc/api/a00120_source.html index 51802882..57cece76 100644 --- a/doc/api/a00120_source.html +++ b/doc/api/a00120_source.html @@ -3,8 +3,8 @@ - -GLM: type_half.hpp Source File + +0.9.6: type_mat.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,43 +41,425 @@
    -
    type_half.hpp
    +
    type_mat.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_half
    -
    30 #define glm_core_type_half
    -
    31 
    -
    32 #include "setup.hpp"
    -
    33 
    -
    34 namespace glm{
    -
    35 namespace detail
    -
    36 {
    -
    37  typedef short hdata;
    -
    38 
    -
    39  GLM_FUNC_DECL float toFloat32(hdata value);
    -
    40  GLM_FUNC_DECL hdata toFloat16(float const & value);
    -
    41 
    -
    42 }//namespace detail
    -
    43 
    -
    45  //typedef detail::hdata half;
    -
    46 
    -
    47 }//namespace glm
    -
    48 
    -
    49 #include "type_half.inl"
    -
    50 
    -
    51 #endif//glm_core_type_half
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "precision.hpp"
    +
    32 
    +
    33 namespace glm{
    +
    34 namespace detail
    +
    35 {
    +
    36  template <typename T, precision P, template <class, precision> class colType, template <class, precision> class rowType>
    +
    37  struct outerProduct_trait{};
    +
    38 }//namespace detail
    +
    39 
    +
    40  template <typename T, precision P> struct tvec2;
    +
    41  template <typename T, precision P> struct tvec3;
    +
    42  template <typename T, precision P> struct tvec4;
    +
    43  template <typename T, precision P> struct tmat2x2;
    +
    44  template <typename T, precision P> struct tmat2x3;
    +
    45  template <typename T, precision P> struct tmat2x4;
    +
    46  template <typename T, precision P> struct tmat3x2;
    +
    47  template <typename T, precision P> struct tmat3x3;
    +
    48  template <typename T, precision P> struct tmat3x4;
    +
    49  template <typename T, precision P> struct tmat4x2;
    +
    50  template <typename T, precision P> struct tmat4x3;
    +
    51  template <typename T, precision P> struct tmat4x4;
    +
    52 
    +
    55 
    +
    61  typedef tmat2x2<float, lowp> lowp_mat2;
    +
    62 
    +
    68  typedef tmat2x2<float, mediump> mediump_mat2;
    +
    69 
    +
    75  typedef tmat2x2<float, highp> highp_mat2;
    +
    76 
    +
    82  typedef tmat2x2<float, lowp> lowp_mat2x2;
    +
    83 
    +
    89  typedef tmat2x2<float, mediump> mediump_mat2x2;
    +
    90 
    +
    96  typedef tmat2x2<float, highp> highp_mat2x2;
    +
    97 
    +
    99 
    +
    102 
    +
    108  typedef tmat2x3<float, lowp> lowp_mat2x3;
    +
    109 
    +
    115  typedef tmat2x3<float, mediump> mediump_mat2x3;
    +
    116 
    +
    122  typedef tmat2x3<float, highp> highp_mat2x3;
    +
    123 
    +
    125 
    +
    128 
    +
    134  typedef tmat2x4<float, lowp> lowp_mat2x4;
    +
    135 
    +
    141  typedef tmat2x4<float, mediump> mediump_mat2x4;
    +
    142 
    +
    148  typedef tmat2x4<float, highp> highp_mat2x4;
    +
    149 
    +
    151 
    +
    154 
    +
    160  typedef tmat3x2<float, lowp> lowp_mat3x2;
    +
    161 
    +
    167  typedef tmat3x2<float, mediump> mediump_mat3x2;
    +
    168 
    +
    174  typedef tmat3x2<float, highp> highp_mat3x2;
    +
    175 
    +
    177 
    +
    180 
    +
    186  typedef tmat3x3<float, lowp> lowp_mat3;
    +
    187 
    +
    193  typedef tmat3x3<float, mediump> mediump_mat3;
    +
    194 
    +
    200  typedef tmat3x3<float, highp> highp_mat3;
    +
    201 
    +
    207  typedef tmat3x3<float, lowp> lowp_mat3x3;
    +
    208 
    +
    214  typedef tmat3x3<float, mediump> mediump_mat3x3;
    +
    215 
    +
    221  typedef tmat3x3<float, highp> highp_mat3x3;
    +
    222 
    +
    224 
    +
    227 
    +
    233  typedef tmat3x4<float, lowp> lowp_mat3x4;
    +
    234 
    +
    240  typedef tmat3x4<float, mediump> mediump_mat3x4;
    +
    241 
    +
    247  typedef tmat3x4<float, highp> highp_mat3x4;
    +
    248 
    +
    250 
    +
    253 
    +
    259  typedef tmat4x2<float, lowp> lowp_mat4x2;
    +
    260 
    +
    266  typedef tmat4x2<float, mediump> mediump_mat4x2;
    +
    267 
    +
    273  typedef tmat4x2<float, highp> highp_mat4x2;
    +
    274 
    +
    276 
    +
    279 
    +
    285  typedef tmat4x3<float, lowp> lowp_mat4x3;
    +
    286 
    +
    292  typedef tmat4x3<float, mediump> mediump_mat4x3;
    +
    293 
    +
    299  typedef tmat4x3<float, highp> highp_mat4x3;
    +
    300 
    +
    302 
    +
    303 
    +
    306 
    +
    312  typedef tmat4x4<float, lowp> lowp_mat4;
    +
    313 
    +
    319  typedef tmat4x4<float, mediump> mediump_mat4;
    +
    320 
    +
    326  typedef tmat4x4<float, highp> highp_mat4;
    +
    327 
    +
    333  typedef tmat4x4<float, lowp> lowp_mat4x4;
    +
    334 
    +
    340  typedef tmat4x4<float, mediump> mediump_mat4x4;
    +
    341 
    +
    347  typedef tmat4x4<float, highp> highp_mat4x4;
    +
    348 
    +
    350 
    +
    353 
    +
    355  // Float definition
    +
    356 
    +
    357 #if(defined(GLM_PRECISION_LOWP_FLOAT))
    +
    358  typedef lowp_mat2x2 mat2x2;
    +
    359  typedef lowp_mat2x3 mat2x3;
    +
    360  typedef lowp_mat2x4 mat2x4;
    +
    361  typedef lowp_mat3x2 mat3x2;
    +
    362  typedef lowp_mat3x3 mat3x3;
    +
    363  typedef lowp_mat3x4 mat3x4;
    +
    364  typedef lowp_mat4x2 mat4x2;
    +
    365  typedef lowp_mat4x3 mat4x3;
    +
    366  typedef lowp_mat4x4 mat4x4;
    +
    367 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    +
    368  typedef mediump_mat2x2 mat2x2;
    +
    369  typedef mediump_mat2x3 mat2x3;
    +
    370  typedef mediump_mat2x4 mat2x4;
    +
    371  typedef mediump_mat3x2 mat3x2;
    +
    372  typedef mediump_mat3x3 mat3x3;
    +
    373  typedef mediump_mat3x4 mat3x4;
    +
    374  typedef mediump_mat4x2 mat4x2;
    +
    375  typedef mediump_mat4x3 mat4x3;
    +
    376  typedef mediump_mat4x4 mat4x4;
    +
    377 #else
    +
    378  typedef highp_mat2x2 mat2x2;
    +
    382 
    +
    386  typedef highp_mat2x3 mat2x3;
    +
    387 
    +
    391  typedef highp_mat2x4 mat2x4;
    +
    392 
    +
    396  typedef highp_mat3x2 mat3x2;
    +
    397 
    +
    401  typedef highp_mat3x3 mat3x3;
    +
    402 
    +
    406  typedef highp_mat3x4 mat3x4;
    +
    407 
    +
    411  typedef highp_mat4x2 mat4x2;
    +
    412 
    +
    416  typedef highp_mat4x3 mat4x3;
    +
    417 
    +
    421  typedef highp_mat4x4 mat4x4;
    +
    422 
    +
    423 #endif//GLM_PRECISION
    +
    424 
    +
    428  typedef mat2x2 mat2;
    +
    429 
    +
    433  typedef mat3x3 mat3;
    +
    434 
    +
    438  typedef mat4x4 mat4;
    +
    439 
    +
    441  // Double definition
    +
    442 
    +
    445 
    +
    450  typedef tmat2x2<double, lowp> lowp_dmat2;
    +
    451 
    +
    456  typedef tmat2x2<double, mediump> mediump_dmat2;
    +
    457 
    +
    462  typedef tmat2x2<double, highp> highp_dmat2;
    +
    463 
    +
    468  typedef tmat2x2<double, lowp> lowp_dmat2x2;
    +
    469 
    +
    474  typedef tmat2x2<double, mediump> mediump_dmat2x2;
    +
    475 
    +
    480  typedef tmat2x2<double, highp> highp_dmat2x2;
    +
    481 
    +
    483 
    +
    486 
    +
    491  typedef tmat2x3<double, lowp> lowp_dmat2x3;
    +
    492 
    +
    497  typedef tmat2x3<double, mediump> mediump_dmat2x3;
    +
    498 
    +
    503  typedef tmat2x3<double, highp> highp_dmat2x3;
    +
    504 
    +
    506 
    +
    509 
    +
    514  typedef tmat2x4<double, lowp> lowp_dmat2x4;
    +
    515 
    +
    520  typedef tmat2x4<double, mediump> mediump_dmat2x4;
    +
    521 
    +
    526  typedef tmat2x4<double, highp> highp_dmat2x4;
    +
    527 
    +
    529 
    +
    532 
    +
    537  typedef tmat3x2<double, lowp> lowp_dmat3x2;
    +
    538 
    +
    543  typedef tmat3x2<double, mediump> mediump_dmat3x2;
    +
    544 
    +
    549  typedef tmat3x2<double, highp> highp_dmat3x2;
    +
    550 
    +
    552 
    +
    555 
    +
    560  typedef tmat3x3<float, lowp> lowp_dmat3;
    +
    561 
    +
    566  typedef tmat3x3<double, mediump> mediump_dmat3;
    +
    567 
    +
    572  typedef tmat3x3<double, highp> highp_dmat3;
    +
    573 
    +
    578  typedef tmat3x3<double, lowp> lowp_dmat3x3;
    +
    579 
    +
    584  typedef tmat3x3<double, mediump> mediump_dmat3x3;
    +
    585 
    +
    590  typedef tmat3x3<double, highp> highp_dmat3x3;
    +
    591 
    +
    593 
    +
    596 
    +
    601  typedef tmat3x4<double, lowp> lowp_dmat3x4;
    +
    602 
    +
    607  typedef tmat3x4<double, mediump> mediump_dmat3x4;
    +
    608 
    +
    613  typedef tmat3x4<double, highp> highp_dmat3x4;
    +
    614 
    +
    616 
    +
    619 
    +
    624  typedef tmat4x2<double, lowp> lowp_dmat4x2;
    +
    625 
    +
    630  typedef tmat4x2<double, mediump> mediump_dmat4x2;
    +
    631 
    +
    636  typedef tmat4x2<double, highp> highp_dmat4x2;
    +
    637 
    +
    639 
    +
    642 
    +
    647  typedef tmat4x3<double, lowp> lowp_dmat4x3;
    +
    648 
    +
    653  typedef tmat4x3<double, mediump> mediump_dmat4x3;
    +
    654 
    +
    659  typedef tmat4x3<double, highp> highp_dmat4x3;
    +
    660 
    +
    662 
    +
    665 
    +
    670  typedef tmat4x4<double, lowp> lowp_dmat4;
    +
    671 
    +
    676  typedef tmat4x4<double, mediump> mediump_dmat4;
    +
    677 
    +
    682  typedef tmat4x4<double, highp> highp_dmat4;
    +
    683 
    +
    688  typedef tmat4x4<double, lowp> lowp_dmat4x4;
    +
    689 
    +
    694  typedef tmat4x4<double, mediump> mediump_dmat4x4;
    +
    695 
    +
    700  typedef tmat4x4<double, highp> highp_dmat4x4;
    +
    701 
    +
    703 
    +
    704 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    705  typedef lowp_dmat2x2 dmat2x2;
    +
    706  typedef lowp_dmat2x3 dmat2x3;
    +
    707  typedef lowp_dmat2x4 dmat2x4;
    +
    708  typedef lowp_dmat3x2 dmat3x2;
    +
    709  typedef lowp_dmat3x3 dmat3x3;
    +
    710  typedef lowp_dmat3x4 dmat3x4;
    +
    711  typedef lowp_dmat4x2 dmat4x2;
    +
    712  typedef lowp_dmat4x3 dmat4x3;
    +
    713  typedef lowp_dmat4x4 dmat4x4;
    +
    714 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
    +
    715  typedef mediump_dmat2x2 dmat2x2;
    +
    716  typedef mediump_dmat2x3 dmat2x3;
    +
    717  typedef mediump_dmat2x4 dmat2x4;
    +
    718  typedef mediump_dmat3x2 dmat3x2;
    +
    719  typedef mediump_dmat3x3 dmat3x3;
    +
    720  typedef mediump_dmat3x4 dmat3x4;
    +
    721  typedef mediump_dmat4x2 dmat4x2;
    +
    722  typedef mediump_dmat4x3 dmat4x3;
    +
    723  typedef mediump_dmat4x4 dmat4x4;
    +
    724 #else //defined(GLM_PRECISION_HIGHP_DOUBLE)
    +
    725 
    +
    729  typedef highp_dmat2x2 dmat2;
    +
    730 
    +
    734  typedef highp_dmat3x3 dmat3;
    +
    735 
    +
    739  typedef highp_dmat4x4 dmat4;
    +
    740 
    +
    744  typedef highp_dmat2x2 dmat2x2;
    +
    745 
    +
    749  typedef highp_dmat2x3 dmat2x3;
    +
    750 
    +
    754  typedef highp_dmat2x4 dmat2x4;
    +
    755 
    +
    759  typedef highp_dmat3x2 dmat3x2;
    +
    760 
    +
    764  typedef highp_dmat3x3 dmat3x3;
    +
    765 
    +
    769  typedef highp_dmat3x4 dmat3x4;
    +
    770 
    +
    774  typedef highp_dmat4x2 dmat4x2;
    +
    775 
    +
    779  typedef highp_dmat4x3 dmat4x3;
    +
    780 
    +
    784  typedef highp_dmat4x4 dmat4x4;
    +
    785 
    +
    786 #endif//GLM_PRECISION
    +
    787 
    +
    789 }//namespace glm
    +
    tmat2x2< double, lowp > lowp_dmat2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:450
    +
    mat3x3 mat3
    3 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:433
    +
    tmat3x3< float, highp > highp_mat3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:200
    +
    tmat3x3< float, lowp > lowp_mat3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:186
    +
    tmat3x4< float, lowp > lowp_mat3x4
    3 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:233
    +
    mat2x2 mat2
    2 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:428
    +
    tmat2x4< float, lowp > lowp_mat2x4
    2 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:134
    +
    highp_dmat2x2 dmat2x2
    2 * 2 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:744
    +
    tmat3x4< float, highp > highp_mat3x4
    3 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:247
    +
    highp_mat4x4 mat4x4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:421
    +
    mat4x4 mat4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:438
    +
    highp_dmat4x3 dmat4x3
    4 * 3 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:779
    +
    tmat2x2< double, mediump > mediump_dmat2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:456
    +
    highp_mat2x4 mat2x4
    2 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:391
    +
    tmat4x4< float, highp > highp_mat4x4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:347
    +
    tmat4x4< double, lowp > lowp_dmat4x4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:688
    +
    tmat3x4< float, mediump > mediump_mat3x4
    3 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:240
    +
    tmat2x2< float, mediump > mediump_mat2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:68
    +
    highp_mat3x2 mat3x2
    3 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:396
    +
    highp_mat3x3 mat3x3
    3 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:401
    +
    tmat3x2< float, lowp > lowp_mat3x2
    3 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:160
    +
    tmat4x4< float, lowp > lowp_mat4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:312
    +
    highp_mat4x3 mat4x3
    4 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:416
    +
    tmat3x4< double, mediump > mediump_dmat3x4
    3 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:607
    +
    tmat2x2< double, highp > highp_dmat2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:462
    +
    tmat4x3< double, lowp > lowp_dmat4x3
    4 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:647
    +
    tmat2x3< float, highp > highp_mat2x3
    2 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:122
    +
    tmat3x2< double, mediump > mediump_dmat3x2
    3 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:543
    +
    tmat4x4< double, highp > highp_dmat4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:682
    +
    tmat2x2< float, lowp > lowp_mat2x2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:82
    +
    tmat2x3< double, lowp > lowp_dmat2x3
    2 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:491
    +
    tmat4x2< float, highp > highp_mat4x2
    4 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:273
    +
    highp_dmat3x4 dmat3x4
    3 * 4 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:769
    +
    tmat4x3< float, mediump > mediump_mat4x3
    4 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:292
    +
    tmat2x3< float, lowp > lowp_mat2x3
    2 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:108
    +
    tmat4x4< float, lowp > lowp_mat4x4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:333
    +
    tmat2x4< float, highp > highp_mat2x4
    2 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:148
    +
    tmat4x4< double, lowp > lowp_dmat4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:670
    +
    tmat2x2< float, highp > highp_mat2x2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:96
    +
    tmat4x4< float, mediump > mediump_mat4x4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:340
    +
    tmat4x2< double, highp > highp_dmat4x2
    4 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:636
    +
    highp_mat4x2 mat4x2
    4 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:411
    +
    tmat4x4< double, highp > highp_dmat4x4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:700
    +
    tmat2x2< float, mediump > mediump_mat2x2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:89
    +
    tmat2x3< float, mediump > mediump_mat2x3
    2 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:115
    +
    highp_dmat2x4 dmat2x4
    2 * 4 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:754
    +
    tmat2x3< double, mediump > mediump_dmat2x3
    2 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:497
    +
    tmat3x3< double, mediump > mediump_dmat3x3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:584
    +
    tmat3x2< double, lowp > lowp_dmat3x2
    3 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:537
    +
    tmat4x2< double, lowp > lowp_dmat4x2
    4 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:624
    +
    highp_dmat2x2 dmat2
    2 * 2 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:729
    +
    tmat4x4< double, mediump > mediump_dmat4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:676
    +
    tmat4x2< float, lowp > lowp_mat4x2
    4 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:259
    +
    tmat4x2< float, mediump > mediump_mat4x2
    4 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:266
    +
    highp_dmat4x4 dmat4x4
    4 * 4 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:784
    +
    tmat4x4< float, highp > highp_mat4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:326
    +
    tmat4x2< double, mediump > mediump_dmat4x2
    4 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:630
    +
    highp_mat2x2 mat2x2
    2 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:381
    +
    tmat3x3< float, highp > highp_mat3x3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:221
    +
    tmat2x4< double, lowp > lowp_dmat2x4
    2 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:514
    +
    tmat2x2< double, mediump > mediump_dmat2x2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:474
    +
    tmat2x4< double, mediump > mediump_dmat2x4
    2 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:520
    +
    highp_mat2x3 mat2x3
    2 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:386
    +
    Definition: _noise.hpp:31
    +
    highp_dmat3x2 dmat3x2
    3 * 2 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:759
    +
    highp_dmat3x3 dmat3x3
    3 * 3 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:764
    +
    tmat3x2< float, mediump > mediump_mat3x2
    3 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:167
    +
    tmat4x3< double, mediump > mediump_dmat4x3
    4 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:653
    +
    tmat3x3< float, lowp > lowp_dmat3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:560
    +
    tmat3x4< double, highp > highp_dmat3x4
    3 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:613
    +
    tmat2x2< double, highp > highp_dmat2x2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:480
    +
    tmat3x3< double, lowp > lowp_dmat3x3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:578
    +
    highp_dmat2x3 dmat2x3
    2 * 3 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:749
    +
    tmat4x3< float, highp > highp_mat4x3
    4 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:299
    +
    tmat2x2< float, lowp > lowp_mat2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:61
    +
    tmat3x3< double, mediump > mediump_dmat3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:566
    +
    tmat4x3< float, lowp > lowp_mat4x3
    4 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:285
    +
    tmat3x2< float, highp > highp_mat3x2
    3 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:174
    +
    tmat2x2< float, highp > highp_mat2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:75
    +
    tmat2x4< double, highp > highp_dmat2x4
    2 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:526
    +
    tmat3x4< double, lowp > lowp_dmat3x4
    3 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:601
    +
    tmat2x4< float, mediump > mediump_mat2x4
    2 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:141
    +
    tmat3x3< float, mediump > mediump_mat3x3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:214
    +
    highp_mat3x4 mat3x4
    3 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:406
    +
    tmat4x4< float, mediump > mediump_mat4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:319
    +
    tmat3x3< float, lowp > lowp_mat3x3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:207
    +
    tmat3x3< float, mediump > mediump_mat3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:193
    +
    highp_dmat3x3 dmat3
    3 * 3 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:734
    +
    tmat3x2< double, highp > highp_dmat3x2
    3 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:549
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    highp_dmat4x4 dmat4
    4 * 4 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:739
    +
    tmat4x4< double, mediump > mediump_dmat4x4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:694
    +
    highp_dmat4x2 dmat4x2
    4 * 2 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:774
    +
    tmat3x3< double, highp > highp_dmat3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:572
    +
    tmat3x3< double, highp > highp_dmat3x3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:590
    +
    tmat4x3< double, highp > highp_dmat4x3
    4 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:659
    +
    tmat2x2< double, lowp > lowp_dmat2x2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:468
    +
    tmat2x3< double, highp > highp_dmat2x3
    2 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:503
    diff --git a/doc/api/a00121.html b/doc/api/a00121.html new file mode 100644 index 00000000..df89a1ab --- /dev/null +++ b/doc/api/a00121.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_mat2x2.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_mat2x2.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2005-01-27 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat2x2.hpp.

    +
    + + + + diff --git a/doc/api/a00121_source.html b/doc/api/a00121_source.html index 79da92bc..241dc0b1 100644 --- a/doc/api/a00121_source.html +++ b/doc/api/a00121_source.html @@ -3,8 +3,8 @@ - -GLM: type_int.hpp Source File + +0.9.6: type_mat2x2.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,170 +41,199 @@
    -
    type_int.hpp
    +
    type_mat2x2.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_int
    -
    30 #define glm_core_type_int
    -
    31 
    -
    32 #include "setup.hpp"
    -
    33 
    -
    34 #if GLM_HAS_EXTENDED_INTEGER_TYPE
    -
    35 # include <cstdint>
    -
    36 #endif
    -
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41 # if GLM_HAS_EXTENDED_INTEGER_TYPE
    -
    42  typedef std::int8_t int8;
    -
    43  typedef std::int16_t int16;
    -
    44  typedef std::int32_t int32;
    -
    45  typedef std::int64_t int64;
    -
    46 
    -
    47  typedef std::uint8_t uint8;
    -
    48  typedef std::uint16_t uint16;
    -
    49  typedef std::uint32_t uint32;
    -
    50  typedef std::uint64_t uint64;
    -
    51 # else
    -
    52 # if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available
    -
    53  typedef int64_t sint64;
    -
    54  typedef uint64_t uint64;
    -
    55 # elif(GLM_COMPILER & GLM_COMPILER_VC)
    -
    56  typedef signed __int64 sint64;
    -
    57  typedef unsigned __int64 uint64;
    -
    58 # elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG))
    -
    59  __extension__ typedef signed long long sint64;
    -
    60  __extension__ typedef unsigned long long uint64;
    -
    61 # elif(GLM_COMPILER & GLM_COMPILER_BC)
    -
    62  typedef Int64 sint64;
    -
    63  typedef Uint64 uint64;
    -
    64 # else//unknown compiler
    -
    65  typedef signed long long sint64;
    -
    66  typedef unsigned long long uint64;
    -
    67 # endif//GLM_COMPILER
    -
    68 
    -
    69  typedef signed char int8;
    -
    70  typedef signed short int16;
    -
    71  typedef signed int int32;
    -
    72  typedef sint64 int64;
    -
    73 
    -
    74  typedef unsigned char uint8;
    -
    75  typedef unsigned short uint16;
    -
    76  typedef unsigned int uint32;
    -
    77  typedef uint64 uint64;
    -
    78 #endif//
    -
    79 
    -
    80  typedef signed int lowp_int_t;
    -
    81  typedef signed int mediump_int_t;
    -
    82  typedef signed int highp_int_t;
    -
    83 
    -
    84  typedef unsigned int lowp_uint_t;
    -
    85  typedef unsigned int mediump_uint_t;
    -
    86  typedef unsigned int highp_uint_t;
    -
    87 }//namespace detail
    -
    88 
    -
    89  typedef detail::int8 int8;
    -
    90  typedef detail::int16 int16;
    -
    91  typedef detail::int32 int32;
    -
    92  typedef detail::int64 int64;
    -
    93 
    -
    94  typedef detail::uint8 uint8;
    -
    95  typedef detail::uint16 uint16;
    -
    96  typedef detail::uint32 uint32;
    -
    97  typedef detail::uint64 uint64;
    -
    98 
    -
    101 
    -
    107  typedef detail::lowp_int_t lowp_int;
    -
    108 
    -
    114  typedef detail::mediump_int_t mediump_int;
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec2.hpp"
    +
    33 #include "type_mat.hpp"
    +
    34 #include <limits>
    +
    35 #include <cstddef>
    +
    36 
    +
    37 namespace glm
    +
    38 {
    +
    39  template <typename T, precision P = defaultp>
    +
    40  struct tmat2x2
    +
    41  {
    +
    42  typedef T value_type;
    +
    43  typedef std::size_t size_type;
    +
    44  typedef tvec2<T, P> col_type;
    +
    45  typedef tvec2<T, P> row_type;
    +
    46  typedef tmat2x2<T, P> type;
    +
    47  typedef tmat2x2<T, P> transpose_type;
    +
    48 
    +
    49 # ifdef GLM_FORCE_SIZE_FUNC
    +
    50  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    51 # else
    +
    52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    53 # endif//GLM_FORCE_SIZE_FUNC
    +
    54 
    +
    55  template <typename U, precision Q>
    +
    56  friend tvec2<U, Q> operator/(tmat2x2<U, Q> const & m, tvec2<U, Q> const & v);
    +
    57  template <typename U, precision Q>
    +
    58  friend tvec2<U, Q> operator/(tvec2<U, Q> const & v, tmat2x2<U, Q> const & m);
    +
    59 
    +
    60  private:
    +
    62  col_type value[2];
    +
    64 
    +
    65  public:
    +
    67  // Constructors
    +
    68  GLM_FUNC_DECL tmat2x2();
    +
    69  template <precision Q>
    +
    70  GLM_FUNC_DECL tmat2x2(tmat2x2<T, Q> const & m);
    +
    71 
    +
    72  GLM_FUNC_DECL explicit tmat2x2(ctor);
    +
    73  GLM_FUNC_DECL explicit tmat2x2(T const & x);
    +
    74  GLM_FUNC_DECL tmat2x2(
    +
    75  T const & x1, T const & y1,
    +
    76  T const & x2, T const & y2);
    +
    77  GLM_FUNC_DECL tmat2x2(
    +
    78  col_type const & v1,
    +
    79  col_type const & v2);
    +
    80 
    +
    82  // Conversions
    +
    83  template <typename U, typename V, typename M, typename N>
    +
    84  GLM_FUNC_DECL tmat2x2(
    +
    85  U const & x1, V const & y1,
    +
    86  M const & x2, N const & y2);
    +
    87 
    +
    88  template <typename U, typename V>
    +
    89  GLM_FUNC_DECL tmat2x2(
    +
    90  tvec2<U, P> const & v1,
    +
    91  tvec2<V, P> const & v2);
    +
    92 
    +
    94  // Matrix conversions
    +
    95 
    +
    96 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    97  template <typename U, precision Q>
    +
    98  GLM_FUNC_DECL explicit tmat2x2(tmat2x2<U, Q> const & m);
    +
    99 # else
    +
    100  template <typename U, precision Q>
    +
    101  GLM_FUNC_DECL tmat2x2(tmat2x2<U, Q> const & m);
    +
    102 # endif
    +
    103 
    +
    104  GLM_FUNC_DECL explicit tmat2x2(tmat3x3<T, P> const & x);
    +
    105  GLM_FUNC_DECL explicit tmat2x2(tmat4x4<T, P> const & x);
    +
    106  GLM_FUNC_DECL explicit tmat2x2(tmat2x3<T, P> const & x);
    +
    107  GLM_FUNC_DECL explicit tmat2x2(tmat3x2<T, P> const & x);
    +
    108  GLM_FUNC_DECL explicit tmat2x2(tmat2x4<T, P> const & x);
    +
    109  GLM_FUNC_DECL explicit tmat2x2(tmat4x2<T, P> const & x);
    +
    110  GLM_FUNC_DECL explicit tmat2x2(tmat3x4<T, P> const & x);
    +
    111  GLM_FUNC_DECL explicit tmat2x2(tmat4x3<T, P> const & x);
    +
    112 
    +
    114  // Accesses
    115 
    -
    121  typedef detail::highp_int_t highp_int;
    -
    122 
    -
    128  typedef detail::lowp_uint_t lowp_uint;
    -
    129 
    -
    135  typedef detail::mediump_uint_t mediump_uint;
    -
    136 
    -
    142  typedef detail::highp_uint_t highp_uint;
    -
    143 
    -
    144 #if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    -
    145  typedef mediump_int int_t;
    -
    146 #elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    -
    147  typedef highp_int int_t;
    -
    148 #elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
    -
    149  typedef mediump_int int_t;
    -
    150 #elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))
    -
    151  typedef lowp_int int_t;
    -
    152 #else
    -
    153 # error "GLM error: multiple default precision requested for signed interger types"
    -
    154 #endif
    -
    155 
    -
    156 #if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    -
    157  typedef mediump_uint uint_t;
    -
    158 #elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    -
    159  typedef highp_uint uint_t;
    -
    160 #elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
    -
    161  typedef mediump_uint uint_t;
    -
    162 #elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))
    -
    163  typedef lowp_uint uint_t;
    -
    164 #else
    -
    165 # error "GLM error: multiple default precision requested for unsigned interger types"
    -
    166 #endif
    -
    167 
    -
    171  typedef unsigned int uint;
    -
    172 
    +
    116  GLM_FUNC_DECL col_type & operator[](length_t i);
    +
    117  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    +
    118 
    +
    119  template <typename U>
    +
    120  GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<U, P> const & m);
    +
    121  template <typename U>
    +
    122  GLM_FUNC_DECL tmat2x2<T, P> & operator+=(U s);
    +
    123  template <typename U>
    +
    124  GLM_FUNC_DECL tmat2x2<T, P> & operator+=(tmat2x2<U, P> const & m);
    +
    125  template <typename U>
    +
    126  GLM_FUNC_DECL tmat2x2<T, P> & operator-=(U s);
    +
    127  template <typename U>
    +
    128  GLM_FUNC_DECL tmat2x2<T, P> & operator-=(tmat2x2<U, P> const & m);
    +
    129  template <typename U>
    +
    130  GLM_FUNC_DECL tmat2x2<T, P> & operator*=(U s);
    +
    131  template <typename U>
    +
    132  GLM_FUNC_DECL tmat2x2<T, P> & operator*=(tmat2x2<U, P> const & m);
    +
    133  template <typename U>
    +
    134  GLM_FUNC_DECL tmat2x2<T, P> & operator/=(U s);
    +
    135  template <typename U>
    +
    136  GLM_FUNC_DECL tmat2x2<T, P> & operator/=(tmat2x2<U, P> const & m);
    +
    137 
    +
    139  // Increment and decrement operators
    +
    140 
    +
    141  GLM_FUNC_DECL tmat2x2<T, P> & operator++ ();
    +
    142  GLM_FUNC_DECL tmat2x2<T, P> & operator-- ();
    +
    143  GLM_FUNC_DECL tmat2x2<T, P> operator++(int);
    +
    144  GLM_FUNC_DECL tmat2x2<T, P> operator--(int);
    +
    145  };
    +
    146 
    +
    147  // Binary operators
    +
    148  template <typename T, precision P>
    +
    149  GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m, T const & s);
    +
    150 
    +
    151  template <typename T, precision P>
    +
    152  GLM_FUNC_DECL tmat2x2<T, P> operator+(T const & s, tmat2x2<T, P> const & m);
    +
    153 
    +
    154  template <typename T, precision P>
    +
    155  GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
    +
    156 
    +
    157  template <typename T, precision P>
    +
    158  GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m, T const & s);
    +
    159 
    +
    160  template <typename T, precision P>
    +
    161  GLM_FUNC_DECL tmat2x2<T, P> operator-(T const & s, tmat2x2<T, P> const & m);
    +
    162 
    +
    163  template <typename T, precision P>
    +
    164  GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
    +
    165 
    +
    166  template <typename T, precision P>
    +
    167  GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m, T const & s);
    +
    168 
    +
    169  template <typename T, precision P>
    +
    170  GLM_FUNC_DECL tmat2x2<T, P> operator*(T const & s, tmat2x2<T, P> const & m);
    +
    171 
    +
    172  template <typename T, precision P>
    +
    173  GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator*(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v);
    174 
    -
    176 // check type sizes
    -
    177 #ifndef GLM_STATIC_ASSERT_NULL
    -
    178  GLM_STATIC_ASSERT(sizeof(glm::int8) == 1, "int8 size isn't 1 byte on this platform");
    -
    179  GLM_STATIC_ASSERT(sizeof(glm::int16) == 2, "int16 size isn't 2 bytes on this platform");
    -
    180  GLM_STATIC_ASSERT(sizeof(glm::int32) == 4, "int32 size isn't 4 bytes on this platform");
    -
    181  GLM_STATIC_ASSERT(sizeof(glm::int64) == 8, "int64 size isn't 8 bytes on this platform");
    -
    182 
    -
    183  GLM_STATIC_ASSERT(sizeof(glm::uint8) == 1, "uint8 size isn't 1 byte on this platform");
    -
    184  GLM_STATIC_ASSERT(sizeof(glm::uint16) == 2, "uint16 size isn't 2 bytes on this platform");
    -
    185  GLM_STATIC_ASSERT(sizeof(glm::uint32) == 4, "uint32 size isn't 4 bytes on this platform");
    -
    186  GLM_STATIC_ASSERT(sizeof(glm::uint64) == 8, "uint64 size isn't 8 bytes on this platform");
    -
    187 #endif//GLM_STATIC_ASSERT_NULL
    -
    188 
    -
    189 }//namespace glm
    -
    190 
    -
    191 #endif//glm_core_type_int
    -
    detail::highp_int_t highp_int
    High precision signed integer.
    Definition: type_int.hpp:121
    -
    detail::int8 int8
    8 bit signed integer type.
    Definition: type_int.hpp:89
    -
    detail::uint32 uint32
    32 bit unsigned integer type.
    Definition: type_int.hpp:96
    -
    detail::int16 int16
    16 bit signed integer type.
    Definition: type_int.hpp:90
    -
    detail::uint8 uint8_t
    8 bit unsigned integer type.
    Definition: fwd.hpp:895
    -
    detail::int64 int64_t
    64 bit signed integer type.
    Definition: fwd.hpp:305
    -
    detail::uint32 uint32_t
    32 bit unsigned integer type.
    Definition: fwd.hpp:903
    -
    detail::int64 int64
    64 bit signed integer type.
    Definition: type_int.hpp:92
    -
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:171
    -
    detail::uint64 uint64_t
    64 bit unsigned integer type.
    Definition: fwd.hpp:907
    -
    detail::int16 int16_t
    16 bit signed integer type.
    Definition: fwd.hpp:297
    -
    detail::uint64 uint64
    64 bit unsigned integer type.
    Definition: type_int.hpp:97
    -
    detail::lowp_uint_t lowp_uint
    Low precision unsigned integer.
    Definition: type_int.hpp:128
    -
    detail::int8 int8_t
    8 bit signed integer type.
    Definition: fwd.hpp:293
    -
    detail::uint16 uint16_t
    16 bit unsigned integer type.
    Definition: fwd.hpp:899
    -
    detail::int32 int32
    32 bit signed integer type.
    Definition: type_int.hpp:91
    -
    detail::int32 int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:301
    -
    detail::mediump_uint_t mediump_uint
    Medium precision unsigned integer.
    Definition: type_int.hpp:135
    -
    detail::uint8 uint8
    8 bit unsigned integer type.
    Definition: type_int.hpp:94
    -
    detail::mediump_int_t mediump_int
    Medium precision signed integer.
    Definition: type_int.hpp:114
    -
    detail::highp_uint_t highp_uint
    High precision unsigned integer.
    Definition: type_int.hpp:142
    -
    detail::lowp_int_t lowp_int
    Low precision signed integer.
    Definition: type_int.hpp:107
    -
    detail::uint16 uint16
    16 bit unsigned integer type.
    Definition: type_int.hpp:95
    +
    175  template <typename T, precision P>
    +
    176  GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator*(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m);
    +
    177 
    +
    178  template <typename T, precision P>
    +
    179  GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
    +
    180 
    +
    181  template <typename T, precision P>
    +
    182  GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat3x2<T, P> const & m2);
    +
    183 
    +
    184  template <typename T, precision P>
    +
    185  GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat4x2<T, P> const & m2);
    +
    186 
    +
    187  template <typename T, precision P>
    +
    188  GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m, T const & s);
    +
    189 
    +
    190  template <typename T, precision P>
    +
    191  GLM_FUNC_DECL tmat2x2<T, P> operator/(T const & s, tmat2x2<T, P> const & m);
    +
    192 
    +
    193  template <typename T, precision P>
    +
    194  GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator/(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v);
    +
    195 
    +
    196  template <typename T, precision P>
    +
    197  GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator/(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m);
    +
    198 
    +
    199  template <typename T, precision P>
    +
    200  GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
    +
    201 
    +
    202  // Unary constant operators
    +
    203  template <typename T, precision P>
    +
    204  GLM_FUNC_DECL tmat2x2<T, P> const operator-(tmat2x2<T, P> const & m);
    +
    205 } //namespace glm
    +
    206 
    +
    207 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    208 #include "type_mat2x2.inl"
    +
    209 #endif
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00122.html b/doc/api/a00122.html new file mode 100644 index 00000000..ea24d801 --- /dev/null +++ b/doc/api/a00122.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_mat2x3.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_mat2x3.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2006-10-01 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat2x3.hpp.

    +
    + + + + diff --git a/doc/api/a00122_source.html b/doc/api/a00122_source.html index ba2c4d08..e0504094 100644 --- a/doc/api/a00122_source.html +++ b/doc/api/a00122_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat.hpp Source File + +0.9.6: type_mat2x3.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,429 +41,205 @@
    -
    type_mat.hpp
    +
    type_mat2x3.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat
    -
    30 #define glm_core_type_mat
    -
    31 
    -
    32 #include "precision.hpp"
    -
    33 
    -
    34 namespace glm{
    -
    35 namespace detail
    -
    36 {
    -
    37  template <typename T, precision P> struct tvec2;
    -
    38  template <typename T, precision P> struct tvec3;
    -
    39  template <typename T, precision P> struct tvec4;
    -
    40  template <typename T, precision P> struct tmat2x2;
    -
    41  template <typename T, precision P> struct tmat2x3;
    -
    42  template <typename T, precision P> struct tmat2x4;
    -
    43  template <typename T, precision P> struct tmat3x2;
    -
    44  template <typename T, precision P> struct tmat3x3;
    -
    45  template <typename T, precision P> struct tmat3x4;
    -
    46  template <typename T, precision P> struct tmat4x2;
    -
    47  template <typename T, precision P> struct tmat4x3;
    -
    48  template <typename T, precision P> struct tmat4x4;
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec2.hpp"
    +
    33 #include "type_vec3.hpp"
    +
    34 #include "type_mat.hpp"
    +
    35 #include <limits>
    +
    36 #include <cstddef>
    +
    37 
    +
    38 namespace glm
    +
    39 {
    +
    40  template <typename T, precision P = defaultp>
    +
    41  struct tmat2x3
    +
    42  {
    +
    43  typedef T value_type;
    +
    44  typedef std::size_t size_type;
    +
    45  typedef tvec3<T, P> col_type;
    +
    46  typedef tvec2<T, P> row_type;
    +
    47  typedef tmat2x3<T, P> type;
    +
    48  typedef tmat3x2<T, P> transpose_type;
    49 
    -
    50  template <typename T, precision P, template <class, precision> class colType, template <class, precision> class rowType>
    -
    51  struct outerProduct_trait{};
    -
    52 
    -
    53  template <template <class, precision> class matType, typename T, precision P>
    -
    54  struct compute_inverse{};
    -
    55 }//namespace detail
    -
    56 
    -
    59 
    -
    65  typedef detail::tmat2x2<float, lowp> lowp_mat2;
    -
    66 
    -
    72  typedef detail::tmat2x2<float, mediump> mediump_mat2;
    -
    73 
    -
    79  typedef detail::tmat2x2<float, highp> highp_mat2;
    -
    80 
    -
    86  typedef detail::tmat2x2<float, lowp> lowp_mat2x2;
    -
    87 
    -
    93  typedef detail::tmat2x2<float, mediump> mediump_mat2x2;
    -
    94 
    -
    100  typedef detail::tmat2x2<float, highp> highp_mat2x2;
    -
    101 
    -
    103 
    -
    106 
    -
    112  typedef detail::tmat2x3<float, lowp> lowp_mat2x3;
    -
    113 
    -
    119  typedef detail::tmat2x3<float, mediump> mediump_mat2x3;
    -
    120 
    -
    126  typedef detail::tmat2x3<float, highp> highp_mat2x3;
    -
    127 
    -
    129 
    -
    132 
    -
    138  typedef detail::tmat2x4<float, lowp> lowp_mat2x4;
    -
    139 
    -
    145  typedef detail::tmat2x4<float, mediump> mediump_mat2x4;
    -
    146 
    -
    152  typedef detail::tmat2x4<float, highp> highp_mat2x4;
    -
    153 
    -
    155 
    -
    158 
    -
    164  typedef detail::tmat3x2<float, lowp> lowp_mat3x2;
    -
    165 
    -
    171  typedef detail::tmat3x2<float, mediump> mediump_mat3x2;
    -
    172 
    -
    178  typedef detail::tmat3x2<float, highp> highp_mat3x2;
    -
    179 
    -
    181 
    -
    184 
    -
    190  typedef detail::tmat3x3<float, lowp> lowp_mat3;
    -
    191 
    -
    197  typedef detail::tmat3x3<float, mediump> mediump_mat3;
    -
    198 
    -
    204  typedef detail::tmat3x3<float, highp> highp_mat3;
    -
    205 
    -
    211  typedef detail::tmat3x3<float, lowp> lowp_mat3x3;
    -
    212 
    -
    218  typedef detail::tmat3x3<float, mediump> mediump_mat3x3;
    -
    219 
    -
    225  typedef detail::tmat3x3<float, highp> highp_mat3x3;
    -
    226 
    -
    228 
    -
    231 
    -
    237  typedef detail::tmat3x4<float, lowp> lowp_mat3x4;
    -
    238 
    -
    244  typedef detail::tmat3x4<float, mediump> mediump_mat3x4;
    -
    245 
    -
    251  typedef detail::tmat3x4<float, highp> highp_mat3x4;
    -
    252 
    -
    254 
    -
    257 
    -
    263  typedef detail::tmat4x2<float, lowp> lowp_mat4x2;
    -
    264 
    -
    270  typedef detail::tmat4x2<float, mediump> mediump_mat4x2;
    -
    271 
    -
    277  typedef detail::tmat4x2<float, highp> highp_mat4x2;
    -
    278 
    -
    280 
    -
    283 
    -
    289  typedef detail::tmat4x3<float, lowp> lowp_mat4x3;
    -
    290 
    -
    296  typedef detail::tmat4x3<float, mediump> mediump_mat4x3;
    -
    297 
    -
    303  typedef detail::tmat4x3<float, highp> highp_mat4x3;
    -
    304 
    -
    306 
    -
    307 
    -
    310 
    -
    316  typedef detail::tmat4x4<float, lowp> lowp_mat4;
    -
    317 
    -
    323  typedef detail::tmat4x4<float, mediump> mediump_mat4;
    -
    324 
    -
    330  typedef detail::tmat4x4<float, highp> highp_mat4;
    -
    331 
    -
    337  typedef detail::tmat4x4<float, lowp> lowp_mat4x4;
    -
    338 
    -
    344  typedef detail::tmat4x4<float, mediump> mediump_mat4x4;
    -
    345 
    -
    351  typedef detail::tmat4x4<float, highp> highp_mat4x4;
    -
    352 
    -
    354 
    -
    357 
    -
    359  // Float definition
    -
    360 
    -
    361 #if(defined(GLM_PRECISION_LOWP_FLOAT))
    -
    362  typedef lowp_mat2x2 mat2x2;
    -
    363  typedef lowp_mat2x3 mat2x3;
    -
    364  typedef lowp_mat2x4 mat2x4;
    -
    365  typedef lowp_mat3x2 mat3x2;
    -
    366  typedef lowp_mat3x3 mat3x3;
    -
    367  typedef lowp_mat3x4 mat3x4;
    -
    368  typedef lowp_mat4x2 mat4x2;
    -
    369  typedef lowp_mat4x3 mat4x3;
    -
    370  typedef lowp_mat4x4 mat4x4;
    -
    371 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    -
    372  typedef mediump_mat2x2 mat2x2;
    -
    373  typedef mediump_mat2x3 mat2x3;
    -
    374  typedef mediump_mat2x4 mat2x4;
    -
    375  typedef mediump_mat3x2 mat3x2;
    -
    376  typedef mediump_mat3x3 mat3x3;
    -
    377  typedef mediump_mat3x4 mat3x4;
    -
    378  typedef mediump_mat4x2 mat4x2;
    -
    379  typedef mediump_mat4x3 mat4x3;
    -
    380  typedef mediump_mat4x4 mat4x4;
    -
    381 #else
    -
    382  typedef highp_mat2x2 mat2x2;
    -
    386 
    - -
    391 
    - -
    396 
    - -
    401 
    - -
    406 
    - -
    411 
    - -
    416 
    - -
    421 
    - -
    426 
    -
    427 #endif//GLM_PRECISION
    -
    428 
    -
    432  typedef mat2x2 mat2;
    -
    433 
    -
    437  typedef mat3x3 mat3;
    -
    438 
    -
    442  typedef mat4x4 mat4;
    -
    443 
    -
    445  // Double definition
    -
    446 
    -
    449 
    -
    454  typedef detail::tmat2x2<double, lowp> lowp_dmat2;
    -
    455 
    -
    460  typedef detail::tmat2x2<double, mediump> mediump_dmat2;
    -
    461 
    -
    466  typedef detail::tmat2x2<double, highp> highp_dmat2;
    -
    467 
    -
    472  typedef detail::tmat2x2<double, lowp> lowp_dmat2x2;
    -
    473 
    -
    478  typedef detail::tmat2x2<double, mediump> mediump_dmat2x2;
    -
    479 
    -
    484  typedef detail::tmat2x2<double, highp> highp_dmat2x2;
    -
    485 
    -
    487 
    -
    490 
    -
    495  typedef detail::tmat2x3<double, lowp> lowp_dmat2x3;
    -
    496 
    -
    501  typedef detail::tmat2x3<double, mediump> mediump_dmat2x3;
    -
    502 
    -
    507  typedef detail::tmat2x3<double, highp> highp_dmat2x3;
    -
    508 
    -
    510 
    -
    513 
    -
    518  typedef detail::tmat2x4<double, lowp> lowp_dmat2x4;
    -
    519 
    -
    524  typedef detail::tmat2x4<double, mediump> mediump_dmat2x4;
    -
    525 
    -
    530  typedef detail::tmat2x4<double, highp> highp_dmat2x4;
    -
    531 
    -
    533 
    -
    536 
    -
    541  typedef detail::tmat3x2<double, lowp> lowp_dmat3x2;
    -
    542 
    -
    547  typedef detail::tmat3x2<double, mediump> mediump_dmat3x2;
    -
    548 
    -
    553  typedef detail::tmat3x2<double, highp> highp_dmat3x2;
    -
    554 
    -
    556 
    -
    559 
    -
    564  typedef detail::tmat3x3<float, lowp> lowp_dmat3;
    -
    565 
    -
    570  typedef detail::tmat3x3<double, mediump> mediump_dmat3;
    -
    571 
    -
    576  typedef detail::tmat3x3<double, highp> highp_dmat3;
    -
    577 
    -
    582  typedef detail::tmat3x3<double, lowp> lowp_dmat3x3;
    -
    583 
    -
    588  typedef detail::tmat3x3<double, mediump> mediump_dmat3x3;
    -
    589 
    -
    594  typedef detail::tmat3x3<double, highp> highp_dmat3x3;
    -
    595 
    -
    597 
    -
    600 
    -
    605  typedef detail::tmat3x4<double, lowp> lowp_dmat3x4;
    -
    606 
    -
    611  typedef detail::tmat3x4<double, mediump> mediump_dmat3x4;
    -
    612 
    -
    617  typedef detail::tmat3x4<double, highp> highp_dmat3x4;
    -
    618 
    -
    620 
    -
    623 
    -
    628  typedef detail::tmat4x2<double, lowp> lowp_dmat4x2;
    -
    629 
    -
    634  typedef detail::tmat4x2<double, mediump> mediump_dmat4x2;
    -
    635 
    -
    640  typedef detail::tmat4x2<double, highp> highp_dmat4x2;
    -
    641 
    -
    643 
    -
    646 
    -
    651  typedef detail::tmat4x3<double, lowp> lowp_dmat4x3;
    -
    652 
    -
    657  typedef detail::tmat4x3<double, mediump> mediump_dmat4x3;
    -
    658 
    -
    663  typedef detail::tmat4x3<double, highp> highp_dmat4x3;
    -
    664 
    -
    666 
    -
    669 
    -
    674  typedef detail::tmat4x4<double, lowp> lowp_dmat4;
    -
    675 
    -
    680  typedef detail::tmat4x4<double, mediump> mediump_dmat4;
    -
    681 
    -
    686  typedef detail::tmat4x4<double, highp> highp_dmat4;
    -
    687 
    -
    692  typedef detail::tmat4x4<double, lowp> lowp_dmat4x4;
    -
    693 
    -
    698  typedef detail::tmat4x4<double, mediump> mediump_dmat4x4;
    -
    699 
    -
    704  typedef detail::tmat4x4<double, highp> highp_dmat4x4;
    -
    705 
    -
    707 
    -
    708 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    709  typedef lowp_dmat2x2 dmat2x2;
    -
    710  typedef lowp_dmat2x3 dmat2x3;
    -
    711  typedef lowp_dmat2x4 dmat2x4;
    -
    712  typedef lowp_dmat3x2 dmat3x2;
    -
    713  typedef lowp_dmat3x3 dmat3x3;
    -
    714  typedef lowp_dmat3x4 dmat3x4;
    -
    715  typedef lowp_dmat4x2 dmat4x2;
    -
    716  typedef lowp_dmat4x3 dmat4x3;
    -
    717  typedef lowp_dmat4x4 dmat4x4;
    -
    718 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
    -
    719  typedef mediump_dmat2x2 dmat2x2;
    -
    720  typedef mediump_dmat2x3 dmat2x3;
    -
    721  typedef mediump_dmat2x4 dmat2x4;
    -
    722  typedef mediump_dmat3x2 dmat3x2;
    -
    723  typedef mediump_dmat3x3 dmat3x3;
    -
    724  typedef mediump_dmat3x4 dmat3x4;
    -
    725  typedef mediump_dmat4x2 dmat4x2;
    -
    726  typedef mediump_dmat4x3 dmat4x3;
    -
    727  typedef mediump_dmat4x4 dmat4x4;
    -
    728 #else //defined(GLM_PRECISION_HIGHP_DOUBLE)
    -
    729 
    - -
    734 
    - -
    739 
    - -
    744 
    - -
    749 
    - -
    754 
    - -
    759 
    - -
    764 
    - -
    769 
    - -
    774 
    - -
    779 
    - -
    784 
    - -
    789 
    -
    790 #endif//GLM_PRECISION
    -
    791 
    -
    793 }//namespace glm
    -
    794 
    -
    795 #endif//glm_core_type_mat
    -
    highp_mat4x4 mat4x4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:425
    -
    detail::tmat4x4< double, highp > highp_dmat4x4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:704
    -
    highp_mat4x2 mat4x2
    4 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:415
    -
    detail::tmat2x2< float, highp > highp_mat2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:79
    -
    detail::tmat3x3< double, mediump > mediump_dmat3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:570
    -
    detail::tmat2x4< float, lowp > lowp_mat2x4
    2 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:138
    -
    highp_dmat3x2 dmat3x2
    3 * 2 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:763
    -
    detail::tmat3x3< float, mediump > mediump_mat3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:197
    -
    detail::tmat3x3< float, lowp > lowp_mat3x3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:211
    -
    detail::tmat2x2< double, lowp > lowp_dmat2x2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:472
    -
    highp_dmat2x4 dmat2x4
    2 * 4 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:758
    -
    detail::tmat3x4< double, highp > highp_dmat3x4
    3 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:617
    -
    detail::tmat3x4< double, lowp > lowp_dmat3x4
    3 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:605
    -
    highp_mat3x3 mat3x3
    3 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:405
    -
    detail::tmat2x2< float, mediump > mediump_mat2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:72
    -
    highp_mat4x3 mat4x3
    4 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:420
    -
    detail::tmat4x4< float, highp > highp_mat4x4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:351
    -
    detail::tmat4x2< double, mediump > mediump_dmat4x2
    4 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:634
    -
    detail::tmat4x3< float, mediump > mediump_mat4x3
    4 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:296
    -
    detail::tmat4x4< float, lowp > lowp_mat4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:316
    -
    detail::tmat3x2< float, lowp > lowp_mat3x2
    3 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:164
    -
    detail::tmat3x4< float, highp > highp_mat3x4
    3 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:251
    -
    detail::tmat2x2< float, lowp > lowp_mat2x2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:86
    -
    highp_dmat4x4 dmat4
    4 * 4 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:743
    -
    highp_dmat4x4 dmat4x4
    4 * 4 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:788
    -
    detail::tmat2x3< double, mediump > mediump_dmat2x3
    2 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:501
    -
    detail::tmat4x4< float, highp > highp_mat4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:330
    -
    highp_dmat4x2 dmat4x2
    4 * 2 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:778
    -
    detail::tmat3x3< float, highp > highp_mat3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:204
    -
    mat4x4 mat4
    4 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:442
    -
    detail::tmat2x2< double, mediump > mediump_dmat2x2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:478
    -
    detail::tmat4x3< float, highp > highp_mat4x3
    4 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:303
    -
    highp_dmat3x3 dmat3x3
    3 * 3 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:768
    -
    detail::tmat2x4< double, mediump > mediump_dmat2x4
    2 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:524
    -
    detail::tmat3x4< double, mediump > mediump_dmat3x4
    3 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:611
    -
    detail::tmat2x2< double, highp > highp_dmat2x2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:484
    -
    detail::tmat4x2< float, mediump > mediump_mat4x2
    4 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:270
    -
    highp_dmat3x3 dmat3
    3 * 3 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:738
    -
    detail::tmat4x4< float, mediump > mediump_mat4x4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:344
    -
    detail::tmat2x2< float, lowp > lowp_mat2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:65
    -
    detail::tmat3x3< float, lowp > lowp_mat3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:190
    -
    highp_dmat2x2 dmat2x2
    2 * 2 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:748
    -
    detail::tmat3x3< double, highp > highp_dmat3x3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:594
    -
    detail::tmat2x2< float, mediump > mediump_mat2x2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:93
    -
    highp_dmat4x3 dmat4x3
    4 * 3 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:783
    -
    detail::tmat4x3< float, lowp > lowp_mat4x3
    4 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:289
    -
    detail::tmat2x3< float, mediump > mediump_mat2x3
    2 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:119
    -
    detail::tmat4x3< double, highp > highp_dmat4x3
    4 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:663
    -
    detail::tmat2x4< double, lowp > lowp_dmat2x4
    2 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:518
    -
    detail::tmat3x3< float, mediump > mediump_mat3x3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:218
    -
    detail::tmat3x2< float, highp > highp_mat3x2
    3 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:178
    -
    detail::tmat2x3< double, lowp > lowp_dmat2x3
    2 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:495
    -
    detail::tmat3x3< float, highp > highp_mat3x3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:225
    -
    detail::tmat2x3< double, highp > highp_dmat2x3
    2 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:507
    -
    detail::tmat3x3< double, highp > highp_dmat3
    3 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:576
    -
    detail::tmat4x4< double, lowp > lowp_dmat4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:674
    -
    detail::tmat4x4< double, mediump > mediump_dmat4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:680
    -
    detail::tmat3x2< double, mediump > mediump_dmat3x2
    3 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:547
    -
    detail::tmat3x2< double, lowp > lowp_dmat3x2
    3 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:541
    -
    highp_mat3x4 mat3x4
    3 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:410
    -
    detail::tmat3x4< float, lowp > lowp_mat3x4
    3 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:237
    -
    detail::tmat2x4< float, highp > highp_mat2x4
    2 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:152
    -
    highp_dmat3x4 dmat3x4
    3 * 4 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:773
    -
    detail::tmat4x4< double, lowp > lowp_dmat4x4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:692
    -
    highp_mat2x2 mat2x2
    2 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:385
    -
    detail::tmat2x4< float, mediump > mediump_mat2x4
    2 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:145
    -
    highp_mat2x3 mat2x3
    2 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:390
    -
    highp_mat2x4 mat2x4
    2 columns of 4 components matrix of floating-point numbers.
    Definition: type_mat.hpp:395
    -
    detail::tmat4x2< float, highp > highp_mat4x2
    4 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:277
    -
    highp_mat3x2 mat3x2
    3 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:400
    -
    detail::tmat4x2< float, lowp > lowp_mat4x2
    4 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:263
    -
    detail::tmat3x3< double, lowp > lowp_dmat3x3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:582
    -
    detail::tmat3x3< float, lowp > lowp_dmat3
    3 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:564
    -
    detail::tmat2x2< float, highp > highp_mat2x2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:100
    -
    detail::tmat4x4< float, mediump > mediump_mat4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:323
    -
    detail::tmat4x2< double, lowp > lowp_dmat4x2
    4 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:628
    -
    highp_dmat2x2 dmat2
    2 * 2 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:733
    -
    mat3x3 mat3
    3 columns of 3 components matrix of floating-point numbers.
    Definition: type_mat.hpp:437
    -
    detail::tmat3x2< double, highp > highp_dmat3x2
    3 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:553
    -
    detail::tmat2x3< float, highp > highp_mat2x3
    2 columns of 3 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:126
    -
    mat2x2 mat2
    2 columns of 2 components matrix of floating-point numbers.
    Definition: type_mat.hpp:432
    -
    detail::tmat4x4< double, mediump > mediump_dmat4x4
    4 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:698
    -
    detail::tmat2x3< float, lowp > lowp_mat2x3
    2 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:112
    -
    detail::tmat4x4< float, lowp > lowp_mat4x4
    4 columns of 4 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:337
    -
    detail::tmat3x4< float, mediump > mediump_mat3x4
    3 columns of 4 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:244
    -
    detail::tmat4x2< double, highp > highp_dmat4x2
    4 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:640
    -
    detail::tmat3x3< double, mediump > mediump_dmat3x3
    3 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:588
    -
    detail::tmat2x2< double, highp > highp_dmat2
    2 columns of 2 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:466
    -
    detail::tmat2x2< double, mediump > mediump_dmat2
    2 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:460
    -
    detail::tmat4x3< double, mediump > mediump_dmat4x3
    4 columns of 3 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:657
    -
    detail::tmat2x4< double, highp > highp_dmat2x4
    2 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:530
    -
    detail::tmat4x3< double, lowp > lowp_dmat4x3
    4 columns of 3 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:651
    -
    detail::tmat3x2< float, mediump > mediump_mat3x2
    3 columns of 2 components matrix of medium precision floating-point numbers.
    Definition: type_mat.hpp:171
    -
    detail::tmat2x2< double, lowp > lowp_dmat2
    2 columns of 2 components matrix of low precision floating-point numbers.
    Definition: type_mat.hpp:454
    -
    detail::tmat4x4< double, highp > highp_dmat4
    4 columns of 4 components matrix of high precision floating-point numbers.
    Definition: type_mat.hpp:686
    -
    highp_dmat2x3 dmat2x3
    2 * 3 matrix of double-precision floating-point numbers.
    Definition: type_mat.hpp:753
    +
    50 # ifdef GLM_FORCE_SIZE_FUNC
    +
    51  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    52 # else
    +
    53  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    54 # endif//GLM_FORCE_SIZE_FUNC
    +
    55 
    +
    56  private:
    +
    58  col_type value[2];
    +
    60 
    +
    61  public:
    +
    62  // Constructors
    +
    63  GLM_FUNC_DECL tmat2x3();
    +
    64  template <precision Q>
    +
    65  GLM_FUNC_DECL tmat2x3(tmat2x3<T, Q> const & m);
    +
    66 
    +
    67  GLM_FUNC_DECL explicit tmat2x3(ctor);
    +
    68  GLM_FUNC_DECL explicit tmat2x3(T const & s);
    +
    69  GLM_FUNC_DECL tmat2x3(
    +
    70  T const & x0, T const & y0, T const & z0,
    +
    71  T const & x1, T const & y1, T const & z1);
    +
    72  GLM_FUNC_DECL tmat2x3(
    +
    73  col_type const & v0,
    +
    74  col_type const & v1);
    +
    75 
    +
    77  // Conversions
    +
    78 
    +
    79  template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>
    +
    80  GLM_FUNC_DECL tmat2x3(
    +
    81  X1 const & x1, Y1 const & y1, Z1 const & z1,
    +
    82  X2 const & x2, Y2 const & y2, Z2 const & z2);
    +
    83 
    +
    84  template <typename U, typename V>
    +
    85  GLM_FUNC_DECL tmat2x3(
    +
    86  tvec3<U, P> const & v1,
    +
    87  tvec3<V, P> const & v2);
    +
    88 
    +
    90  // Matrix conversion
    +
    91 
    +
    92 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    93  template <typename U, precision Q>
    +
    94  GLM_FUNC_DECL explicit tmat2x3(tmat2x3<U, Q> const & m);
    +
    95 # else
    +
    96  template <typename U, precision Q>
    +
    97  GLM_FUNC_DECL tmat2x3(tmat2x3<U, Q> const & m);
    +
    98 # endif
    +
    99 
    +
    100  GLM_FUNC_DECL explicit tmat2x3(tmat2x2<T, P> const & x);
    +
    101  GLM_FUNC_DECL explicit tmat2x3(tmat3x3<T, P> const & x);
    +
    102  GLM_FUNC_DECL explicit tmat2x3(tmat4x4<T, P> const & x);
    +
    103  GLM_FUNC_DECL explicit tmat2x3(tmat2x4<T, P> const & x);
    +
    104  GLM_FUNC_DECL explicit tmat2x3(tmat3x2<T, P> const & x);
    +
    105  GLM_FUNC_DECL explicit tmat2x3(tmat3x4<T, P> const & x);
    +
    106  GLM_FUNC_DECL explicit tmat2x3(tmat4x2<T, P> const & x);
    +
    107  GLM_FUNC_DECL explicit tmat2x3(tmat4x3<T, P> const & x);
    +
    108 
    +
    109  // Accesses
    +
    110  GLM_FUNC_DECL col_type & operator[](length_t i);
    +
    111  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    +
    112 
    +
    113  template <typename U>
    +
    114  GLM_FUNC_DECL tmat2x3<T, P> & operator= (tmat2x3<U, P> const & m);
    +
    115  template <typename U>
    +
    116  GLM_FUNC_DECL tmat2x3<T, P> & operator+= (U s);
    +
    117  template <typename U>
    +
    118  GLM_FUNC_DECL tmat2x3<T, P> & operator+= (tmat2x3<U, P> const & m);
    +
    119  template <typename U>
    +
    120  GLM_FUNC_DECL tmat2x3<T, P> & operator-= (U s);
    +
    121  template <typename U>
    +
    122  GLM_FUNC_DECL tmat2x3<T, P> & operator-= (tmat2x3<U, P> const & m);
    +
    123  template <typename U>
    +
    124  GLM_FUNC_DECL tmat2x3<T, P> & operator*= (U s);
    +
    125  template <typename U>
    +
    126  GLM_FUNC_DECL tmat2x3<T, P> & operator/= (U s);
    +
    127 
    +
    129  // Increment and decrement operators
    +
    130 
    +
    131  GLM_FUNC_DECL tmat2x3<T, P> & operator++ ();
    +
    132  GLM_FUNC_DECL tmat2x3<T, P> & operator-- ();
    +
    133  GLM_FUNC_DECL tmat2x3<T, P> operator++(int);
    +
    134  GLM_FUNC_DECL tmat2x3<T, P> operator--(int);
    +
    135  };
    +
    136 
    +
    137  // Binary operators
    +
    138 
    +
    139  template <typename T, precision P>
    +
    140  GLM_FUNC_DECL tmat2x3<T, P> operator+ (
    +
    141  tmat2x3<T, P> const & m,
    +
    142  T const & s);
    +
    143 
    +
    144  template <typename T, precision P>
    +
    145  GLM_FUNC_DECL tmat2x3<T, P> operator+ (
    +
    146  tmat2x3<T, P> const & m1,
    +
    147  tmat2x3<T, P> const & m2);
    +
    148 
    +
    149  template <typename T, precision P>
    +
    150  GLM_FUNC_DECL tmat2x3<T, P> operator- (
    +
    151  tmat2x3<T, P> const & m,
    +
    152  T const & s);
    +
    153 
    +
    154  template <typename T, precision P>
    +
    155  GLM_FUNC_DECL tmat2x3<T, P> operator- (
    +
    156  tmat2x3<T, P> const & m1,
    +
    157  tmat2x3<T, P> const & m2);
    +
    158 
    +
    159  template <typename T, precision P>
    +
    160  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    +
    161  tmat2x3<T, P> const & m,
    +
    162  T const & s);
    +
    163 
    +
    164  template <typename T, precision P>
    +
    165  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    +
    166  T const & s,
    +
    167  tmat2x3<T, P> const & m);
    +
    168 
    +
    169  template <typename T, precision P>
    +
    170  GLM_FUNC_DECL typename tmat2x3<T, P>::col_type operator* (
    +
    171  tmat2x3<T, P> const & m,
    +
    172  typename tmat2x3<T, P>::row_type const & v);
    +
    173 
    +
    174  template <typename T, precision P>
    +
    175  GLM_FUNC_DECL typename tmat2x3<T, P>::row_type operator* (
    +
    176  typename tmat2x3<T, P>::col_type const & v,
    +
    177  tmat2x3<T, P> const & m);
    +
    178 
    +
    179  template <typename T, precision P>
    +
    180  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    +
    181  tmat2x3<T, P> const & m1,
    +
    182  tmat2x2<T, P> const & m2);
    +
    183 
    +
    184  template <typename T, precision P>
    +
    185  GLM_FUNC_DECL tmat3x3<T, P> operator* (
    +
    186  tmat2x3<T, P> const & m1,
    +
    187  tmat3x2<T, P> const & m2);
    +
    188 
    +
    189  template <typename T, precision P>
    +
    190  GLM_FUNC_DECL tmat4x3<T, P> operator* (
    +
    191  tmat2x3<T, P> const & m1,
    +
    192  tmat4x2<T, P> const & m2);
    +
    193 
    +
    194  template <typename T, precision P>
    +
    195  GLM_FUNC_DECL tmat2x3<T, P> operator/ (
    +
    196  tmat2x3<T, P> const & m,
    +
    197  T const & s);
    +
    198 
    +
    199  template <typename T, precision P>
    +
    200  GLM_FUNC_DECL tmat2x3<T, P> operator/ (
    +
    201  T const & s,
    +
    202  tmat2x3<T, P> const & m);
    +
    203 
    +
    204  // Unary constant operators
    +
    205  template <typename T, precision P>
    +
    206  GLM_FUNC_DECL tmat2x3<T, P> const operator- (
    +
    207  tmat2x3<T, P> const & m);
    +
    208 }//namespace glm
    +
    209 
    +
    210 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    211 #include "type_mat2x3.inl"
    +
    212 #endif
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00123.html b/doc/api/a00123.html new file mode 100644 index 00000000..c18be3f9 --- /dev/null +++ b/doc/api/a00123.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_mat2x4.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_mat2x4.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2006-08-05 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat2x4.hpp.

    +
    + + + + diff --git a/doc/api/a00123_source.html b/doc/api/a00123_source.html index e5da0b8d..f164c0d2 100644 --- a/doc/api/a00123_source.html +++ b/doc/api/a00123_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat2x2.hpp Source File + +0.9.6: type_mat2x4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,243 +41,206 @@
    -
    type_mat2x2.hpp
    +
    type_mat2x4.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat2x2
    -
    30 #define glm_core_type_mat2x2
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec2.hpp"
    -
    34 #include "type_mat.hpp"
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec2.hpp"
    +
    33 #include "type_vec4.hpp"
    +
    34 #include "type_mat.hpp"
    35 #include <limits>
    -
    36 
    -
    37 namespace glm{
    -
    38 namespace detail
    +
    36 #include <cstddef>
    +
    37 
    +
    38 namespace glm
    39 {
    -
    40  template <typename T, precision P>
    -
    41  struct tmat2x2
    +
    40  template <typename T, precision P = defaultp>
    +
    41  struct tmat2x4
    42  {
    -
    43  enum ctor{_null};
    -
    44  typedef T value_type;
    -
    45  typedef std::size_t size_type;
    -
    46  typedef tvec2<T, P> col_type;
    -
    47  typedef tvec2<T, P> row_type;
    -
    48  typedef tmat2x2<T, P> type;
    -
    49  typedef tmat2x2<T, P> transpose_type;
    -
    50 
    -
    51  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    52 
    -
    53  template <typename U, precision Q>
    -
    54  friend tvec2<U, Q> operator/(tmat2x2<U, Q> const & m, tvec2<U, Q> const & v);
    -
    55  template <typename U, precision Q>
    -
    56  friend tvec2<U, Q> operator/(tvec2<U, Q> const & v, tmat2x2<U, Q> const & m);
    -
    57 
    -
    58  private:
    -
    60  col_type value[2];
    -
    62 
    -
    63  public:
    -
    65  // Constructors
    -
    66  GLM_FUNC_DECL tmat2x2();
    -
    67  GLM_FUNC_DECL tmat2x2(tmat2x2<T, P> const & m);
    -
    68  template <precision Q>
    -
    69  GLM_FUNC_DECL tmat2x2(tmat2x2<T, Q> const & m);
    -
    70 
    -
    71  GLM_FUNC_DECL explicit tmat2x2(
    -
    72  ctor Null);
    -
    73  GLM_FUNC_DECL explicit tmat2x2(
    -
    74  T const & x);
    -
    75  GLM_FUNC_DECL explicit tmat2x2(
    -
    76  T const & x1, T const & y1,
    -
    77  T const & x2, T const & y2);
    -
    78  GLM_FUNC_DECL explicit tmat2x2(
    -
    79  col_type const & v1,
    -
    80  col_type const & v2);
    -
    81 
    -
    82 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    83  template <typename U>
    -
    84  GLM_FUNC_DECL tmat2x2(std::initializer_list<U> m);
    -
    85 
    -
    86  GLM_FUNC_DECL tmat2x2(std::initializer_list<tvec2<T, P> > m);
    -
    87 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    88 
    -
    90  // Conversions
    -
    91  template <typename U, typename V, typename M, typename N>
    -
    92  GLM_FUNC_DECL explicit tmat2x2(
    -
    93  U const & x1, V const & y1,
    -
    94  M const & x2, N const & y2);
    -
    95 
    -
    96  template <typename U, typename V>
    -
    97  GLM_FUNC_DECL explicit tmat2x2(
    -
    98  tvec2<U, P> const & v1,
    -
    99  tvec2<V, P> const & v2);
    +
    43  typedef T value_type;
    +
    44  typedef std::size_t size_type;
    +
    45  typedef tvec4<T, P> col_type;
    +
    46  typedef tvec2<T, P> row_type;
    +
    47  typedef tmat2x4<T, P> type;
    +
    48  typedef tmat4x2<T, P> transpose_type;
    +
    49 
    +
    50 # ifdef GLM_FORCE_SIZE_FUNC
    +
    51  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    52 # else
    +
    53  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    54 # endif//GLM_FORCE_SIZE_FUNC
    +
    55 
    +
    56  private:
    +
    58  col_type value[2];
    +
    60 
    +
    61  public:
    +
    62  // Constructors
    +
    63  GLM_FUNC_DECL tmat2x4();
    +
    64  template <precision Q>
    +
    65  GLM_FUNC_DECL tmat2x4(tmat2x4<T, Q> const & m);
    +
    66 
    +
    67  GLM_FUNC_DECL explicit tmat2x4(ctor);
    +
    68  GLM_FUNC_DECL explicit tmat2x4(T const & s);
    +
    69  GLM_FUNC_DECL tmat2x4(
    +
    70  T const & x0, T const & y0, T const & z0, T const & w0,
    +
    71  T const & x1, T const & y1, T const & z1, T const & w1);
    +
    72  GLM_FUNC_DECL tmat2x4(
    +
    73  col_type const & v0,
    +
    74  col_type const & v1);
    +
    75 
    +
    77  // Conversions
    +
    78  template <
    +
    79  typename X1, typename Y1, typename Z1, typename W1,
    +
    80  typename X2, typename Y2, typename Z2, typename W2>
    +
    81  GLM_FUNC_DECL tmat2x4(
    +
    82  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
    +
    83  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2);
    +
    84 
    +
    85  template <typename U, typename V>
    +
    86  GLM_FUNC_DECL tmat2x4(
    +
    87  tvec4<U, P> const & v1,
    +
    88  tvec4<V, P> const & v2);
    +
    89 
    +
    91  // Matrix conversions
    +
    92 
    +
    93 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    94  template <typename U, precision Q>
    +
    95  GLM_FUNC_DECL explicit tmat2x4(tmat2x4<U, Q> const & m);
    +
    96 # else
    +
    97  template <typename U, precision Q>
    +
    98  GLM_FUNC_DECL tmat2x4(tmat2x4<U, Q> const & m);
    +
    99 # endif
    100 
    -
    102  // Matrix conversions
    -
    103  template <typename U, precision Q>
    -
    104  GLM_FUNC_DECL explicit tmat2x2(tmat2x2<U, Q> const & m);
    -
    105 
    -
    106  GLM_FUNC_DECL explicit tmat2x2(tmat3x3<T, P> const & x);
    -
    107  GLM_FUNC_DECL explicit tmat2x2(tmat4x4<T, P> const & x);
    -
    108  GLM_FUNC_DECL explicit tmat2x2(tmat2x3<T, P> const & x);
    -
    109  GLM_FUNC_DECL explicit tmat2x2(tmat3x2<T, P> const & x);
    -
    110  GLM_FUNC_DECL explicit tmat2x2(tmat2x4<T, P> const & x);
    -
    111  GLM_FUNC_DECL explicit tmat2x2(tmat4x2<T, P> const & x);
    -
    112  GLM_FUNC_DECL explicit tmat2x2(tmat3x4<T, P> const & x);
    -
    113  GLM_FUNC_DECL explicit tmat2x2(tmat4x3<T, P> const & x);
    -
    114 
    -
    116  // Accesses
    -
    117 
    -
    118  GLM_FUNC_DECL col_type & operator[](length_t i);
    -
    119  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    -
    120 
    -
    121  // Unary updatable operators
    -
    122  GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<T, P> const & m);
    -
    123  template <typename U>
    -
    124  GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<U, P> const & m);
    -
    125  template <typename U>
    -
    126  GLM_FUNC_DECL tmat2x2<T, P> & operator+=(U s);
    -
    127  template <typename U>
    -
    128  GLM_FUNC_DECL tmat2x2<T, P> & operator+=(tmat2x2<U, P> const & m);
    -
    129  template <typename U>
    -
    130  GLM_FUNC_DECL tmat2x2<T, P> & operator-=(U s);
    -
    131  template <typename U>
    -
    132  GLM_FUNC_DECL tmat2x2<T, P> & operator-=(tmat2x2<U, P> const & m);
    -
    133  template <typename U>
    -
    134  GLM_FUNC_DECL tmat2x2<T, P> & operator*=(U s);
    -
    135  template <typename U>
    -
    136  GLM_FUNC_DECL tmat2x2<T, P> & operator*=(tmat2x2<U, P> const & m);
    -
    137  template <typename U>
    -
    138  GLM_FUNC_DECL tmat2x2<T, P> & operator/=(U s);
    -
    139  template <typename U>
    -
    140  GLM_FUNC_DECL tmat2x2<T, P> & operator/=(tmat2x2<U, P> const & m);
    -
    141 
    -
    143  // Increment and decrement operators
    +
    101  GLM_FUNC_DECL explicit tmat2x4(tmat2x2<T, P> const & x);
    +
    102  GLM_FUNC_DECL explicit tmat2x4(tmat3x3<T, P> const & x);
    +
    103  GLM_FUNC_DECL explicit tmat2x4(tmat4x4<T, P> const & x);
    +
    104  GLM_FUNC_DECL explicit tmat2x4(tmat2x3<T, P> const & x);
    +
    105  GLM_FUNC_DECL explicit tmat2x4(tmat3x2<T, P> const & x);
    +
    106  GLM_FUNC_DECL explicit tmat2x4(tmat3x4<T, P> const & x);
    +
    107  GLM_FUNC_DECL explicit tmat2x4(tmat4x2<T, P> const & x);
    +
    108  GLM_FUNC_DECL explicit tmat2x4(tmat4x3<T, P> const & x);
    +
    109 
    +
    110  // Accesses
    +
    111  GLM_FUNC_DECL col_type & operator[](length_t i);
    +
    112  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    +
    113 
    +
    114  template <typename U>
    +
    115  GLM_FUNC_DECL tmat2x4<T, P>& operator= (tmat2x4<U, P> const & m);
    +
    116  template <typename U>
    +
    117  GLM_FUNC_DECL tmat2x4<T, P>& operator+= (U s);
    +
    118  template <typename U>
    +
    119  GLM_FUNC_DECL tmat2x4<T, P>& operator+= (tmat2x4<U, P> const & m);
    +
    120  template <typename U>
    +
    121  GLM_FUNC_DECL tmat2x4<T, P>& operator-= (U s);
    +
    122  template <typename U>
    +
    123  GLM_FUNC_DECL tmat2x4<T, P>& operator-= (tmat2x4<U, P> const & m);
    +
    124  template <typename U>
    +
    125  GLM_FUNC_DECL tmat2x4<T, P>& operator*= (U s);
    +
    126  template <typename U>
    +
    127  GLM_FUNC_DECL tmat2x4<T, P>& operator/= (U s);
    +
    128 
    +
    130  // Increment and decrement operators
    +
    131 
    +
    132  GLM_FUNC_DECL tmat2x4<T, P> & operator++ ();
    +
    133  GLM_FUNC_DECL tmat2x4<T, P> & operator-- ();
    +
    134  GLM_FUNC_DECL tmat2x4<T, P> operator++(int);
    +
    135  GLM_FUNC_DECL tmat2x4<T, P> operator--(int);
    +
    136  };
    +
    137 
    +
    138  // Binary operators
    +
    139 
    +
    140  template <typename T, precision P>
    +
    141  GLM_FUNC_DECL tmat2x4<T, P> operator+ (
    +
    142  tmat2x4<T, P> const & m,
    +
    143  T const & s);
    144 
    -
    145  GLM_FUNC_DECL tmat2x2<T, P> & operator++ ();
    -
    146  GLM_FUNC_DECL tmat2x2<T, P> & operator-- ();
    -
    147  GLM_FUNC_DECL tmat2x2<T, P> operator++(int);
    -
    148  GLM_FUNC_DECL tmat2x2<T, P> operator--(int);
    -
    149  };
    -
    150 
    -
    151  template <typename T, precision P>
    -
    152  GLM_FUNC_DECL tmat2x2<T, P> compute_inverse_mat2(tmat2x2<T, P> const & m);
    -
    153 
    -
    154  // Binary operators
    +
    145  template <typename T, precision P>
    +
    146  GLM_FUNC_DECL tmat2x4<T, P> operator+ (
    +
    147  tmat2x4<T, P> const & m1,
    +
    148  tmat2x4<T, P> const & m2);
    +
    149 
    +
    150  template <typename T, precision P>
    +
    151  GLM_FUNC_DECL tmat2x4<T, P> operator- (
    +
    152  tmat2x4<T, P> const & m,
    +
    153  T const & s);
    +
    154 
    155  template <typename T, precision P>
    -
    156  GLM_FUNC_DECL tmat2x2<T, P> operator+ (
    -
    157  tmat2x2<T, P> const & m,
    -
    158  T const & s);
    +
    156  GLM_FUNC_DECL tmat2x4<T, P> operator- (
    +
    157  tmat2x4<T, P> const & m1,
    +
    158  tmat2x4<T, P> const & m2);
    159 
    160  template <typename T, precision P>
    -
    161  GLM_FUNC_DECL tmat2x2<T, P> operator+ (
    -
    162  T const & s,
    -
    163  tmat2x2<T, P> const & m);
    +
    161  GLM_FUNC_DECL tmat2x4<T, P> operator* (
    +
    162  tmat2x4<T, P> const & m,
    +
    163  T const & s);
    164 
    165  template <typename T, precision P>
    -
    166  GLM_FUNC_DECL tmat2x2<T, P> operator+ (
    -
    167  tmat2x2<T, P> const & m1,
    -
    168  tmat2x2<T, P> const & m2);
    +
    166  GLM_FUNC_DECL tmat2x4<T, P> operator* (
    +
    167  T const & s,
    +
    168  tmat2x4<T, P> const & m);
    169 
    170  template <typename T, precision P>
    -
    171  GLM_FUNC_DECL tmat2x2<T, P> operator- (
    -
    172  tmat2x2<T, P> const & m,
    -
    173  T const & s);
    +
    171  GLM_FUNC_DECL typename tmat2x4<T, P>::col_type operator* (
    +
    172  tmat2x4<T, P> const & m,
    +
    173  typename tmat2x4<T, P>::row_type const & v);
    174 
    175  template <typename T, precision P>
    -
    176  GLM_FUNC_DECL tmat2x2<T, P> operator- (
    -
    177  T const & s,
    -
    178  tmat2x2<T, P> const & m);
    +
    176  GLM_FUNC_DECL typename tmat2x4<T, P>::row_type operator* (
    +
    177  typename tmat2x4<T, P>::col_type const & v,
    +
    178  tmat2x4<T, P> const & m);
    179 
    180  template <typename T, precision P>
    -
    181  GLM_FUNC_DECL tmat2x2<T, P> operator- (
    -
    182  tmat2x2<T, P> const & m1,
    -
    183  tmat2x2<T, P> const & m2);
    -
    184 
    +
    181  GLM_FUNC_DECL tmat4x4<T, P> operator* (
    +
    182  tmat2x4<T, P> const & m1,
    +
    183  tmat4x2<T, P> const & m2);
    +
    184 
    185  template <typename T, precision P>
    -
    186  GLM_FUNC_DECL tmat2x2<T, P> operator* (
    -
    187  tmat2x2<T, P> const & m,
    -
    188  T const & s);
    -
    189 
    +
    186  GLM_FUNC_DECL tmat2x4<T, P> operator* (
    +
    187  tmat2x4<T, P> const & m1,
    +
    188  tmat2x2<T, P> const & m2);
    +
    189 
    190  template <typename T, precision P>
    -
    191  GLM_FUNC_DECL tmat2x2<T, P> operator* (
    -
    192  T const & s,
    -
    193  tmat2x2<T, P> const & m);
    +
    191  GLM_FUNC_DECL tmat3x4<T, P> operator* (
    +
    192  tmat2x4<T, P> const & m1,
    +
    193  tmat3x2<T, P> const & m2);
    194 
    195  template <typename T, precision P>
    -
    196  GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator* (
    -
    197  tmat2x2<T, P> const & m,
    -
    198  typename tmat2x2<T, P>::row_type const & v);
    +
    196  GLM_FUNC_DECL tmat2x4<T, P> operator/ (
    +
    197  tmat2x4<T, P> const & m,
    +
    198  T s);
    199 
    -
    200  template <typename T, precision P>
    -
    201  GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator* (
    -
    202  typename tmat2x2<T, P>::col_type const & v,
    -
    203  tmat2x2<T, P> const & m);
    +
    200  template <typename T, precision P>
    +
    201  GLM_FUNC_DECL tmat2x4<T, P> operator/ (
    +
    202  T s,
    +
    203  tmat2x4<T, P> const & m);
    204 
    -
    205  template <typename T, precision P>
    -
    206  GLM_FUNC_DECL tmat2x2<T, P> operator* (
    -
    207  tmat2x2<T, P> const & m1,
    -
    208  tmat2x2<T, P> const & m2);
    -
    209 
    -
    210  template <typename T, precision P>
    -
    211  GLM_FUNC_DECL tmat3x2<T, P> operator* (
    -
    212  tmat2x2<T, P> const & m1,
    -
    213  tmat3x2<T, P> const & m2);
    -
    214 
    -
    215  template <typename T, precision P>
    -
    216  GLM_FUNC_DECL tmat4x2<T, P> operator* (
    -
    217  tmat2x2<T, P> const & m1,
    -
    218  tmat4x2<T, P> const & m2);
    -
    219 
    -
    220  template <typename T, precision P>
    -
    221  GLM_FUNC_DECL tmat2x2<T, P> operator/ (
    -
    222  tmat2x2<T, P> const & m,
    -
    223  T const & s);
    -
    224 
    -
    225  template <typename T, precision P>
    -
    226  GLM_FUNC_DECL tmat2x2<T, P> operator/ (
    -
    227  T const & s,
    -
    228  tmat2x2<T, P> const & m);
    -
    229 
    -
    230  template <typename T, precision P>
    -
    231  GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator/ (
    -
    232  tmat2x2<T, P> const & m,
    -
    233  typename tmat2x2<T, P>::row_type const & v);
    -
    234 
    -
    235  template <typename T, precision P>
    -
    236  GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator/ (
    -
    237  typename tmat2x2<T, P>::col_type const & v,
    -
    238  tmat2x2<T, P> const & m);
    -
    239 
    -
    240  template <typename T, precision P>
    -
    241  GLM_FUNC_DECL tmat2x2<T, P> operator/ (
    -
    242  tmat2x2<T, P> const & m1,
    -
    243  tmat2x2<T, P> const & m2);
    -
    244 
    -
    245  // Unary constant operators
    -
    246  template <typename T, precision P>
    -
    247  GLM_FUNC_DECL tmat2x2<T, P> const operator-(
    -
    248  tmat2x2<T, P> const & m);
    -
    249 } //namespace detail
    -
    250 } //namespace glm
    -
    251 
    -
    252 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    253 #include "type_mat2x2.inl"
    -
    254 #endif
    -
    255 
    -
    256 #endif //glm_core_type_mat2x2
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    205  // Unary constant operators
    +
    206  template <typename T, precision P>
    +
    207  GLM_FUNC_DECL tmat2x4<T, P> const operator- (
    +
    208  tmat2x4<T, P> const & m);
    +
    209 }//namespace glm
    +
    210 
    +
    211 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    212 #include "type_mat2x4.inl"
    +
    213 #endif
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00124.html b/doc/api/a00124.html new file mode 100644 index 00000000..c4179458 --- /dev/null +++ b/doc/api/a00124.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_mat3x2.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_mat3x2.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2006-08-05 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat3x2.hpp.

    +
    + + + + diff --git a/doc/api/a00124_source.html b/doc/api/a00124_source.html index 82a9e574..c1f2bc80 100644 --- a/doc/api/a00124_source.html +++ b/doc/api/a00124_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat2x3.hpp Source File + +0.9.6: type_mat3x2.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,209 +41,211 @@
    -
    type_mat2x3.hpp
    +
    type_mat3x2.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat2x3
    -
    30 #define glm_core_type_mat2x3
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec2.hpp"
    -
    34 #include "type_vec3.hpp"
    -
    35 #include "type_mat.hpp"
    -
    36 #include <limits>
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec2.hpp"
    +
    33 #include "type_vec3.hpp"
    +
    34 #include "type_mat.hpp"
    +
    35 #include <limits>
    +
    36 #include <cstddef>
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41  template <typename T, precision P>
    -
    42  struct tmat2x3
    -
    43  {
    -
    44  enum ctor{_null};
    -
    45  typedef T value_type;
    -
    46  typedef std::size_t size_type;
    -
    47  typedef tvec3<T, P> col_type;
    -
    48  typedef tvec2<T, P> row_type;
    -
    49  typedef tmat2x3<T, P> type;
    -
    50  typedef tmat3x2<T, P> transpose_type;
    -
    51 
    -
    52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    53 
    -
    54  private:
    -
    55  // Data
    -
    56  col_type value[2];
    -
    57 
    -
    58  public:
    -
    59  // Constructors
    -
    60  GLM_FUNC_DECL tmat2x3();
    -
    61  GLM_FUNC_DECL tmat2x3(tmat2x3<T, P> const & m);
    -
    62  template <precision Q>
    -
    63  GLM_FUNC_DECL tmat2x3(tmat2x3<T, Q> const & m);
    -
    64 
    -
    65  GLM_FUNC_DECL explicit tmat2x3(
    -
    66  ctor);
    -
    67  GLM_FUNC_DECL explicit tmat2x3(
    -
    68  T const & s);
    -
    69  GLM_FUNC_DECL explicit tmat2x3(
    -
    70  T const & x0, T const & y0, T const & z0,
    -
    71  T const & x1, T const & y1, T const & z1);
    -
    72  GLM_FUNC_DECL explicit tmat2x3(
    -
    73  col_type const & v0,
    -
    74  col_type const & v1);
    -
    75 
    -
    76 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    77  template <typename U>
    -
    78  GLM_FUNC_DECL tmat2x3(std::initializer_list<U> m);
    -
    79 
    -
    80  GLM_FUNC_DECL tmat2x3(std::initializer_list<tvec3<T, P> > m);
    -
    81 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    82 
    -
    84  // Conversions
    -
    85  template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>
    -
    86  GLM_FUNC_DECL explicit tmat2x3(
    -
    87  X1 const & x1, Y1 const & y1, Z1 const & z1,
    -
    88  X2 const & x2, Y2 const & y2, Z2 const & z2);
    +
    38 namespace glm
    +
    39 {
    +
    40  template <typename T, precision P = defaultp>
    +
    41  struct tmat3x2
    +
    42  {
    +
    43  typedef T value_type;
    +
    44  typedef std::size_t size_type;
    +
    45  typedef tvec2<T, P> col_type;
    +
    46  typedef tvec3<T, P> row_type;
    +
    47  typedef tmat3x2<T, P> type;
    +
    48  typedef tmat2x3<T, P> transpose_type;
    +
    49 
    +
    50 # ifdef GLM_FORCE_SIZE_FUNC
    +
    51  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    52 # else
    +
    53  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    54 # endif//GLM_FORCE_SIZE_FUNC
    +
    55 
    +
    56  private:
    +
    58  col_type value[3];
    +
    60 
    +
    61  public:
    +
    62  // Constructors
    +
    63  GLM_FUNC_DECL tmat3x2();
    +
    64  template <precision Q>
    +
    65  GLM_FUNC_DECL tmat3x2(tmat3x2<T, Q> const & m);
    +
    66 
    +
    67  GLM_FUNC_DECL explicit tmat3x2(ctor);
    +
    68  GLM_FUNC_DECL explicit tmat3x2(T const & s);
    +
    69  GLM_FUNC_DECL tmat3x2(
    +
    70  T const & x0, T const & y0,
    +
    71  T const & x1, T const & y1,
    +
    72  T const & x2, T const & y2);
    +
    73  GLM_FUNC_DECL tmat3x2(
    +
    74  col_type const & v0,
    +
    75  col_type const & v1,
    +
    76  col_type const & v2);
    +
    77 
    +
    79  // Conversions
    +
    80 
    +
    81  template<
    +
    82  typename X1, typename Y1,
    +
    83  typename X2, typename Y2,
    +
    84  typename X3, typename Y3>
    +
    85  GLM_FUNC_DECL tmat3x2(
    +
    86  X1 const & x1, Y1 const & y1,
    +
    87  X2 const & x2, Y2 const & y2,
    +
    88  X3 const & x3, Y3 const & y3);
    89 
    -
    90  template <typename U, typename V>
    -
    91  GLM_FUNC_DECL explicit tmat2x3(
    -
    92  tvec3<U, P> const & v1,
    -
    93  tvec3<V, P> const & v2);
    -
    94 
    -
    96  // Matrix conversion
    -
    97  template <typename U, precision Q>
    -
    98  GLM_FUNC_DECL explicit tmat2x3(tmat2x3<U, Q> const & m);
    -
    99 
    -
    100  GLM_FUNC_DECL explicit tmat2x3(tmat2x2<T, P> const & x);
    -
    101  GLM_FUNC_DECL explicit tmat2x3(tmat3x3<T, P> const & x);
    -
    102  GLM_FUNC_DECL explicit tmat2x3(tmat4x4<T, P> const & x);
    -
    103  GLM_FUNC_DECL explicit tmat2x3(tmat2x4<T, P> const & x);
    -
    104  GLM_FUNC_DECL explicit tmat2x3(tmat3x2<T, P> const & x);
    -
    105  GLM_FUNC_DECL explicit tmat2x3(tmat3x4<T, P> const & x);
    -
    106  GLM_FUNC_DECL explicit tmat2x3(tmat4x2<T, P> const & x);
    -
    107  GLM_FUNC_DECL explicit tmat2x3(tmat4x3<T, P> const & x);
    -
    108 
    -
    109  // Accesses
    -
    110  GLM_FUNC_DECL col_type & operator[](length_t i);
    -
    111  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    -
    112 
    -
    113  // Unary updatable operators
    -
    114  GLM_FUNC_DECL tmat2x3<T, P> & operator= (tmat2x3<T, P> const & m);
    -
    115  template <typename U>
    -
    116  GLM_FUNC_DECL tmat2x3<T, P> & operator= (tmat2x3<U, P> const & m);
    -
    117  template <typename U>
    -
    118  GLM_FUNC_DECL tmat2x3<T, P> & operator+= (U s);
    -
    119  template <typename U>
    -
    120  GLM_FUNC_DECL tmat2x3<T, P> & operator+= (tmat2x3<U, P> const & m);
    -
    121  template <typename U>
    -
    122  GLM_FUNC_DECL tmat2x3<T, P> & operator-= (U s);
    -
    123  template <typename U>
    -
    124  GLM_FUNC_DECL tmat2x3<T, P> & operator-= (tmat2x3<U, P> const & m);
    -
    125  template <typename U>
    -
    126  GLM_FUNC_DECL tmat2x3<T, P> & operator*= (U s);
    -
    127  template <typename U>
    -
    128  GLM_FUNC_DECL tmat2x3<T, P> & operator/= (U s);
    -
    129 
    -
    131  // Increment and decrement operators
    -
    132 
    -
    133  GLM_FUNC_DECL tmat2x3<T, P> & operator++ ();
    -
    134  GLM_FUNC_DECL tmat2x3<T, P> & operator-- ();
    -
    135  GLM_FUNC_DECL tmat2x3<T, P> operator++(int);
    -
    136  GLM_FUNC_DECL tmat2x3<T, P> operator--(int);
    -
    137  };
    -
    138 
    -
    139  // Binary operators
    -
    140 
    -
    141  template <typename T, precision P>
    -
    142  GLM_FUNC_DECL tmat2x3<T, P> operator+ (
    -
    143  tmat2x3<T, P> const & m,
    -
    144  T const & s);
    -
    145 
    -
    146  template <typename T, precision P>
    -
    147  tmat2x3<T, P> operator+ (
    -
    148  tmat2x3<T, P> const & m1,
    -
    149  tmat2x3<T, P> const & m2);
    -
    150 
    -
    151  template <typename T, precision P>
    -
    152  GLM_FUNC_DECL tmat2x3<T, P> operator- (
    -
    153  tmat2x3<T, P> const & m,
    -
    154  T const & s);
    -
    155 
    -
    156  template <typename T, precision P>
    -
    157  GLM_FUNC_DECL tmat2x3<T, P> operator- (
    -
    158  tmat2x3<T, P> const & m1,
    -
    159  tmat2x3<T, P> const & m2);
    -
    160 
    -
    161  template <typename T, precision P>
    -
    162  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    -
    163  tmat2x3<T, P> const & m,
    -
    164  T const & s);
    -
    165 
    -
    166  template <typename T, precision P>
    -
    167  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    -
    168  T const & s,
    -
    169  tmat2x3<T, P> const & m);
    -
    170 
    -
    171  template <typename T, precision P>
    -
    172  GLM_FUNC_DECL typename tmat2x3<T, P>::col_type operator* (
    -
    173  tmat2x3<T, P> const & m,
    -
    174  typename tmat2x3<T, P>::row_type const & v);
    -
    175 
    -
    176  template <typename T, precision P>
    -
    177  GLM_FUNC_DECL typename tmat2x3<T, P>::row_type operator* (
    -
    178  typename tmat2x3<T, P>::col_type const & v,
    -
    179  tmat2x3<T, P> const & m);
    -
    180 
    -
    181  template <typename T, precision P>
    -
    182  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    -
    183  tmat2x3<T, P> const & m1,
    -
    184  tmat2x2<T, P> const & m2);
    -
    185 
    -
    186  template <typename T, precision P>
    -
    187  GLM_FUNC_DECL tmat3x3<T, P> operator* (
    -
    188  tmat2x3<T, P> const & m1,
    -
    189  tmat3x2<T, P> const & m2);
    -
    190 
    -
    191  template <typename T, precision P>
    -
    192  GLM_FUNC_DECL tmat4x3<T, P> operator* (
    -
    193  tmat2x3<T, P> const & m1,
    -
    194  tmat4x2<T, P> const & m2);
    -
    195 
    -
    196  template <typename T, precision P>
    -
    197  GLM_FUNC_DECL tmat2x3<T, P> operator/ (
    -
    198  tmat2x3<T, P> const & m,
    -
    199  T const & s);
    -
    200 
    -
    201  template <typename T, precision P>
    -
    202  GLM_FUNC_DECL tmat2x3<T, P> operator/ (
    -
    203  T const & s,
    -
    204  tmat2x3<T, P> const & m);
    -
    205 
    -
    206  // Unary constant operators
    -
    207  template <typename T, precision P>
    -
    208  GLM_FUNC_DECL tmat2x3<T, P> const operator- (
    -
    209  tmat2x3<T, P> const & m);
    -
    210 
    -
    211 }//namespace detail
    -
    212 }//namespace glm
    -
    213 
    -
    214 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    215 #include "type_mat2x3.inl"
    -
    216 #endif
    -
    217 
    -
    218 #endif //glm_core_type_mat2x3
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    90  template <typename V1, typename V2, typename V3>
    +
    91  GLM_FUNC_DECL tmat3x2(
    +
    92  tvec2<V1, P> const & v1,
    +
    93  tvec2<V2, P> const & v2,
    +
    94  tvec2<V3, P> const & v3);
    +
    95 
    +
    97  // Matrix conversions
    +
    98 
    +
    99 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    100  template <typename U, precision Q>
    +
    101  GLM_FUNC_DECL explicit tmat3x2(tmat3x2<U, Q> const & m);
    +
    102 # else
    +
    103  template <typename U, precision Q>
    +
    104  GLM_FUNC_DECL tmat3x2(tmat3x2<U, Q> const & m);
    +
    105 # endif
    +
    106 
    +
    107  GLM_FUNC_DECL explicit tmat3x2(tmat2x2<T, P> const & x);
    +
    108  GLM_FUNC_DECL explicit tmat3x2(tmat3x3<T, P> const & x);
    +
    109  GLM_FUNC_DECL explicit tmat3x2(tmat4x4<T, P> const & x);
    +
    110  GLM_FUNC_DECL explicit tmat3x2(tmat2x3<T, P> const & x);
    +
    111  GLM_FUNC_DECL explicit tmat3x2(tmat2x4<T, P> const & x);
    +
    112  GLM_FUNC_DECL explicit tmat3x2(tmat3x4<T, P> const & x);
    +
    113  GLM_FUNC_DECL explicit tmat3x2(tmat4x2<T, P> const & x);
    +
    114  GLM_FUNC_DECL explicit tmat3x2(tmat4x3<T, P> const & x);
    +
    115 
    +
    116  // Accesses
    +
    117  GLM_FUNC_DECL col_type & operator[](length_t i);
    +
    118  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    +
    119 
    +
    120  template <typename U>
    +
    121  GLM_FUNC_DECL tmat3x2<T, P> & operator= (tmat3x2<U, P> const & m);
    +
    122  template <typename U>
    +
    123  GLM_FUNC_DECL tmat3x2<T, P> & operator+= (U s);
    +
    124  template <typename U>
    +
    125  GLM_FUNC_DECL tmat3x2<T, P> & operator+= (tmat3x2<U, P> const & m);
    +
    126  template <typename U>
    +
    127  GLM_FUNC_DECL tmat3x2<T, P> & operator-= (U s);
    +
    128  template <typename U>
    +
    129  GLM_FUNC_DECL tmat3x2<T, P> & operator-= (tmat3x2<U, P> const & m);
    +
    130  template <typename U>
    +
    131  GLM_FUNC_DECL tmat3x2<T, P> & operator*= (U s);
    +
    132  template <typename U>
    +
    133  GLM_FUNC_DECL tmat3x2<T, P> & operator/= (U s);
    +
    134 
    +
    136  // Increment and decrement operators
    +
    137 
    +
    138  GLM_FUNC_DECL tmat3x2<T, P> & operator++ ();
    +
    139  GLM_FUNC_DECL tmat3x2<T, P> & operator-- ();
    +
    140  GLM_FUNC_DECL tmat3x2<T, P> operator++(int);
    +
    141  GLM_FUNC_DECL tmat3x2<T, P> operator--(int);
    +
    142  };
    +
    143 
    +
    144  // Binary operators
    +
    145  template <typename T, precision P>
    +
    146  GLM_FUNC_DECL tmat3x2<T, P> operator+ (
    +
    147  tmat3x2<T, P> const & m,
    +
    148  T const & s);
    +
    149 
    +
    150  template <typename T, precision P>
    +
    151  GLM_FUNC_DECL tmat3x2<T, P> operator+ (
    +
    152  tmat3x2<T, P> const & m1,
    +
    153  tmat3x2<T, P> const & m2);
    +
    154 
    +
    155  template <typename T, precision P>
    +
    156  GLM_FUNC_DECL tmat3x2<T, P> operator- (
    +
    157  tmat3x2<T, P> const & m,
    +
    158  T const & s);
    +
    159 
    +
    160  template <typename T, precision P>
    +
    161  GLM_FUNC_DECL tmat3x2<T, P> operator- (
    +
    162  tmat3x2<T, P> const & m1,
    +
    163  tmat3x2<T, P> const & m2);
    +
    164 
    +
    165  template <typename T, precision P>
    +
    166  GLM_FUNC_DECL tmat3x2<T, P> operator* (
    +
    167  tmat3x2<T, P> const & m,
    +
    168  T const & s);
    +
    169 
    +
    170  template <typename T, precision P>
    +
    171  GLM_FUNC_DECL tmat3x2<T, P> operator* (
    +
    172  T const & s,
    +
    173  tmat3x2<T, P> const & m);
    +
    174 
    +
    175  template <typename T, precision P>
    +
    176  GLM_FUNC_DECL typename tmat3x2<T, P>::col_type operator* (
    +
    177  tmat3x2<T, P> const & m,
    +
    178  typename tmat3x2<T, P>::row_type const & v);
    +
    179 
    +
    180  template <typename T, precision P>
    +
    181  GLM_FUNC_DECL typename tmat3x2<T, P>::row_type operator* (
    +
    182  typename tmat3x2<T, P>::col_type const & v,
    +
    183  tmat3x2<T, P> const & m);
    +
    184 
    +
    185  template <typename T, precision P>
    +
    186  GLM_FUNC_DECL tmat2x2<T, P> operator* (
    +
    187  tmat3x2<T, P> const & m1,
    +
    188  tmat2x3<T, P> const & m2);
    +
    189 
    +
    190  template <typename T, precision P>
    +
    191  GLM_FUNC_DECL tmat3x2<T, P> operator* (
    +
    192  tmat3x2<T, P> const & m1,
    +
    193  tmat3x3<T, P> const & m2);
    +
    194 
    +
    195  template <typename T, precision P>
    +
    196  GLM_FUNC_DECL tmat4x2<T, P> operator* (
    +
    197  tmat3x2<T, P> const & m1,
    +
    198  tmat4x3<T, P> const & m2);
    +
    199 
    +
    200  template <typename T, precision P>
    +
    201  GLM_FUNC_DECL tmat3x2<T, P> operator/ (
    +
    202  tmat3x2<T, P> const & m,
    +
    203  T const & s);
    +
    204 
    +
    205  template <typename T, precision P>
    +
    206  GLM_FUNC_DECL tmat3x2<T, P> operator/ (
    +
    207  T const & s,
    +
    208  tmat3x2<T, P> const & m);
    +
    209 
    +
    210  // Unary constant operators
    +
    211  template <typename T, precision P>
    +
    212  GLM_FUNC_DECL tmat3x2<T, P> const operator-(
    +
    213  tmat3x2<T, P> const & m);
    +
    214 }//namespace glm
    +
    215 
    +
    216 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    217 #include "type_mat3x2.inl"
    +
    218 #endif
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00125.html b/doc/api/a00125.html new file mode 100644 index 00000000..99092c26 --- /dev/null +++ b/doc/api/a00125.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_mat3x3.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_mat3x3.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2005-01-27 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat3x3.hpp.

    +
    + + + + diff --git a/doc/api/a00125_source.html b/doc/api/a00125_source.html index 20cd0f18..ea9f656f 100644 --- a/doc/api/a00125_source.html +++ b/doc/api/a00125_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat2x4.hpp Source File + +0.9.6: type_mat3x3.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,211 +41,243 @@
    -
    type_mat2x4.hpp
    +
    type_mat3x3.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat2x4
    -
    30 #define glm_core_type_mat2x4
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec2.hpp"
    -
    34 #include "type_vec4.hpp"
    -
    35 #include "type_mat.hpp"
    -
    36 #include <limits>
    -
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41  template <typename T, precision P>
    -
    42  struct tmat2x4
    -
    43  {
    -
    44  enum ctor{_null};
    -
    45  typedef T value_type;
    -
    46  typedef std::size_t size_type;
    -
    47  typedef tvec4<T, P> col_type;
    -
    48  typedef tvec2<T, P> row_type;
    -
    49  typedef tmat2x4<T, P> type;
    -
    50  typedef tmat4x2<T, P> transpose_type;
    -
    51 
    -
    52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    53 
    -
    54  private:
    -
    55  // Data
    -
    56  col_type value[2];
    -
    57 
    -
    58  public:
    -
    59  // Constructors
    -
    60  GLM_FUNC_DECL tmat2x4();
    -
    61  GLM_FUNC_DECL tmat2x4(tmat2x4<T, P> const & m);
    -
    62  template <precision Q>
    -
    63  GLM_FUNC_DECL tmat2x4(tmat2x4<T, Q> const & m);
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec3.hpp"
    +
    33 #include "type_mat.hpp"
    +
    34 #include <limits>
    +
    35 #include <cstddef>
    +
    36 
    +
    37 namespace glm
    +
    38 {
    +
    39  template <typename T, precision P = defaultp>
    +
    40  struct tmat3x3
    +
    41  {
    +
    42  typedef T value_type;
    +
    43  typedef std::size_t size_type;
    +
    44  typedef tvec3<T, P> col_type;
    +
    45  typedef tvec3<T, P> row_type;
    +
    46  typedef tmat3x3<T, P> type;
    +
    47  typedef tmat3x3<T, P> transpose_type;
    +
    48 
    +
    49 # ifdef GLM_FORCE_SIZE_FUNC
    +
    50  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    51 # else
    +
    52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    53 # endif//GLM_FORCE_SIZE_FUNC
    +
    54 
    +
    55  template <typename U, precision Q>
    +
    56  friend tvec3<U, Q> operator/(tmat3x3<U, Q> const & m, tvec3<U, Q> const & v);
    +
    57  template <typename U, precision Q>
    +
    58  friend tvec3<U, Q> operator/(tvec3<U, Q> const & v, tmat3x3<U, Q> const & m);
    +
    59 
    +
    60  private:
    +
    62  col_type value[3];
    64 
    -
    65  GLM_FUNC_DECL explicit tmat2x4(
    -
    66  ctor);
    -
    67  GLM_FUNC_DECL explicit tmat2x4(
    -
    68  T const & s);
    -
    69  GLM_FUNC_DECL explicit tmat2x4(
    -
    70  T const & x0, T const & y0, T const & z0, T const & w0,
    -
    71  T const & x1, T const & y1, T const & z1, T const & w1);
    -
    72  GLM_FUNC_DECL explicit tmat2x4(
    -
    73  col_type const & v0,
    -
    74  col_type const & v1);
    -
    75 
    -
    76 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    77  template <typename U>
    -
    78  GLM_FUNC_DECL tmat2x4(std::initializer_list<U> m);
    -
    79 
    -
    80  GLM_FUNC_DECL tmat2x4(std::initializer_list<tvec4<T, P> > m);
    -
    81 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    82 
    -
    84  // Conversions
    -
    85  template <
    -
    86  typename X1, typename Y1, typename Z1, typename W1,
    -
    87  typename X2, typename Y2, typename Z2, typename W2>
    -
    88  GLM_FUNC_DECL explicit tmat2x4(
    -
    89  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
    -
    90  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2);
    -
    91 
    -
    92  template <typename U, typename V>
    -
    93  GLM_FUNC_DECL explicit tmat2x4(
    -
    94  tvec4<U, P> const & v1,
    -
    95  tvec4<V, P> const & v2);
    -
    96 
    -
    98  // Matrix conversions
    -
    99  template <typename U, precision Q>
    -
    100  GLM_FUNC_DECL explicit tmat2x4(tmat2x4<U, Q> const & m);
    -
    101 
    -
    102  GLM_FUNC_DECL explicit tmat2x4(tmat2x2<T, P> const & x);
    -
    103  GLM_FUNC_DECL explicit tmat2x4(tmat3x3<T, P> const & x);
    -
    104  GLM_FUNC_DECL explicit tmat2x4(tmat4x4<T, P> const & x);
    -
    105  GLM_FUNC_DECL explicit tmat2x4(tmat2x3<T, P> const & x);
    -
    106  GLM_FUNC_DECL explicit tmat2x4(tmat3x2<T, P> const & x);
    -
    107  GLM_FUNC_DECL explicit tmat2x4(tmat3x4<T, P> const & x);
    -
    108  GLM_FUNC_DECL explicit tmat2x4(tmat4x2<T, P> const & x);
    -
    109  GLM_FUNC_DECL explicit tmat2x4(tmat4x3<T, P> const & x);
    +
    65  public:
    +
    66  // Constructors
    +
    67  GLM_FUNC_DECL tmat3x3();
    +
    68  template <precision Q>
    +
    69  GLM_FUNC_DECL tmat3x3(tmat3x3<T, Q> const & m);
    +
    70 
    +
    71  GLM_FUNC_DECL explicit tmat3x3(ctor);
    +
    72  GLM_FUNC_DECL explicit tmat3x3(T const & s);
    +
    73  GLM_FUNC_DECL tmat3x3(
    +
    74  T const & x0, T const & y0, T const & z0,
    +
    75  T const & x1, T const & y1, T const & z1,
    +
    76  T const & x2, T const & y2, T const & z2);
    +
    77  GLM_FUNC_DECL tmat3x3(
    +
    78  col_type const & v0,
    +
    79  col_type const & v1,
    +
    80  col_type const & v2);
    +
    81 
    +
    83  // Conversions
    +
    84 
    +
    85  template<
    +
    86  typename X1, typename Y1, typename Z1,
    +
    87  typename X2, typename Y2, typename Z2,
    +
    88  typename X3, typename Y3, typename Z3>
    +
    89  GLM_FUNC_DECL tmat3x3(
    +
    90  X1 const & x1, Y1 const & y1, Z1 const & z1,
    +
    91  X2 const & x2, Y2 const & y2, Z2 const & z2,
    +
    92  X3 const & x3, Y3 const & y3, Z3 const & z3);
    +
    93 
    +
    94  template <typename V1, typename V2, typename V3>
    +
    95  GLM_FUNC_DECL tmat3x3(
    +
    96  tvec3<V1, P> const & v1,
    +
    97  tvec3<V2, P> const & v2,
    +
    98  tvec3<V3, P> const & v3);
    +
    99 
    +
    101  // Matrix conversions
    +
    102 
    +
    103 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    104  template <typename U, precision Q>
    +
    105  GLM_FUNC_DECL explicit tmat3x3(tmat3x3<U, Q> const & m);
    +
    106 # else
    +
    107  template <typename U, precision Q>
    +
    108  GLM_FUNC_DECL tmat3x3(tmat3x3<U, Q> const & m);
    +
    109 # endif
    110 
    -
    111  // Accesses
    -
    112  GLM_FUNC_DECL col_type & operator[](length_t i);
    -
    113  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    -
    114 
    -
    115  // Unary updatable operators
    -
    116  GLM_FUNC_DECL tmat2x4<T, P>& operator= (tmat2x4<T, P> const & m);
    -
    117  template <typename U>
    -
    118  GLM_FUNC_DECL tmat2x4<T, P>& operator= (tmat2x4<U, P> const & m);
    -
    119  template <typename U>
    -
    120  GLM_FUNC_DECL tmat2x4<T, P>& operator+= (U s);
    -
    121  template <typename U>
    -
    122  GLM_FUNC_DECL tmat2x4<T, P>& operator+= (tmat2x4<U, P> const & m);
    -
    123  template <typename U>
    -
    124  GLM_FUNC_DECL tmat2x4<T, P>& operator-= (U s);
    -
    125  template <typename U>
    -
    126  GLM_FUNC_DECL tmat2x4<T, P>& operator-= (tmat2x4<U, P> const & m);
    -
    127  template <typename U>
    -
    128  GLM_FUNC_DECL tmat2x4<T, P>& operator*= (U s);
    -
    129  template <typename U>
    -
    130  GLM_FUNC_DECL tmat2x4<T, P>& operator/= (U s);
    -
    131 
    -
    133  // Increment and decrement operators
    -
    134 
    -
    135  GLM_FUNC_DECL tmat2x4<T, P> & operator++ ();
    -
    136  GLM_FUNC_DECL tmat2x4<T, P> & operator-- ();
    -
    137  GLM_FUNC_DECL tmat2x4<T, P> operator++(int);
    -
    138  GLM_FUNC_DECL tmat2x4<T, P> operator--(int);
    -
    139  };
    -
    140 
    -
    141  // Binary operators
    +
    111  GLM_FUNC_DECL explicit tmat3x3(tmat2x2<T, P> const & x);
    +
    112  GLM_FUNC_DECL explicit tmat3x3(tmat4x4<T, P> const & x);
    +
    113  GLM_FUNC_DECL explicit tmat3x3(tmat2x3<T, P> const & x);
    +
    114  GLM_FUNC_DECL explicit tmat3x3(tmat3x2<T, P> const & x);
    +
    115  GLM_FUNC_DECL explicit tmat3x3(tmat2x4<T, P> const & x);
    +
    116  GLM_FUNC_DECL explicit tmat3x3(tmat4x2<T, P> const & x);
    +
    117  GLM_FUNC_DECL explicit tmat3x3(tmat3x4<T, P> const & x);
    +
    118  GLM_FUNC_DECL explicit tmat3x3(tmat4x3<T, P> const & x);
    +
    119 
    +
    120  // Accesses
    +
    121  GLM_FUNC_DECL col_type & operator[](length_t i);
    +
    122  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    +
    123 
    +
    124  template <typename U>
    +
    125  GLM_FUNC_DECL tmat3x3<T, P>& operator= (tmat3x3<U, P> const & m);
    +
    126  template <typename U>
    +
    127  GLM_FUNC_DECL tmat3x3<T, P>& operator+= (U s);
    +
    128  template <typename U>
    +
    129  GLM_FUNC_DECL tmat3x3<T, P>& operator+= (tmat3x3<U, P> const & m);
    +
    130  template <typename U>
    +
    131  GLM_FUNC_DECL tmat3x3<T, P>& operator-= (U s);
    +
    132  template <typename U>
    +
    133  GLM_FUNC_DECL tmat3x3<T, P>& operator-= (tmat3x3<U, P> const & m);
    +
    134  template <typename U>
    +
    135  GLM_FUNC_DECL tmat3x3<T, P>& operator*= (U s);
    +
    136  template <typename U>
    +
    137  GLM_FUNC_DECL tmat3x3<T, P>& operator*= (tmat3x3<U, P> const & m);
    +
    138  template <typename U>
    +
    139  GLM_FUNC_DECL tmat3x3<T, P>& operator/= (U s);
    +
    140  template <typename U>
    +
    141  GLM_FUNC_DECL tmat3x3<T, P>& operator/= (tmat3x3<U, P> const & m);
    142 
    -
    143  template <typename T, precision P>
    -
    144  GLM_FUNC_DECL tmat2x4<T, P> operator+ (
    -
    145  tmat2x4<T, P> const & m,
    -
    146  T const & s);
    -
    147 
    -
    148  template <typename T, precision P>
    -
    149  GLM_FUNC_DECL tmat2x4<T, P> operator+ (
    -
    150  tmat2x4<T, P> const & m1,
    -
    151  tmat2x4<T, P> const & m2);
    -
    152 
    +
    144  // Increment and decrement operators
    +
    145 
    +
    146  GLM_FUNC_DECL tmat3x3<T, P> & operator++ ();
    +
    147  GLM_FUNC_DECL tmat3x3<T, P> & operator-- ();
    +
    148  GLM_FUNC_DECL tmat3x3<T, P> operator++(int);
    +
    149  GLM_FUNC_DECL tmat3x3<T, P> operator--(int);
    +
    150  };
    +
    151 
    +
    152  // Binary operators
    153  template <typename T, precision P>
    -
    154  GLM_FUNC_DECL tmat2x4<T, P> operator- (
    -
    155  tmat2x4<T, P> const & m,
    +
    154  GLM_FUNC_DECL tmat3x3<T, P> operator+ (
    +
    155  tmat3x3<T, P> const & m,
    156  T const & s);
    157 
    158  template <typename T, precision P>
    -
    159  GLM_FUNC_DECL tmat2x4<T, P> operator- (
    -
    160  tmat2x4<T, P> const & m1,
    -
    161  tmat2x4<T, P> const & m2);
    +
    159  GLM_FUNC_DECL tmat3x3<T, P> operator+ (
    +
    160  T const & s,
    +
    161  tmat3x3<T, P> const & m);
    162 
    163  template <typename T, precision P>
    -
    164  GLM_FUNC_DECL tmat2x4<T, P> operator* (
    -
    165  tmat2x4<T, P> const & m,
    -
    166  T const & s);
    +
    164  GLM_FUNC_DECL tmat3x3<T, P> operator+ (
    +
    165  tmat3x3<T, P> const & m1,
    +
    166  tmat3x3<T, P> const & m2);
    167 
    168  template <typename T, precision P>
    -
    169  GLM_FUNC_DECL tmat2x4<T, P> operator* (
    -
    170  T const & s,
    -
    171  tmat2x4<T, P> const & m);
    +
    169  GLM_FUNC_DECL tmat3x3<T, P> operator- (
    +
    170  tmat3x3<T, P> const & m,
    +
    171  T const & s);
    172 
    173  template <typename T, precision P>
    -
    174  GLM_FUNC_DECL typename tmat2x4<T, P>::col_type operator* (
    -
    175  tmat2x4<T, P> const & m,
    -
    176  typename tmat2x4<T, P>::row_type const & v);
    +
    174  GLM_FUNC_DECL tmat3x3<T, P> operator- (
    +
    175  T const & s,
    +
    176  tmat3x3<T, P> const & m);
    177 
    178  template <typename T, precision P>
    -
    179  GLM_FUNC_DECL typename tmat2x4<T, P>::row_type operator* (
    -
    180  typename tmat2x4<T, P>::col_type const & v,
    -
    181  tmat2x4<T, P> const & m);
    +
    179  GLM_FUNC_DECL tmat3x3<T, P> operator- (
    +
    180  tmat3x3<T, P> const & m1,
    +
    181  tmat3x3<T, P> const & m2);
    182 
    183  template <typename T, precision P>
    -
    184  GLM_FUNC_DECL tmat4x4<T, P> operator* (
    -
    185  tmat2x4<T, P> const & m1,
    -
    186  tmat4x2<T, P> const & m2);
    -
    187 
    +
    184  GLM_FUNC_DECL tmat3x3<T, P> operator* (
    +
    185  tmat3x3<T, P> const & m,
    +
    186  T const & s);
    +
    187 
    188  template <typename T, precision P>
    -
    189  GLM_FUNC_DECL tmat2x4<T, P> operator* (
    -
    190  tmat2x4<T, P> const & m1,
    -
    191  tmat2x2<T, P> const & m2);
    -
    192 
    +
    189  GLM_FUNC_DECL tmat3x3<T, P> operator* (
    +
    190  T const & s,
    +
    191  tmat3x3<T, P> const & m);
    +
    192 
    193  template <typename T, precision P>
    -
    194  GLM_FUNC_DECL tmat3x4<T, P> operator* (
    -
    195  tmat2x4<T, P> const & m1,
    -
    196  tmat3x2<T, P> const & m2);
    +
    194  GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator* (
    +
    195  tmat3x3<T, P> const & m,
    +
    196  typename tmat3x3<T, P>::row_type const & v);
    197 
    198  template <typename T, precision P>
    -
    199  GLM_FUNC_DECL tmat2x4<T, P> operator/ (
    -
    200  tmat2x4<T, P> const & m,
    -
    201  T const & s);
    +
    199  GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator* (
    +
    200  typename tmat3x3<T, P>::col_type const & v,
    +
    201  tmat3x3<T, P> const & m);
    202 
    -
    203  template <typename T, precision P>
    -
    204  GLM_FUNC_DECL tmat2x4<T, P> operator/ (
    -
    205  T const & s,
    -
    206  tmat2x4<T, P> const & m);
    -
    207 
    -
    208  // Unary constant operators
    -
    209  template <typename T, precision P>
    -
    210  GLM_FUNC_DECL tmat2x4<T, P> const operator- (
    -
    211  tmat2x4<T, P> const & m);
    -
    212 
    -
    213 }//namespace detail
    -
    214 }//namespace glm
    -
    215 
    -
    216 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    217 #include "type_mat2x4.inl"
    -
    218 #endif
    -
    219 
    -
    220 #endif //glm_core_type_mat2x4
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    203  template <typename T, precision P>
    +
    204  GLM_FUNC_DECL tmat3x3<T, P> operator* (
    +
    205  tmat3x3<T, P> const & m1,
    +
    206  tmat3x3<T, P> const & m2);
    +
    207 
    +
    208  template <typename T, precision P>
    +
    209  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    +
    210  tmat3x3<T, P> const & m1,
    +
    211  tmat2x3<T, P> const & m2);
    +
    212 
    +
    213  template <typename T, precision P>
    +
    214  GLM_FUNC_DECL tmat4x3<T, P> operator* (
    +
    215  tmat3x3<T, P> const & m1,
    +
    216  tmat4x3<T, P> const & m2);
    +
    217 
    +
    218  template <typename T, precision P>
    +
    219  GLM_FUNC_DECL tmat3x3<T, P> operator/ (
    +
    220  tmat3x3<T, P> const & m,
    +
    221  T const & s);
    +
    222 
    +
    223  template <typename T, precision P>
    +
    224  GLM_FUNC_DECL tmat3x3<T, P> operator/ (
    +
    225  T const & s,
    +
    226  tmat3x3<T, P> const & m);
    +
    227 
    +
    228  template <typename T, precision P>
    +
    229  GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator/ (
    +
    230  tmat3x3<T, P> const & m,
    +
    231  typename tmat3x3<T, P>::row_type const & v);
    +
    232 
    +
    233  template <typename T, precision P>
    +
    234  GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator/ (
    +
    235  typename tmat3x3<T, P>::col_type const & v,
    +
    236  tmat3x3<T, P> const & m);
    +
    237 
    +
    238  template <typename T, precision P>
    +
    239  GLM_FUNC_DECL tmat3x3<T, P> operator/ (
    +
    240  tmat3x3<T, P> const & m1,
    +
    241  tmat3x3<T, P> const & m2);
    +
    242 
    +
    243  // Unary constant operators
    +
    244  template <typename T, precision P>
    +
    245  GLM_FUNC_DECL tmat3x3<T, P> const operator-(
    +
    246  tmat3x3<T, P> const & m);
    +
    247 }//namespace glm
    +
    248 
    +
    249 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    250 #include "type_mat3x3.inl"
    +
    251 #endif
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00126.html b/doc/api/a00126.html new file mode 100644 index 00000000..4b974c25 --- /dev/null +++ b/doc/api/a00126.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_mat3x4.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_mat3x4.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2006-08-05 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat3x4.hpp.

    +
    + + + + diff --git a/doc/api/a00126_source.html b/doc/api/a00126_source.html index 429e23a3..abcfdaa4 100644 --- a/doc/api/a00126_source.html +++ b/doc/api/a00126_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat3x2.hpp Source File + +0.9.6: type_mat3x4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,215 +41,183 @@
    -
    type_mat3x2.hpp
    +
    type_mat3x4.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat3x2
    -
    30 #define glm_core_type_mat3x2
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec2.hpp"
    -
    34 #include "type_vec3.hpp"
    -
    35 #include "type_mat.hpp"
    -
    36 #include <limits>
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec3.hpp"
    +
    33 #include "type_vec4.hpp"
    +
    34 #include "type_mat.hpp"
    +
    35 #include <limits>
    +
    36 #include <cstddef>
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41  template <typename T, precision P>
    -
    42  struct tmat3x2
    -
    43  {
    -
    44  enum ctor{_null};
    -
    45  typedef T value_type;
    -
    46  typedef std::size_t size_type;
    -
    47  typedef tvec2<T, P> col_type;
    -
    48  typedef tvec3<T, P> row_type;
    -
    49  typedef tmat3x2<T, P> type;
    -
    50  typedef tmat2x3<T, P> transpose_type;
    -
    51 
    -
    52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    53 
    -
    54  private:
    -
    55  // Data
    -
    56  col_type value[3];
    -
    57 
    -
    58  public:
    -
    59  // Constructors
    -
    60  GLM_FUNC_DECL tmat3x2();
    -
    61  GLM_FUNC_DECL tmat3x2(tmat3x2<T, P> const & m);
    -
    62  template <precision Q>
    -
    63  GLM_FUNC_DECL tmat3x2(tmat3x2<T, Q> const & m);
    -
    64 
    -
    65  GLM_FUNC_DECL explicit tmat3x2(
    -
    66  ctor);
    -
    67  GLM_FUNC_DECL explicit tmat3x2(
    -
    68  T const & s);
    -
    69  GLM_FUNC_DECL explicit tmat3x2(
    -
    70  T const & x0, T const & y0,
    -
    71  T const & x1, T const & y1,
    -
    72  T const & x2, T const & y2);
    -
    73  GLM_FUNC_DECL explicit tmat3x2(
    +
    38 namespace glm
    +
    39 {
    +
    40  template <typename T, precision P = defaultp>
    +
    41  struct tmat3x4
    +
    42  {
    +
    43  typedef T value_type;
    +
    44  typedef size_t size_type;
    +
    45  typedef tvec4<T, P> col_type;
    +
    46  typedef tvec3<T, P> row_type;
    +
    47  typedef tmat3x4<T, P> type;
    +
    48  typedef tmat4x3<T, P> transpose_type;
    +
    49 
    +
    50 # ifdef GLM_FORCE_SIZE_FUNC
    +
    51  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    52 # else
    +
    53  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    54 # endif//GLM_FORCE_SIZE_FUNC
    +
    55 
    +
    56  private:
    +
    58  col_type value[3];
    +
    60 
    +
    61  public:
    +
    62  // Constructors
    +
    63  GLM_FUNC_DECL tmat3x4();
    +
    64  template <precision Q>
    +
    65  GLM_FUNC_DECL tmat3x4(tmat3x4<T, Q> const & m);
    +
    66 
    +
    67  GLM_FUNC_DECL explicit tmat3x4(ctor);
    +
    68  GLM_FUNC_DECL explicit tmat3x4(T const & s);
    +
    69  GLM_FUNC_DECL tmat3x4(
    +
    70  T const & x0, T const & y0, T const & z0, T const & w0,
    +
    71  T const & x1, T const & y1, T const & z1, T const & w1,
    +
    72  T const & x2, T const & y2, T const & z2, T const & w2);
    +
    73  GLM_FUNC_DECL tmat3x4(
    74  col_type const & v0,
    75  col_type const & v1,
    76  col_type const & v2);
    77 
    -
    78 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    79  template <typename U>
    -
    80  GLM_FUNC_DECL tmat3x2(std::initializer_list<U> l);
    -
    81 
    -
    82  GLM_FUNC_DECL tmat3x2(std::initializer_list<tvec2<T, P> > l);
    -
    83 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    84 
    -
    86  // Conversions
    -
    87  template<
    -
    88  typename X1, typename Y1,
    -
    89  typename X2, typename Y2,
    -
    90  typename X3, typename Y3>
    -
    91  GLM_FUNC_DECL explicit tmat3x2(
    -
    92  X1 const & x1, Y1 const & y1,
    -
    93  X2 const & x2, Y2 const & y2,
    -
    94  X3 const & x3, Y3 const & y3);
    -
    95 
    -
    96  template <typename V1, typename V2, typename V3>
    -
    97  GLM_FUNC_DECL explicit tmat3x2(
    -
    98  tvec2<V1, P> const & v1,
    -
    99  tvec2<V2, P> const & v2,
    -
    100  tvec2<V3, P> const & v3);
    -
    101 
    -
    102  // Matrix conversions
    -
    103  template <typename U, precision Q>
    -
    104  GLM_FUNC_DECL explicit tmat3x2(tmat3x2<U, Q> const & m);
    +
    79  // Conversions
    +
    80  template<
    +
    81  typename X1, typename Y1, typename Z1, typename W1,
    +
    82  typename X2, typename Y2, typename Z2, typename W2,
    +
    83  typename X3, typename Y3, typename Z3, typename W3>
    +
    84  GLM_FUNC_DECL tmat3x4(
    +
    85  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
    +
    86  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
    +
    87  X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3);
    +
    88 
    +
    89  template <typename V1, typename V2, typename V3>
    +
    90  GLM_FUNC_DECL tmat3x4(
    +
    91  tvec4<V1, P> const & v1,
    +
    92  tvec4<V2, P> const & v2,
    +
    93  tvec4<V3, P> const & v3);
    +
    94 
    +
    96  // Matrix conversion
    +
    97 
    +
    98 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    99  template <typename U, precision Q>
    +
    100  GLM_FUNC_DECL explicit tmat3x4(tmat3x4<U, Q> const & m);
    +
    101 # else
    +
    102  template <typename U, precision Q>
    +
    103  GLM_FUNC_DECL tmat3x4(tmat3x4<U, Q> const & m);
    +
    104 # endif
    105 
    -
    106  GLM_FUNC_DECL explicit tmat3x2(tmat2x2<T, P> const & x);
    -
    107  GLM_FUNC_DECL explicit tmat3x2(tmat3x3<T, P> const & x);
    -
    108  GLM_FUNC_DECL explicit tmat3x2(tmat4x4<T, P> const & x);
    -
    109  GLM_FUNC_DECL explicit tmat3x2(tmat2x3<T, P> const & x);
    -
    110  GLM_FUNC_DECL explicit tmat3x2(tmat2x4<T, P> const & x);
    -
    111  GLM_FUNC_DECL explicit tmat3x2(tmat3x4<T, P> const & x);
    -
    112  GLM_FUNC_DECL explicit tmat3x2(tmat4x2<T, P> const & x);
    -
    113  GLM_FUNC_DECL explicit tmat3x2(tmat4x3<T, P> const & x);
    +
    106  GLM_FUNC_DECL explicit tmat3x4(tmat2x2<T, P> const & x);
    +
    107  GLM_FUNC_DECL explicit tmat3x4(tmat3x3<T, P> const & x);
    +
    108  GLM_FUNC_DECL explicit tmat3x4(tmat4x4<T, P> const & x);
    +
    109  GLM_FUNC_DECL explicit tmat3x4(tmat2x3<T, P> const & x);
    +
    110  GLM_FUNC_DECL explicit tmat3x4(tmat3x2<T, P> const & x);
    +
    111  GLM_FUNC_DECL explicit tmat3x4(tmat2x4<T, P> const & x);
    +
    112  GLM_FUNC_DECL explicit tmat3x4(tmat4x2<T, P> const & x);
    +
    113  GLM_FUNC_DECL explicit tmat3x4(tmat4x3<T, P> const & x);
    114 
    115  // Accesses
    116  GLM_FUNC_DECL col_type & operator[](length_t i);
    117  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    118 
    -
    119  // Unary updatable operators
    -
    120  GLM_FUNC_DECL tmat3x2<T, P> & operator= (tmat3x2<T, P> const & m);
    +
    119  template <typename U>
    +
    120  GLM_FUNC_DECL tmat3x4<T, P> & operator=(tmat3x4<U, P> const & m);
    121  template <typename U>
    -
    122  GLM_FUNC_DECL tmat3x2<T, P> & operator= (tmat3x2<U, P> const & m);
    +
    122  GLM_FUNC_DECL tmat3x4<T, P> & operator+=(U s);
    123  template <typename U>
    -
    124  GLM_FUNC_DECL tmat3x2<T, P> & operator+= (U s);
    +
    124  GLM_FUNC_DECL tmat3x4<T, P> & operator+=(tmat3x4<U, P> const & m);
    125  template <typename U>
    -
    126  GLM_FUNC_DECL tmat3x2<T, P> & operator+= (tmat3x2<U, P> const & m);
    +
    126  GLM_FUNC_DECL tmat3x4<T, P> & operator-=(U s);
    127  template <typename U>
    -
    128  GLM_FUNC_DECL tmat3x2<T, P> & operator-= (U s);
    +
    128  GLM_FUNC_DECL tmat3x4<T, P> & operator-=(tmat3x4<U, P> const & m);
    129  template <typename U>
    -
    130  GLM_FUNC_DECL tmat3x2<T, P> & operator-= (tmat3x2<U, P> const & m);
    +
    130  GLM_FUNC_DECL tmat3x4<T, P> & operator*=(U s);
    131  template <typename U>
    -
    132  GLM_FUNC_DECL tmat3x2<T, P> & operator*= (U s);
    -
    133  template <typename U>
    -
    134  GLM_FUNC_DECL tmat3x2<T, P> & operator/= (U s);
    -
    135 
    -
    137  // Increment and decrement operators
    -
    138 
    -
    139  GLM_FUNC_DECL tmat3x2<T, P> & operator++ ();
    -
    140  GLM_FUNC_DECL tmat3x2<T, P> & operator-- ();
    -
    141  GLM_FUNC_DECL tmat3x2<T, P> operator++(int);
    -
    142  GLM_FUNC_DECL tmat3x2<T, P> operator--(int);
    -
    143  };
    -
    144 
    -
    145  // Binary operators
    -
    146  template <typename T, precision P>
    -
    147  GLM_FUNC_DECL tmat3x2<T, P> operator+ (
    -
    148  tmat3x2<T, P> const & m,
    -
    149  T const & s);
    -
    150 
    -
    151  template <typename T, precision P>
    -
    152  GLM_FUNC_DECL tmat3x2<T, P> operator+ (
    -
    153  tmat3x2<T, P> const & m1,
    -
    154  tmat3x2<T, P> const & m2);
    +
    132  GLM_FUNC_DECL tmat3x4<T, P> & operator/=(U s);
    +
    133 
    +
    135  // Increment and decrement operators
    +
    136 
    +
    137  GLM_FUNC_DECL tmat3x4<T, P> & operator++();
    +
    138  GLM_FUNC_DECL tmat3x4<T, P> & operator--();
    +
    139  GLM_FUNC_DECL tmat3x4<T, P> operator++(int);
    +
    140  GLM_FUNC_DECL tmat3x4<T, P> operator--(int);
    +
    141  };
    +
    142 
    +
    143  // Binary operators
    +
    144  template <typename T, precision P>
    +
    145  GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m, T const & s);
    +
    146 
    +
    147  template <typename T, precision P>
    +
    148  GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);
    +
    149 
    +
    150  template <typename T, precision P>
    +
    151  GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m, T const & s);
    +
    152 
    +
    153  template <typename T, precision P>
    +
    154  GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);
    155 
    156  template <typename T, precision P>
    -
    157  GLM_FUNC_DECL tmat3x2<T, P> operator- (
    -
    158  tmat3x2<T, P> const & m,
    -
    159  T const & s);
    -
    160 
    -
    161  template <typename T, precision P>
    -
    162  GLM_FUNC_DECL tmat3x2<T, P> operator- (
    -
    163  tmat3x2<T, P> const & m1,
    -
    164  tmat3x2<T, P> const & m2);
    -
    165 
    -
    166  template <typename T, precision P>
    -
    167  GLM_FUNC_DECL tmat3x2<T, P> operator* (
    -
    168  tmat3x2<T, P> const & m,
    -
    169  T const & s);
    -
    170 
    +
    157  GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat3x4<T, P> const & m, T const & s);
    +
    158 
    +
    159  template <typename T, precision P>
    +
    160  GLM_FUNC_DECL tmat3x4<T, P> operator*(T const & s, tmat3x4<T, P> const & m);
    +
    161 
    +
    162  template <typename T, precision P>
    +
    163  GLM_FUNC_DECL typename tmat3x4<T, P>::col_type operator*(tmat3x4<T, P> const & m, typename tmat3x4<T, P>::row_type const & v);
    +
    164 
    +
    165  template <typename T, precision P>
    +
    166  GLM_FUNC_DECL typename tmat3x4<T, P>::row_type operator*(typename tmat3x4<T, P>::col_type const & v, tmat3x4<T, P> const & m);
    +
    167 
    +
    168  template <typename T, precision P>
    +
    169  GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat4x3<T, P> const & m2);
    +
    170 
    171  template <typename T, precision P>
    -
    172  GLM_FUNC_DECL tmat3x2<T, P> operator* (
    -
    173  T const & s,
    -
    174  tmat3x2<T, P> const & m);
    -
    175 
    -
    176  template <typename T, precision P>
    -
    177  GLM_FUNC_DECL typename tmat3x2<T, P>::col_type operator* (
    -
    178  tmat3x2<T, P> const & m,
    -
    179  typename tmat3x2<T, P>::row_type const & v);
    -
    180 
    -
    181  template <typename T, precision P>
    -
    182  GLM_FUNC_DECL typename tmat3x2<T, P>::row_type operator* (
    -
    183  typename tmat3x2<T, P>::col_type const & v,
    -
    184  tmat3x2<T, P> const & m);
    -
    185 
    -
    186  template <typename T, precision P>
    -
    187  GLM_FUNC_DECL tmat2x2<T, P> operator* (
    -
    188  tmat3x2<T, P> const & m1,
    -
    189  tmat2x3<T, P> const & m2);
    -
    190 
    -
    191  template <typename T, precision P>
    -
    192  GLM_FUNC_DECL tmat3x2<T, P> operator* (
    -
    193  tmat3x2<T, P> const & m1,
    -
    194  tmat3x3<T, P> const & m2);
    -
    195 
    -
    196  template <typename T, precision P>
    -
    197  GLM_FUNC_DECL tmat4x2<T, P> operator* (
    -
    198  tmat3x2<T, P> const & m1,
    -
    199  tmat4x3<T, P> const & m2);
    -
    200 
    -
    201  template <typename T, precision P>
    -
    202  GLM_FUNC_DECL tmat3x2<T, P> operator/ (
    -
    203  tmat3x2<T, P> const & m,
    -
    204  T const & s);
    -
    205 
    -
    206  template <typename T, precision P>
    -
    207  GLM_FUNC_DECL tmat3x2<T, P> operator/ (
    -
    208  T const & s,
    -
    209  tmat3x2<T, P> const & m);
    -
    210 
    -
    211  // Unary constant operators
    -
    212  template <typename T, precision P>
    -
    213  GLM_FUNC_DECL tmat3x2<T, P> const operator-(
    -
    214  tmat3x2<T, P> const & m);
    -
    215 
    -
    216 }//namespace detail
    -
    217 }//namespace glm
    -
    218 
    -
    219 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    220 #include "type_mat3x2.inl"
    -
    221 #endif
    -
    222 
    -
    223 #endif //glm_core_type_mat3x2
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    172  GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat2x3<T, P> const & m2);
    +
    173 
    +
    174  template <typename T, precision P>
    +
    175  GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat3x3<T, P> const & m2);
    +
    176 
    +
    177  template <typename T, precision P>
    +
    178  GLM_FUNC_DECL tmat3x4<T, P> operator/(tmat3x4<T, P> const & m, T const & s);
    +
    179 
    +
    180  template <typename T, precision P>
    +
    181  GLM_FUNC_DECL tmat3x4<T, P> operator/(T const & s, tmat3x4<T, P> const & m);
    +
    182 
    +
    183  // Unary constant operators
    +
    184  template <typename T, precision P>
    +
    185  GLM_FUNC_DECL tmat3x4<T, P> const operator-(tmat3x4<T, P> const & m);
    +
    186 }//namespace glm
    +
    187 
    +
    188 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    189 #include "type_mat3x4.inl"
    +
    190 #endif
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00127.html b/doc/api/a00127.html new file mode 100644 index 00000000..ec3f4e77 --- /dev/null +++ b/doc/api/a00127.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_mat4x2.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_mat4x2.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2006-10-01 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat4x2.hpp.

    +
    + + + + diff --git a/doc/api/a00127_source.html b/doc/api/a00127_source.html index d9993936..f7638681 100644 --- a/doc/api/a00127_source.html +++ b/doc/api/a00127_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat3x3.hpp Source File + +0.9.6: type_mat4x2.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,250 +41,189 @@
    -
    type_mat3x3.hpp
    +
    type_mat4x2.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat3x3
    -
    30 #define glm_core_type_mat3x3
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec3.hpp"
    -
    34 #include "type_mat.hpp"
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec2.hpp"
    +
    33 #include "type_vec4.hpp"
    +
    34 #include "type_mat.hpp"
    35 #include <limits>
    -
    36 
    -
    37 namespace glm{
    -
    38 namespace detail
    +
    36 #include <cstddef>
    +
    37 
    +
    38 namespace glm
    39 {
    -
    40  template <typename T, precision P>
    -
    41  struct tmat3x3
    +
    40  template <typename T, precision P = defaultp>
    +
    41  struct tmat4x2
    42  {
    -
    43  enum ctor{_null};
    -
    44  typedef T value_type;
    -
    45  typedef std::size_t size_type;
    -
    46  typedef tvec3<T, P> col_type;
    -
    47  typedef tvec3<T, P> row_type;
    -
    48  typedef tmat3x3<T, P> type;
    -
    49  typedef tmat3x3<T, P> transpose_type;
    -
    50 
    -
    51  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    52 
    -
    53  template <typename U, precision Q>
    -
    54  friend tvec3<U, Q> operator/(tmat3x3<U, Q> const & m, tvec3<U, Q> const & v);
    -
    55  template <typename U, precision Q>
    -
    56  friend tvec3<U, Q> operator/(tvec3<U, Q> const & v, tmat3x3<U, Q> const & m);
    -
    57 
    -
    58  private:
    -
    60  col_type value[3];
    -
    62 
    -
    63  public:
    -
    64  // Constructors
    -
    65  GLM_FUNC_DECL tmat3x3();
    -
    66  GLM_FUNC_DECL tmat3x3(tmat3x3<T, P> const & m);
    -
    67  template <precision Q>
    -
    68  GLM_FUNC_DECL tmat3x3(tmat3x3<T, Q> const & m);
    -
    69 
    -
    70  GLM_FUNC_DECL explicit tmat3x3(
    -
    71  ctor Null);
    -
    72  GLM_FUNC_DECL explicit tmat3x3(
    -
    73  T const & s);
    -
    74  GLM_FUNC_DECL explicit tmat3x3(
    -
    75  T const & x0, T const & y0, T const & z0,
    -
    76  T const & x1, T const & y1, T const & z1,
    -
    77  T const & x2, T const & y2, T const & z2);
    -
    78  GLM_FUNC_DECL explicit tmat3x3(
    -
    79  col_type const & v0,
    -
    80  col_type const & v1,
    -
    81  col_type const & v2);
    +
    43  typedef T value_type;
    +
    44  typedef std::size_t size_type;
    +
    45  typedef tvec2<T, P> col_type;
    +
    46  typedef tvec4<T, P> row_type;
    +
    47  typedef tmat4x2<T, P> type;
    +
    48  typedef tmat2x4<T, P> transpose_type;
    +
    49 
    +
    50 # ifdef GLM_FORCE_SIZE_FUNC
    +
    51  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    52 # else
    +
    53  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    54 # endif//GLM_FORCE_SIZE_FUNC
    +
    55 
    +
    56  private:
    +
    58  col_type value[4];
    +
    60 
    +
    61  public:
    +
    62  // Constructors
    +
    63  GLM_FUNC_DECL tmat4x2();
    +
    64  template <precision Q>
    +
    65  GLM_FUNC_DECL tmat4x2(tmat4x2<T, Q> const & m);
    +
    66 
    +
    67  GLM_FUNC_DECL explicit tmat4x2(ctor);
    +
    68  GLM_FUNC_DECL explicit tmat4x2(T const & x);
    +
    69  GLM_FUNC_DECL tmat4x2(
    +
    70  T const & x0, T const & y0,
    +
    71  T const & x1, T const & y1,
    +
    72  T const & x2, T const & y2,
    +
    73  T const & x3, T const & y3);
    +
    74  GLM_FUNC_DECL tmat4x2(
    +
    75  col_type const & v0,
    +
    76  col_type const & v1,
    +
    77  col_type const & v2,
    +
    78  col_type const & v3);
    +
    79 
    +
    81  // Conversions
    82 
    -
    83 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    84  template <typename U>
    -
    85  GLM_FUNC_DECL tmat3x3(std::initializer_list<U> m);
    -
    86 
    -
    87  GLM_FUNC_DECL tmat3x3(std::initializer_list<tvec3<T, P> > m);
    -
    88 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    89 
    -
    91  // Conversions
    -
    92  template<
    -
    93  typename X1, typename Y1, typename Z1,
    -
    94  typename X2, typename Y2, typename Z2,
    -
    95  typename X3, typename Y3, typename Z3>
    -
    96  GLM_FUNC_DECL explicit tmat3x3(
    -
    97  X1 const & x1, Y1 const & y1, Z1 const & z1,
    -
    98  X2 const & x2, Y2 const & y2, Z2 const & z2,
    -
    99  X3 const & x3, Y3 const & y3, Z3 const & z3);
    -
    100 
    -
    101  template <typename V1, typename V2, typename V3>
    -
    102  GLM_FUNC_DECL explicit tmat3x3(
    -
    103  tvec3<V1, P> const & v1,
    -
    104  tvec3<V2, P> const & v2,
    -
    105  tvec3<V3, P> const & v3);
    -
    106 
    -
    107  // Matrix conversions
    -
    108  template <typename U, precision Q>
    -
    109  GLM_FUNC_DECL explicit tmat3x3(tmat3x3<U, Q> const & m);
    -
    110 
    -
    111  GLM_FUNC_DECL explicit tmat3x3(tmat2x2<T, P> const & x);
    -
    112  GLM_FUNC_DECL explicit tmat3x3(tmat4x4<T, P> const & x);
    -
    113  GLM_FUNC_DECL explicit tmat3x3(tmat2x3<T, P> const & x);
    -
    114  GLM_FUNC_DECL explicit tmat3x3(tmat3x2<T, P> const & x);
    -
    115  GLM_FUNC_DECL explicit tmat3x3(tmat2x4<T, P> const & x);
    -
    116  GLM_FUNC_DECL explicit tmat3x3(tmat4x2<T, P> const & x);
    -
    117  GLM_FUNC_DECL explicit tmat3x3(tmat3x4<T, P> const & x);
    -
    118  GLM_FUNC_DECL explicit tmat3x3(tmat4x3<T, P> const & x);
    -
    119 
    -
    120  // Accesses
    -
    121  GLM_FUNC_DECL col_type & operator[](length_t i);
    -
    122  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    -
    123 
    -
    124  // Unary updatable operators
    -
    125  GLM_FUNC_DECL tmat3x3<T, P>& operator= (tmat3x3<T, P> const & m);
    -
    126  template <typename U>
    -
    127  GLM_FUNC_DECL tmat3x3<T, P>& operator= (tmat3x3<U, P> const & m);
    -
    128  template <typename U>
    -
    129  GLM_FUNC_DECL tmat3x3<T, P>& operator+= (U s);
    -
    130  template <typename U>
    -
    131  GLM_FUNC_DECL tmat3x3<T, P>& operator+= (tmat3x3<U, P> const & m);
    -
    132  template <typename U>
    -
    133  GLM_FUNC_DECL tmat3x3<T, P>& operator-= (U s);
    -
    134  template <typename U>
    -
    135  GLM_FUNC_DECL tmat3x3<T, P>& operator-= (tmat3x3<U, P> const & m);
    -
    136  template <typename U>
    -
    137  GLM_FUNC_DECL tmat3x3<T, P>& operator*= (U s);
    -
    138  template <typename U>
    -
    139  GLM_FUNC_DECL tmat3x3<T, P>& operator*= (tmat3x3<U, P> const & m);
    -
    140  template <typename U>
    -
    141  GLM_FUNC_DECL tmat3x3<T, P>& operator/= (U s);
    -
    142  template <typename U>
    -
    143  GLM_FUNC_DECL tmat3x3<T, P>& operator/= (tmat3x3<U, P> const & m);
    -
    144 
    -
    146  // Increment and decrement operators
    -
    147 
    -
    148  GLM_FUNC_DECL tmat3x3<T, P> & operator++ ();
    -
    149  GLM_FUNC_DECL tmat3x3<T, P> & operator-- ();
    -
    150  GLM_FUNC_DECL tmat3x3<T, P> operator++(int);
    -
    151  GLM_FUNC_DECL tmat3x3<T, P> operator--(int);
    -
    152  };
    -
    153 
    -
    154  template <typename T, precision P>
    -
    155  GLM_FUNC_DECL tmat3x3<T, P> compute_inverse_mat3(tmat3x3<T, P> const & m);
    -
    156 
    -
    157  // Binary operators
    -
    158  template <typename T, precision P>
    -
    159  GLM_FUNC_DECL tmat3x3<T, P> operator+ (
    -
    160  tmat3x3<T, P> const & m,
    -
    161  T const & s);
    -
    162 
    -
    163  template <typename T, precision P>
    -
    164  GLM_FUNC_DECL tmat3x3<T, P> operator+ (
    -
    165  T const & s,
    -
    166  tmat3x3<T, P> const & m);
    +
    83  template <
    +
    84  typename X1, typename Y1,
    +
    85  typename X2, typename Y2,
    +
    86  typename X3, typename Y3,
    +
    87  typename X4, typename Y4>
    +
    88  GLM_FUNC_DECL tmat4x2(
    +
    89  X1 const & x1, Y1 const & y1,
    +
    90  X2 const & x2, Y2 const & y2,
    +
    91  X3 const & x3, Y3 const & y3,
    +
    92  X4 const & x4, Y4 const & y4);
    +
    93 
    +
    94  template <typename V1, typename V2, typename V3, typename V4>
    +
    95  GLM_FUNC_DECL tmat4x2(
    +
    96  tvec2<V1, P> const & v1,
    +
    97  tvec2<V2, P> const & v2,
    +
    98  tvec2<V3, P> const & v3,
    +
    99  tvec2<V4, P> const & v4);
    +
    100 
    +
    102  // Matrix conversions
    +
    103 
    +
    104 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    105  template <typename U, precision Q>
    +
    106  GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U, Q> const & m);
    +
    107 # else
    +
    108  template <typename U, precision Q>
    +
    109  GLM_FUNC_DECL tmat4x2(tmat4x2<U, Q> const & m);
    +
    110 # endif
    +
    111 
    +
    112  GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T, P> const & x);
    +
    113  GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T, P> const & x);
    +
    114  GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T, P> const & x);
    +
    115  GLM_FUNC_DECL explicit tmat4x2(tmat2x3<T, P> const & x);
    +
    116  GLM_FUNC_DECL explicit tmat4x2(tmat3x2<T, P> const & x);
    +
    117  GLM_FUNC_DECL explicit tmat4x2(tmat2x4<T, P> const & x);
    +
    118  GLM_FUNC_DECL explicit tmat4x2(tmat4x3<T, P> const & x);
    +
    119  GLM_FUNC_DECL explicit tmat4x2(tmat3x4<T, P> const & x);
    +
    120 
    +
    121  // Accesses
    +
    122  GLM_FUNC_DECL col_type & operator[](length_t i);
    +
    123  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    +
    124 
    +
    125  template <typename U>
    +
    126  GLM_FUNC_DECL tmat4x2<T, P>& operator=(tmat4x2<U, P> const & m);
    +
    127  template <typename U>
    +
    128  GLM_FUNC_DECL tmat4x2<T, P>& operator+=(U s);
    +
    129  template <typename U>
    +
    130  GLM_FUNC_DECL tmat4x2<T, P>& operator+=(tmat4x2<U, P> const & m);
    +
    131  template <typename U>
    +
    132  GLM_FUNC_DECL tmat4x2<T, P>& operator-=(U s);
    +
    133  template <typename U>
    +
    134  GLM_FUNC_DECL tmat4x2<T, P>& operator-=(tmat4x2<U, P> const & m);
    +
    135  template <typename U>
    +
    136  GLM_FUNC_DECL tmat4x2<T, P>& operator*=(U s);
    +
    137  template <typename U>
    +
    138  GLM_FUNC_DECL tmat4x2<T, P>& operator/=(U s);
    +
    139 
    +
    141  // Increment and decrement operators
    +
    142 
    +
    143  GLM_FUNC_DECL tmat4x2<T, P> & operator++ ();
    +
    144  GLM_FUNC_DECL tmat4x2<T, P> & operator-- ();
    +
    145  GLM_FUNC_DECL tmat4x2<T, P> operator++(int);
    +
    146  GLM_FUNC_DECL tmat4x2<T, P> operator--(int);
    +
    147  };
    +
    148 
    +
    149  // Binary operators
    +
    150  template <typename T, precision P>
    +
    151  GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m, T const & s);
    +
    152 
    +
    153  template <typename T, precision P>
    +
    154  GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);
    +
    155 
    +
    156  template <typename T, precision P>
    +
    157  GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m, T const & s);
    +
    158 
    +
    159  template <typename T, precision P>
    +
    160  GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);
    +
    161 
    +
    162  template <typename T, precision P>
    +
    163  GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat4x2<T, P> const & m, T const & s);
    +
    164 
    +
    165  template <typename T, precision P>
    +
    166  GLM_FUNC_DECL tmat4x2<T, P> operator*(T const & s, tmat4x2<T, P> const & m);
    167 
    168  template <typename T, precision P>
    -
    169  GLM_FUNC_DECL tmat3x3<T, P> operator+ (
    -
    170  tmat3x3<T, P> const & m1,
    -
    171  tmat3x3<T, P> const & m2);
    -
    172 
    -
    173  template <typename T, precision P>
    -
    174  GLM_FUNC_DECL tmat3x3<T, P> operator- (
    -
    175  tmat3x3<T, P> const & m,
    -
    176  T const & s);
    -
    177 
    -
    178  template <typename T, precision P>
    -
    179  GLM_FUNC_DECL tmat3x3<T, P> operator- (
    -
    180  T const & s,
    -
    181  tmat3x3<T, P> const & m);
    +
    169  GLM_FUNC_DECL typename tmat4x2<T, P>::col_type operator*(tmat4x2<T, P> const & m, typename tmat4x2<T, P>::row_type const & v);
    +
    170 
    +
    171  template <typename T, precision P>
    +
    172  GLM_FUNC_DECL typename tmat4x2<T, P>::row_type operator*(typename tmat4x2<T, P>::col_type const & v, tmat4x2<T, P> const & m);
    +
    173 
    +
    174  template <typename T, precision P>
    +
    175  GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat3x4<T, P> const & m2);
    +
    176 
    +
    177  template <typename T, precision P>
    +
    178  GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat4x4<T, P> const & m2);
    +
    179 
    +
    180  template <typename T, precision P>
    +
    181  GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat2x4<T, P> const & m2);
    182 
    183  template <typename T, precision P>
    -
    184  GLM_FUNC_DECL tmat3x3<T, P> operator- (
    -
    185  tmat3x3<T, P> const & m1,
    -
    186  tmat3x3<T, P> const & m2);
    -
    187 
    -
    188  template <typename T, precision P>
    -
    189  GLM_FUNC_DECL tmat3x3<T, P> operator* (
    -
    190  tmat3x3<T, P> const & m,
    -
    191  T const & s);
    -
    192 
    -
    193  template <typename T, precision P>
    -
    194  GLM_FUNC_DECL tmat3x3<T, P> operator* (
    -
    195  T const & s,
    -
    196  tmat3x3<T, P> const & m);
    -
    197 
    -
    198  template <typename T, precision P>
    -
    199  GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator* (
    -
    200  tmat3x3<T, P> const & m,
    -
    201  typename tmat3x3<T, P>::row_type const & v);
    -
    202 
    -
    203  template <typename T, precision P>
    -
    204  GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator* (
    -
    205  typename tmat3x3<T, P>::col_type const & v,
    -
    206  tmat3x3<T, P> const & m);
    -
    207 
    -
    208  template <typename T, precision P>
    -
    209  GLM_FUNC_DECL tmat3x3<T, P> operator* (
    -
    210  tmat3x3<T, P> const & m1,
    -
    211  tmat3x3<T, P> const & m2);
    -
    212 
    -
    213  template <typename T, precision P>
    -
    214  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    -
    215  tmat3x3<T, P> const & m1,
    -
    216  tmat2x3<T, P> const & m2);
    -
    217 
    -
    218  template <typename T, precision P>
    -
    219  GLM_FUNC_DECL tmat4x3<T, P> operator* (
    -
    220  tmat3x3<T, P> const & m1,
    -
    221  tmat4x3<T, P> const & m2);
    -
    222 
    -
    223  template <typename T, precision P>
    -
    224  GLM_FUNC_DECL tmat3x3<T, P> operator/ (
    -
    225  tmat3x3<T, P> const & m,
    -
    226  T const & s);
    -
    227 
    -
    228  template <typename T, precision P>
    -
    229  GLM_FUNC_DECL tmat3x3<T, P> operator/ (
    -
    230  T const & s,
    -
    231  tmat3x3<T, P> const & m);
    -
    232 
    -
    233  template <typename T, precision P>
    -
    234  GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator/ (
    -
    235  tmat3x3<T, P> const & m,
    -
    236  typename tmat3x3<T, P>::row_type const & v);
    -
    237 
    -
    238  template <typename T, precision P>
    -
    239  GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator/ (
    -
    240  typename tmat3x3<T, P>::col_type const & v,
    -
    241  tmat3x3<T, P> const & m);
    -
    242 
    -
    243  template <typename T, precision P>
    -
    244  GLM_FUNC_DECL tmat3x3<T, P> operator/ (
    -
    245  tmat3x3<T, P> const & m1,
    -
    246  tmat3x3<T, P> const & m2);
    -
    247 
    -
    248  // Unary constant operators
    -
    249  template <typename T, precision P>
    -
    250  GLM_FUNC_DECL tmat3x3<T, P> const operator-(
    -
    251  tmat3x3<T, P> const & m);
    -
    252 
    -
    253 }//namespace detail
    -
    254 }//namespace glm
    -
    255 
    -
    256 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    257 #include "type_mat3x3.inl"
    -
    258 #endif
    -
    259 
    -
    260 #endif //glm_core_type_mat3x3
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    184  GLM_FUNC_DECL tmat4x2<T, P> operator/(tmat4x2<T, P> const & m, T const & s);
    +
    185 
    +
    186  template <typename T, precision P>
    +
    187  GLM_FUNC_DECL tmat4x2<T, P> operator/(T const & s, tmat4x2<T, P> const & m);
    +
    188 
    +
    189  // Unary constant operators
    +
    190  template <typename T, precision P>
    +
    191  GLM_FUNC_DECL tmat4x2<T, P> const operator-(tmat4x2<T, P> const & m);
    +
    192 }//namespace glm
    +
    193 
    +
    194 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    195 #include "type_mat4x2.inl"
    +
    196 #endif
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00128.html b/doc/api/a00128.html new file mode 100644 index 00000000..f9976e71 --- /dev/null +++ b/doc/api/a00128.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_mat4x3.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_mat4x3.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2006-08-04 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat4x3.hpp.

    +
    + + + + diff --git a/doc/api/a00128_source.html b/doc/api/a00128_source.html index 9fa191d4..2efba6a2 100644 --- a/doc/api/a00128_source.html +++ b/doc/api/a00128_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat3x4.hpp Source File + +0.9.6: type_mat4x3.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,215 +41,190 @@
    -
    type_mat3x4.hpp
    +
    type_mat4x3.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat3x4
    -
    30 #define glm_core_type_mat3x4
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec3.hpp"
    -
    34 #include "type_vec4.hpp"
    -
    35 #include "type_mat.hpp"
    -
    36 #include <limits>
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec3.hpp"
    +
    33 #include "type_vec4.hpp"
    +
    34 #include "type_mat.hpp"
    +
    35 #include <limits>
    +
    36 #include <cstddef>
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41  template <typename T, precision P>
    -
    42  struct tmat3x4
    -
    43  {
    -
    44  enum ctor{_null};
    -
    45  typedef T value_type;
    -
    46  typedef std::size_t size_type;
    -
    47  typedef tvec4<T, P> col_type;
    -
    48  typedef tvec3<T, P> row_type;
    -
    49  typedef tmat3x4<T, P> type;
    -
    50  typedef tmat4x3<T, P> transpose_type;
    -
    51 
    -
    52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    53 
    -
    54  private:
    -
    55  // Data
    -
    56  col_type value[3];
    -
    57 
    -
    58  public:
    -
    59  // Constructors
    -
    60  GLM_FUNC_DECL tmat3x4();
    -
    61  GLM_FUNC_DECL tmat3x4(tmat3x4<T, P> const & m);
    -
    62  template <precision Q>
    -
    63  GLM_FUNC_DECL tmat3x4(tmat3x4<T, Q> const & m);
    -
    64 
    -
    65  GLM_FUNC_DECL explicit tmat3x4(
    -
    66  ctor Null);
    -
    67  GLM_FUNC_DECL explicit tmat3x4(
    -
    68  T const & s);
    -
    69  GLM_FUNC_DECL explicit tmat3x4(
    -
    70  T const & x0, T const & y0, T const & z0, T const & w0,
    -
    71  T const & x1, T const & y1, T const & z1, T const & w1,
    -
    72  T const & x2, T const & y2, T const & z2, T const & w2);
    -
    73  GLM_FUNC_DECL explicit tmat3x4(
    +
    38 namespace glm
    +
    39 {
    +
    40  template <typename T, precision P = defaultp>
    +
    41  struct tmat4x3
    +
    42  {
    +
    43  typedef T value_type;
    +
    44  typedef std::size_t size_type;
    +
    45  typedef tvec3<T, P> col_type;
    +
    46  typedef tvec4<T, P> row_type;
    +
    47  typedef tmat4x3<T, P> type;
    +
    48  typedef tmat3x4<T, P> transpose_type;
    +
    49 
    +
    50 # ifdef GLM_FORCE_SIZE_FUNC
    +
    51  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    52 # else
    +
    53  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    54 # endif//GLM_FORCE_SIZE_FUNC
    +
    55 
    +
    56  private:
    +
    57  // Data
    +
    58  col_type value[4];
    +
    59 
    +
    60  public:
    +
    61  // Constructors
    +
    62  GLM_FUNC_DECL tmat4x3();
    +
    63  template <precision Q>
    +
    64  GLM_FUNC_DECL tmat4x3(tmat4x3<T, Q> const & m);
    +
    65 
    +
    66  GLM_FUNC_DECL explicit tmat4x3(ctor);
    +
    67  GLM_FUNC_DECL explicit tmat4x3(T const & x);
    +
    68  GLM_FUNC_DECL tmat4x3(
    +
    69  T const & x0, T const & y0, T const & z0,
    +
    70  T const & x1, T const & y1, T const & z1,
    +
    71  T const & x2, T const & y2, T const & z2,
    +
    72  T const & x3, T const & y3, T const & z3);
    +
    73  GLM_FUNC_DECL tmat4x3(
    74  col_type const & v0,
    75  col_type const & v1,
    -
    76  col_type const & v2);
    -
    77 
    -
    78 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    79  template <typename U>
    -
    80  GLM_FUNC_DECL tmat3x4(std::initializer_list<U> m);
    +
    76  col_type const & v2,
    +
    77  col_type const & v3);
    +
    78 
    +
    80  // Conversions
    81 
    -
    82  GLM_FUNC_DECL tmat3x4(std::initializer_list<tvec4<T, P> > m);
    -
    83 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    84 
    -
    86  // Conversions
    -
    87  template<
    -
    88  typename X1, typename Y1, typename Z1, typename W1,
    -
    89  typename X2, typename Y2, typename Z2, typename W2,
    -
    90  typename X3, typename Y3, typename Z3, typename W3>
    -
    91  GLM_FUNC_DECL explicit tmat3x4(
    -
    92  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
    -
    93  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
    -
    94  X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3);
    -
    95 
    -
    96  template <typename V1, typename V2, typename V3>
    -
    97  GLM_FUNC_DECL explicit tmat3x4(
    -
    98  tvec4<V1, P> const & v1,
    -
    99  tvec4<V2, P> const & v2,
    -
    100  tvec4<V3, P> const & v3);
    -
    101 
    -
    102  // Matrix conversion
    -
    103  template <typename U, precision Q>
    -
    104  GLM_FUNC_DECL explicit tmat3x4(tmat3x4<U, Q> const & m);
    -
    105 
    -
    106  GLM_FUNC_DECL explicit tmat3x4(tmat2x2<T, P> const & x);
    -
    107  GLM_FUNC_DECL explicit tmat3x4(tmat3x3<T, P> const & x);
    -
    108  GLM_FUNC_DECL explicit tmat3x4(tmat4x4<T, P> const & x);
    -
    109  GLM_FUNC_DECL explicit tmat3x4(tmat2x3<T, P> const & x);
    -
    110  GLM_FUNC_DECL explicit tmat3x4(tmat3x2<T, P> const & x);
    -
    111  GLM_FUNC_DECL explicit tmat3x4(tmat2x4<T, P> const & x);
    -
    112  GLM_FUNC_DECL explicit tmat3x4(tmat4x2<T, P> const & x);
    -
    113  GLM_FUNC_DECL explicit tmat3x4(tmat4x3<T, P> const & x);
    -
    114 
    -
    115  // Accesses
    -
    116  GLM_FUNC_DECL col_type & operator[](length_t i);
    -
    117  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    -
    118 
    -
    119  // Unary updatable operators
    -
    120  GLM_FUNC_DECL tmat3x4<T, P> & operator= (tmat3x4<T, P> const & m);
    -
    121  template <typename U>
    -
    122  GLM_FUNC_DECL tmat3x4<T, P> & operator= (tmat3x4<U, P> const & m);
    -
    123  template <typename U>
    -
    124  GLM_FUNC_DECL tmat3x4<T, P> & operator+= (U s);
    -
    125  template <typename U>
    -
    126  GLM_FUNC_DECL tmat3x4<T, P> & operator+= (tmat3x4<U, P> const & m);
    -
    127  template <typename U>
    -
    128  GLM_FUNC_DECL tmat3x4<T, P> & operator-= (U s);
    -
    129  template <typename U>
    -
    130  GLM_FUNC_DECL tmat3x4<T, P> & operator-= (tmat3x4<U, P> const & m);
    -
    131  template <typename U>
    -
    132  GLM_FUNC_DECL tmat3x4<T, P> & operator*= (U s);
    -
    133  template <typename U>
    -
    134  GLM_FUNC_DECL tmat3x4<T, P> & operator/= (U s);
    -
    135 
    -
    137  // Increment and decrement operators
    +
    82  template <
    +
    83  typename X1, typename Y1, typename Z1,
    +
    84  typename X2, typename Y2, typename Z2,
    +
    85  typename X3, typename Y3, typename Z3,
    +
    86  typename X4, typename Y4, typename Z4>
    +
    87  GLM_FUNC_DECL tmat4x3(
    +
    88  X1 const & x1, Y1 const & y1, Z1 const & z1,
    +
    89  X2 const & x2, Y2 const & y2, Z2 const & z2,
    +
    90  X3 const & x3, Y3 const & y3, Z3 const & z3,
    +
    91  X4 const & x4, Y4 const & y4, Z4 const & z4);
    +
    92 
    +
    93  template <typename V1, typename V2, typename V3, typename V4>
    +
    94  GLM_FUNC_DECL tmat4x3(
    +
    95  tvec3<V1, P> const & v1,
    +
    96  tvec3<V2, P> const & v2,
    +
    97  tvec3<V3, P> const & v3,
    +
    98  tvec3<V4, P> const & v4);
    +
    99 
    +
    101  // Matrix conversions
    +
    102 
    +
    103 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    104  template <typename U, precision Q>
    +
    105  GLM_FUNC_DECL explicit tmat4x3(tmat4x3<U, Q> const & m);
    +
    106 # else
    +
    107  template <typename U, precision Q>
    +
    108  GLM_FUNC_DECL tmat4x3(tmat4x3<U, Q> const & m);
    +
    109 # endif
    +
    110 
    +
    111  GLM_FUNC_DECL explicit tmat4x3(tmat2x2<T, P> const & x);
    +
    112  GLM_FUNC_DECL explicit tmat4x3(tmat3x3<T, P> const & x);
    +
    113  GLM_FUNC_DECL explicit tmat4x3(tmat4x4<T, P> const & x);
    +
    114  GLM_FUNC_DECL explicit tmat4x3(tmat2x3<T, P> const & x);
    +
    115  GLM_FUNC_DECL explicit tmat4x3(tmat3x2<T, P> const & x);
    +
    116  GLM_FUNC_DECL explicit tmat4x3(tmat2x4<T, P> const & x);
    +
    117  GLM_FUNC_DECL explicit tmat4x3(tmat4x2<T, P> const & x);
    +
    118  GLM_FUNC_DECL explicit tmat4x3(tmat3x4<T, P> const & x);
    +
    119 
    +
    120  // Accesses
    +
    121  GLM_FUNC_DECL col_type & operator[](size_type i);
    +
    122  GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    +
    123 
    +
    124  template <typename U>
    +
    125  GLM_FUNC_DECL tmat4x3<T, P> & operator=(tmat4x3<U, P> const & m);
    +
    126  template <typename U>
    +
    127  GLM_FUNC_DECL tmat4x3<T, P> & operator+=(U s);
    +
    128  template <typename U>
    +
    129  GLM_FUNC_DECL tmat4x3<T, P> & operator+=(tmat4x3<U, P> const & m);
    +
    130  template <typename U>
    +
    131  GLM_FUNC_DECL tmat4x3<T, P> & operator-=(U s);
    +
    132  template <typename U>
    +
    133  GLM_FUNC_DECL tmat4x3<T, P> & operator-=(tmat4x3<U, P> const & m);
    +
    134  template <typename U>
    +
    135  GLM_FUNC_DECL tmat4x3<T, P> & operator*=(U s);
    +
    136  template <typename U>
    +
    137  GLM_FUNC_DECL tmat4x3<T, P> & operator/=(U s);
    138 
    -
    139  GLM_FUNC_DECL tmat3x4<T, P> & operator++ ();
    -
    140  GLM_FUNC_DECL tmat3x4<T, P> & operator-- ();
    -
    141  GLM_FUNC_DECL tmat3x4<T, P> operator++(int);
    -
    142  GLM_FUNC_DECL tmat3x4<T, P> operator--(int);
    -
    143  };
    -
    144 
    -
    145  // Binary operators
    -
    146  template <typename T, precision P>
    -
    147  GLM_FUNC_DECL tmat3x4<T, P> operator+ (
    -
    148  tmat3x4<T, P> const & m,
    -
    149  T const & s);
    -
    150 
    -
    151  template <typename T, precision P>
    -
    152  GLM_FUNC_DECL tmat3x4<T, P> operator+ (
    -
    153  tmat3x4<T, P> const & m1,
    -
    154  tmat3x4<T, P> const & m2);
    -
    155 
    -
    156  template <typename T, precision P>
    -
    157  GLM_FUNC_DECL tmat3x4<T, P> operator- (
    -
    158  tmat3x4<T, P> const & m,
    -
    159  T const & s);
    +
    140  // Increment and decrement operators
    +
    141 
    +
    142  GLM_FUNC_DECL tmat4x3<T, P> & operator++();
    +
    143  GLM_FUNC_DECL tmat4x3<T, P> & operator--();
    +
    144  GLM_FUNC_DECL tmat4x3<T, P> operator++(int);
    +
    145  GLM_FUNC_DECL tmat4x3<T, P> operator--(int);
    +
    146  };
    +
    147 
    +
    148  // Binary operators
    +
    149  template <typename T, precision P>
    +
    150  GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m, T const & s);
    +
    151 
    +
    152  template <typename T, precision P>
    +
    153  GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);
    +
    154 
    +
    155  template <typename T, precision P>
    +
    156  GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m, T const & s);
    +
    157 
    +
    158  template <typename T, precision P>
    +
    159  GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);
    160 
    161  template <typename T, precision P>
    -
    162  GLM_FUNC_DECL tmat3x4<T, P> operator- (
    -
    163  tmat3x4<T, P> const & m1,
    -
    164  tmat3x4<T, P> const & m2);
    -
    165 
    -
    166  template <typename T, precision P>
    -
    167  GLM_FUNC_DECL tmat3x4<T, P> operator* (
    -
    168  tmat3x4<T, P> const & m,
    -
    169  T const & s);
    -
    170 
    -
    171  template <typename T, precision P>
    -
    172  GLM_FUNC_DECL tmat3x4<T, P> operator* (
    -
    173  T const & s,
    -
    174  tmat3x4<T, P> const & m);
    +
    162  GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat4x3<T, P> const & m, T const & s);
    +
    163 
    +
    164  template <typename T, precision P>
    +
    165  GLM_FUNC_DECL tmat4x3<T, P> operator*(T const & s, tmat4x3<T, P> const & m);
    +
    166 
    +
    167  template <typename T, precision P>
    +
    168  GLM_FUNC_DECL typename tmat4x3<T, P>::col_type operator*(tmat4x3<T, P> const & m, typename tmat4x3<T, P>::row_type const & v);
    +
    169 
    +
    170  template <typename T, precision P>
    +
    171  GLM_FUNC_DECL typename tmat4x3<T, P>::row_type operator*(typename tmat4x3<T, P>::col_type const & v, tmat4x3<T, P> const & m);
    +
    172 
    +
    173  template <typename T, precision P>
    +
    174  GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat2x4<T, P> const & m2);
    175 
    176  template <typename T, precision P>
    -
    177  GLM_FUNC_DECL typename tmat3x4<T, P>::col_type operator* (
    -
    178  tmat3x4<T, P> const & m,
    -
    179  typename tmat3x4<T, P>::row_type const & v);
    -
    180 
    -
    181  template <typename T, precision P>
    -
    182  GLM_FUNC_DECL typename tmat3x4<T, P>::row_type operator* (
    -
    183  typename tmat3x4<T, P>::col_type const & v,
    -
    184  tmat3x4<T, P> const & m);
    -
    185 
    -
    186  template <typename T, precision P>
    -
    187  GLM_FUNC_DECL tmat4x4<T, P> operator* (
    -
    188  tmat3x4<T, P> const & m1,
    -
    189  tmat4x3<T, P> const & m2);
    -
    190 
    -
    191  template <typename T, precision P>
    -
    192  GLM_FUNC_DECL tmat2x4<T, P> operator* (
    -
    193  tmat3x4<T, P> const & m1,
    -
    194  tmat2x3<T, P> const & m2);
    -
    195 
    -
    196  template <typename T, precision P>
    -
    197  GLM_FUNC_DECL tmat3x4<T, P> operator* (
    -
    198  tmat3x4<T, P> const & m1,
    -
    199  tmat3x3<T, P> const & m2);
    -
    200 
    -
    201  template <typename T, precision P>
    -
    202  GLM_FUNC_DECL tmat3x4<T, P> operator/ (
    -
    203  tmat3x4<T, P> const & m,
    -
    204  T const & s);
    -
    205 
    -
    206  template <typename T, precision P>
    -
    207  GLM_FUNC_DECL tmat3x4<T, P> operator/ (
    -
    208  T const & s,
    -
    209  tmat3x4<T, P> const & m);
    -
    210 
    -
    211  // Unary constant operators
    -
    212  template <typename T, precision P>
    -
    213  GLM_FUNC_DECL tmat3x4<T, P> const operator-(
    -
    214  tmat3x4<T, P> const & m);
    -
    215 
    -
    216 }//namespace detail
    -
    217 }//namespace glm
    -
    218 
    -
    219 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    220 #include "type_mat3x4.inl"
    -
    221 #endif
    -
    222 
    -
    223 #endif //glm_core_type_mat3x4
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    177  GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat3x4<T, P> const & m2);
    +
    178 
    +
    179  template <typename T, precision P>
    +
    180  GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat4x4<T, P> const & m2);
    +
    181 
    +
    182  template <typename T, precision P>
    +
    183  GLM_FUNC_DECL tmat4x3<T, P> operator/(tmat4x3<T, P> const & m, T const & s);
    +
    184 
    +
    185  template <typename T, precision P>
    +
    186  GLM_FUNC_DECL tmat4x3<T, P> operator/(T const & s, tmat4x3<T, P> const & m);
    +
    187 
    +
    188  // Unary constant operators
    +
    189  template <typename T, precision P>
    +
    190  GLM_FUNC_DECL tmat4x3<T, P> const operator-(tmat4x3<T, P> const & m);
    +
    191 }//namespace glm
    +
    192 
    +
    193 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    194 #include "type_mat4x3.inl"
    +
    195 #endif //GLM_EXTERNAL_TEMPLATE
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00129.html b/doc/api/a00129.html new file mode 100644 index 00000000..630afb9c --- /dev/null +++ b/doc/api/a00129.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_mat4x4.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_mat4x4.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2005-01-27 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_mat4x4.hpp.

    +
    + + + + diff --git a/doc/api/a00129_source.html b/doc/api/a00129_source.html index 7e8b424b..886318df 100644 --- a/doc/api/a00129_source.html +++ b/doc/api/a00129_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat4x2.hpp Source File + +0.9.6: type_mat4x4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,221 +41,213 @@
    -
    type_mat4x2.hpp
    +
    type_mat4x4.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat4x2
    -
    30 #define glm_core_type_mat4x2
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec2.hpp"
    -
    34 #include "type_vec4.hpp"
    -
    35 #include "type_mat.hpp"
    -
    36 #include <limits>
    -
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41  template <typename T, precision P>
    -
    42  struct tmat4x2
    -
    43  {
    -
    44  enum ctor{_null};
    -
    45  typedef T value_type;
    -
    46  typedef std::size_t size_type;
    -
    47  typedef tvec2<T, P> col_type;
    -
    48  typedef tvec4<T, P> row_type;
    -
    49  typedef tmat4x2<T, P> type;
    -
    50  typedef tmat2x4<T, P> transpose_type;
    -
    51 
    -
    52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    53 
    -
    54  private:
    -
    55  // Data
    -
    56  col_type value[4];
    -
    57 
    -
    58  public:
    -
    59  // Constructors
    -
    60  GLM_FUNC_DECL tmat4x2();
    -
    61  GLM_FUNC_DECL tmat4x2(tmat4x2<T, P> const & m);
    -
    62  template <precision Q>
    -
    63  GLM_FUNC_DECL tmat4x2(tmat4x2<T, Q> const & m);
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec4.hpp"
    +
    33 #include "type_mat.hpp"
    +
    34 #include <limits>
    +
    35 #include <cstddef>
    +
    36 
    +
    37 namespace glm
    +
    38 {
    +
    39  template <typename T, precision P = defaultp>
    +
    40  struct tmat4x4
    +
    41  {
    +
    42  typedef T value_type;
    +
    43  typedef std::size_t size_type;
    +
    44  typedef tvec4<T, P> col_type;
    +
    45  typedef tvec4<T, P> row_type;
    +
    46  typedef tmat4x4<T, P> type;
    +
    47  typedef tmat4x4<T, P> transpose_type;
    +
    48 
    +
    49 # ifdef GLM_FORCE_SIZE_FUNC
    +
    50  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    51 # else
    +
    52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    53 # endif//GLM_FORCE_SIZE_FUNC
    +
    54 
    +
    55  template <typename U, precision Q>
    +
    56  friend tvec4<U, Q> operator/(tmat4x4<U, Q> const & m, tvec4<U, Q> const & v);
    +
    57  template <typename U, precision Q>
    +
    58  friend tvec4<U, Q> operator/(tvec4<U, Q> const & v, tmat4x4<U, Q> const & m);
    +
    59 
    +
    60  private:
    +
    62  col_type value[4];
    64 
    -
    65  GLM_FUNC_DECL explicit tmat4x2(
    -
    66  ctor Null);
    -
    67  GLM_FUNC_DECL explicit tmat4x2(
    -
    68  T const & x);
    -
    69  GLM_FUNC_DECL explicit tmat4x2(
    -
    70  T const & x0, T const & y0,
    -
    71  T const & x1, T const & y1,
    -
    72  T const & x2, T const & y2,
    -
    73  T const & x3, T const & y3);
    -
    74  GLM_FUNC_DECL explicit tmat4x2(
    -
    75  col_type const & v0,
    -
    76  col_type const & v1,
    -
    77  col_type const & v2,
    -
    78  col_type const & v3);
    -
    79 
    -
    80 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    81  template <typename U>
    -
    82  GLM_FUNC_DECL tmat4x2(std::initializer_list<U> m);
    -
    83 
    -
    84  GLM_FUNC_DECL tmat4x2(std::initializer_list<tvec2<T, P> > m);
    -
    85 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    86 
    -
    88  // Conversions
    -
    89 
    -
    90  template<
    -
    91  typename X1, typename Y1,
    -
    92  typename X2, typename Y2,
    -
    93  typename X3, typename Y3,
    -
    94  typename X4, typename Y4>
    -
    95  GLM_FUNC_DECL explicit tmat4x2(
    -
    96  X1 const & x1, Y1 const & y1,
    -
    97  X2 const & x2, Y2 const & y2,
    -
    98  X3 const & x3, Y3 const & y3,
    -
    99  X4 const & x4, Y4 const & y4);
    -
    100 
    -
    101  template <typename V1, typename V2, typename V3, typename V4>
    -
    102  GLM_FUNC_DECL explicit tmat4x2(
    -
    103  tvec2<V1, P> const & v1,
    -
    104  tvec2<V2, P> const & v2,
    -
    105  tvec2<V3, P> const & v3,
    -
    106  tvec2<V4, P> const & v4);
    -
    107 
    -
    108  // Matrix conversions
    -
    109  template <typename U, precision Q>
    -
    110  GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U, Q> const & m);
    -
    111 
    -
    112  GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T, P> const & x);
    -
    113  GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T, P> const & x);
    -
    114  GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T, P> const & x);
    -
    115  GLM_FUNC_DECL explicit tmat4x2(tmat2x3<T, P> const & x);
    -
    116  GLM_FUNC_DECL explicit tmat4x2(tmat3x2<T, P> const & x);
    -
    117  GLM_FUNC_DECL explicit tmat4x2(tmat2x4<T, P> const & x);
    -
    118  GLM_FUNC_DECL explicit tmat4x2(tmat4x3<T, P> const & x);
    -
    119  GLM_FUNC_DECL explicit tmat4x2(tmat3x4<T, P> const & x);
    -
    120 
    -
    121  // Accesses
    -
    122  GLM_FUNC_DECL col_type & operator[](length_t i);
    -
    123  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    -
    124 
    -
    125  // Unary updatable operators
    -
    126  GLM_FUNC_DECL tmat4x2<T, P>& operator= (tmat4x2<T, P> const & m);
    -
    127  template <typename U>
    -
    128  GLM_FUNC_DECL tmat4x2<T, P>& operator= (tmat4x2<U, P> const & m);
    -
    129  template <typename U>
    -
    130  GLM_FUNC_DECL tmat4x2<T, P>& operator+= (U s);
    -
    131  template <typename U>
    -
    132  GLM_FUNC_DECL tmat4x2<T, P>& operator+= (tmat4x2<U, P> const & m);
    -
    133  template <typename U>
    -
    134  GLM_FUNC_DECL tmat4x2<T, P>& operator-= (U s);
    -
    135  template <typename U>
    -
    136  GLM_FUNC_DECL tmat4x2<T, P>& operator-= (tmat4x2<U, P> const & m);
    -
    137  template <typename U>
    -
    138  GLM_FUNC_DECL tmat4x2<T, P>& operator*= (U s);
    -
    139  template <typename U>
    -
    140  GLM_FUNC_DECL tmat4x2<T, P>& operator/= (U s);
    -
    141 
    -
    143  // Increment and decrement operators
    -
    144 
    -
    145  GLM_FUNC_DECL tmat4x2<T, P> & operator++ ();
    -
    146  GLM_FUNC_DECL tmat4x2<T, P> & operator-- ();
    -
    147  GLM_FUNC_DECL tmat4x2<T, P> operator++(int);
    -
    148  GLM_FUNC_DECL tmat4x2<T, P> operator--(int);
    -
    149  };
    -
    150 
    -
    151  // Binary operators
    -
    152  template <typename T, precision P>
    -
    153  GLM_FUNC_DECL tmat4x2<T, P> operator+ (
    -
    154  tmat4x2<T, P> const & m,
    -
    155  T const & s);
    -
    156 
    -
    157  template <typename T, precision P>
    -
    158  GLM_FUNC_DECL tmat4x2<T, P> operator+ (
    -
    159  tmat4x2<T, P> const & m1,
    -
    160  tmat4x2<T, P> const & m2);
    -
    161 
    -
    162  template <typename T, precision P>
    -
    163  GLM_FUNC_DECL tmat4x2<T, P> operator- (
    -
    164  tmat4x2<T, P> const & m,
    -
    165  T const & s);
    -
    166 
    -
    167  template <typename T, precision P>
    -
    168  GLM_FUNC_DECL tmat4x2<T, P> operator- (
    -
    169  tmat4x2<T, P> const & m1,
    -
    170  tmat4x2<T, P> const & m2);
    +
    65  public:
    +
    66  // Constructors
    +
    67  GLM_FUNC_DECL tmat4x4();
    +
    68  //GLM_FUNC_DECL tmat4x4(tmat4x4<T, P> const & m);
    +
    69  template <precision Q>
    +
    70  GLM_FUNC_DECL tmat4x4(tmat4x4<T, Q> const & m);
    +
    71 
    +
    72  GLM_FUNC_DECL explicit tmat4x4(ctor);
    +
    73  GLM_FUNC_DECL explicit tmat4x4(T const & x);
    +
    74  GLM_FUNC_DECL tmat4x4(
    +
    75  T const & x0, T const & y0, T const & z0, T const & w0,
    +
    76  T const & x1, T const & y1, T const & z1, T const & w1,
    +
    77  T const & x2, T const & y2, T const & z2, T const & w2,
    +
    78  T const & x3, T const & y3, T const & z3, T const & w3);
    +
    79  GLM_FUNC_DECL tmat4x4(
    +
    80  col_type const & v0,
    +
    81  col_type const & v1,
    +
    82  col_type const & v2,
    +
    83  col_type const & v3);
    +
    84 
    +
    86  // Conversions
    +
    87 
    +
    88  template <
    +
    89  typename X1, typename Y1, typename Z1, typename W1,
    +
    90  typename X2, typename Y2, typename Z2, typename W2,
    +
    91  typename X3, typename Y3, typename Z3, typename W3,
    +
    92  typename X4, typename Y4, typename Z4, typename W4>
    +
    93  GLM_FUNC_DECL tmat4x4(
    +
    94  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
    +
    95  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
    +
    96  X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3,
    +
    97  X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4);
    +
    98 
    +
    99  template <typename V1, typename V2, typename V3, typename V4>
    +
    100  GLM_FUNC_DECL tmat4x4(
    +
    101  tvec4<V1, P> const & v1,
    +
    102  tvec4<V2, P> const & v2,
    +
    103  tvec4<V3, P> const & v3,
    +
    104  tvec4<V4, P> const & v4);
    +
    105 
    +
    107  // Matrix conversions
    +
    108 
    +
    109 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    110  template <typename U, precision Q>
    +
    111  GLM_FUNC_DECL explicit tmat4x4(tmat4x4<U, Q> const & m);
    +
    112 # else
    +
    113  template <typename U, precision Q>
    +
    114  GLM_FUNC_DECL tmat4x4(tmat4x4<U, Q> const & m);
    +
    115 # endif
    +
    116 
    +
    117  GLM_FUNC_DECL explicit tmat4x4(tmat2x2<T, P> const & x);
    +
    118  GLM_FUNC_DECL explicit tmat4x4(tmat3x3<T, P> const & x);
    +
    119  GLM_FUNC_DECL explicit tmat4x4(tmat2x3<T, P> const & x);
    +
    120  GLM_FUNC_DECL explicit tmat4x4(tmat3x2<T, P> const & x);
    +
    121  GLM_FUNC_DECL explicit tmat4x4(tmat2x4<T, P> const & x);
    +
    122  GLM_FUNC_DECL explicit tmat4x4(tmat4x2<T, P> const & x);
    +
    123  GLM_FUNC_DECL explicit tmat4x4(tmat3x4<T, P> const & x);
    +
    124  GLM_FUNC_DECL explicit tmat4x4(tmat4x3<T, P> const & x);
    +
    125 
    +
    126  // Accesses
    +
    127  GLM_FUNC_DECL col_type & operator[](length_t i);
    +
    128  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    +
    129 
    +
    130  //GLM_FUNC_DECL tmat4x4<T, P> & operator=(tmat4x4<T, P> const & m);
    +
    131  template <typename U>
    +
    132  GLM_FUNC_DECL tmat4x4<T, P> & operator=(tmat4x4<U, P> const & m);
    +
    133  template <typename U>
    +
    134  GLM_FUNC_DECL tmat4x4<T, P> & operator+=(U s);
    +
    135  template <typename U>
    +
    136  GLM_FUNC_DECL tmat4x4<T, P> & operator+=(tmat4x4<U, P> const & m);
    +
    137  template <typename U>
    +
    138  GLM_FUNC_DECL tmat4x4<T, P> & operator-=(U s);
    +
    139  template <typename U>
    +
    140  GLM_FUNC_DECL tmat4x4<T, P> & operator-=(tmat4x4<U, P> const & m);
    +
    141  template <typename U>
    +
    142  GLM_FUNC_DECL tmat4x4<T, P> & operator*=(U s);
    +
    143  template <typename U>
    +
    144  GLM_FUNC_DECL tmat4x4<T, P> & operator*=(tmat4x4<U, P> const & m);
    +
    145  template <typename U>
    +
    146  GLM_FUNC_DECL tmat4x4<T, P> & operator/=(U s);
    +
    147  template <typename U>
    +
    148  GLM_FUNC_DECL tmat4x4<T, P> & operator/=(tmat4x4<U, P> const & m);
    +
    149 
    +
    151  // Increment and decrement operators
    +
    152 
    +
    153  GLM_FUNC_DECL tmat4x4<T, P> & operator++();
    +
    154  GLM_FUNC_DECL tmat4x4<T, P> & operator--();
    +
    155  GLM_FUNC_DECL tmat4x4<T, P> operator++(int);
    +
    156  GLM_FUNC_DECL tmat4x4<T, P> operator--(int);
    +
    157  };
    +
    158 
    +
    159  // Binary operators
    +
    160  template <typename T, precision P>
    +
    161  GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m, T const & s);
    +
    162 
    +
    163  template <typename T, precision P>
    +
    164  GLM_FUNC_DECL tmat4x4<T, P> operator+(T const & s, tmat4x4<T, P> const & m);
    +
    165 
    +
    166  template <typename T, precision P>
    +
    167  GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
    +
    168 
    +
    169  template <typename T, precision P>
    +
    170  GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m, T const & s);
    171 
    -
    172  template <typename T, precision P>
    -
    173  GLM_FUNC_DECL tmat4x2<T, P> operator* (
    -
    174  tmat4x2<T, P> const & m,
    -
    175  T const & s);
    -
    176 
    -
    177  template <typename T, precision P>
    -
    178  GLM_FUNC_DECL tmat4x2<T, P> operator* (
    -
    179  T const & s,
    -
    180  tmat4x2<T, P> const & m);
    -
    181 
    -
    182  template <typename T, precision P>
    -
    183  GLM_FUNC_DECL typename tmat4x2<T, P>::col_type operator* (
    -
    184  tmat4x2<T, P> const & m,
    -
    185  typename tmat4x2<T, P>::row_type const & v);
    +
    172  template <typename T, precision P>
    +
    173  GLM_FUNC_DECL tmat4x4<T, P> operator-(T const & s, tmat4x4<T, P> const & m);
    +
    174 
    +
    175  template <typename T, precision P>
    +
    176  GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
    +
    177 
    +
    178  template <typename T, precision P>
    +
    179  GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat4x4<T, P> const & m, T const & s);
    +
    180 
    +
    181  template <typename T, precision P>
    +
    182  GLM_FUNC_DECL tmat4x4<T, P> operator*(T const & s, tmat4x4<T, P> const & m);
    +
    183 
    +
    184  template <typename T, precision P>
    +
    185  GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator*(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v);
    186 
    187  template <typename T, precision P>
    -
    188  GLM_FUNC_DECL typename tmat4x2<T, P>::row_type operator* (
    -
    189  typename tmat4x2<T, P>::col_type const & v,
    -
    190  tmat4x2<T, P> const & m);
    -
    191 
    -
    192  template <typename T, precision P>
    -
    193  GLM_FUNC_DECL tmat3x2<T, P> operator* (
    -
    194  tmat4x2<T, P> const & m1,
    -
    195  tmat3x4<T, P> const & m2);
    -
    196 
    -
    197  template <typename T, precision P>
    -
    198  GLM_FUNC_DECL tmat4x2<T, P> operator* (
    -
    199  tmat4x2<T, P> const & m1,
    -
    200  tmat4x4<T, P> const & m2);
    -
    201 
    +
    188  GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator*(typename tmat4x4<T, P>::col_type const & v, tmat4x4<T, P> const & m);
    +
    189 
    +
    190  template <typename T, precision P>
    +
    191  GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat2x4<T, P> const & m2);
    +
    192 
    +
    193  template <typename T, precision P>
    +
    194  GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat3x4<T, P> const & m2);
    +
    195 
    +
    196  template <typename T, precision P>
    +
    197  GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
    +
    198 
    +
    199  template <typename T, precision P>
    +
    200  GLM_FUNC_DECL tmat4x4<T, P> operator/(tmat4x4<T, P> const & m, T const & s);
    +
    201 
    202  template <typename T, precision P>
    -
    203  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    -
    204  tmat4x3<T, P> const & m1,
    -
    205  tmat2x4<T, P> const & m2);
    -
    206 
    -
    207  template <typename T, precision P>
    -
    208  GLM_FUNC_DECL tmat4x2<T, P> operator/ (
    -
    209  tmat4x2<T, P> const & m,
    -
    210  T const & s);
    -
    211 
    -
    212  template <typename T, precision P>
    -
    213  GLM_FUNC_DECL tmat4x2<T, P> operator/ (
    -
    214  T const & s,
    -
    215  tmat4x2<T, P> const & m);
    -
    216 
    -
    217  // Unary constant operators
    -
    218  template <typename T, precision P>
    -
    219  GLM_FUNC_DECL tmat4x2<T, P> const operator-(
    -
    220  tmat4x2<T, P> const & m);
    -
    221 
    -
    222 }//namespace detail
    -
    223 }//namespace glm
    -
    224 
    -
    225 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    226 #include "type_mat4x2.inl"
    -
    227 #endif
    -
    228 
    -
    229 #endif //glm_core_type_mat4x2
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    203  GLM_FUNC_DECL tmat4x4<T, P> operator/(T const & s, tmat4x4<T, P> const & m);
    +
    204 
    +
    205  template <typename T, precision P>
    +
    206  GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator/(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v);
    +
    207 
    +
    208  template <typename T, precision P>
    +
    209  GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator/(typename tmat4x4<T, P>::col_type & v, tmat4x4<T, P> const & m);
    +
    210 
    +
    211  template <typename T, precision P>
    +
    212  GLM_FUNC_DECL tmat4x4<T, P> operator/(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
    +
    213 
    +
    214  // Unary constant operators
    +
    215  template <typename T, precision P>
    +
    216  GLM_FUNC_DECL tmat4x4<T, P> const operator-(tmat4x4<T, P> const & m);
    +
    217 }//namespace glm
    +
    218 
    +
    219 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    220 #include "type_mat4x4.inl"
    +
    221 #endif//GLM_EXTERNAL_TEMPLATE
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00130.html b/doc/api/a00130.html new file mode 100644 index 00000000..20016bfa --- /dev/null +++ b/doc/api/a00130.html @@ -0,0 +1,77 @@ + + + + + + +0.9.6: type_precision.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_precision.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTC_type_precision

    +
    Date
    2009-06-04 / 2011-12-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +gtc_half_float (dependence)
    +
    +GLM_GTC_quaternion (dependence)
    + +

    Definition in file type_precision.hpp.

    +
    + + + + diff --git a/doc/api/a00130_source.html b/doc/api/a00130_source.html index 72c77d7d..fd9fa709 100644 --- a/doc/api/a00130_source.html +++ b/doc/api/a00130_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat4x3.hpp Source File + +0.9.6: type_precision.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,221 +41,652 @@
    -
    type_mat4x3.hpp
    +
    type_precision.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat4x3
    -
    30 #define glm_core_type_mat4x3
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec3.hpp"
    -
    34 #include "type_vec4.hpp"
    -
    35 #include "type_mat.hpp"
    -
    36 #include <limits>
    -
    37 
    -
    38 namespace glm{
    -
    39 namespace detail
    -
    40 {
    -
    41  template <typename T, precision P>
    -
    42  struct tmat4x3
    -
    43  {
    -
    44  enum ctor{_null};
    -
    45  typedef T value_type;
    -
    46  typedef std::size_t size_type;
    -
    47  typedef tvec3<T, P> col_type;
    -
    48  typedef tvec4<T, P> row_type;
    -
    49  typedef tmat4x3<T, P> type;
    -
    50  typedef tmat3x4<T, P> transpose_type;
    -
    51 
    -
    52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    53 
    -
    54  private:
    -
    55  // Data
    -
    56  col_type value[4];
    -
    57 
    -
    58  public:
    -
    59  // Constructors
    -
    60  GLM_FUNC_DECL tmat4x3();
    -
    61  GLM_FUNC_DECL tmat4x3(tmat4x3<T, P> const & m);
    -
    62  template <precision Q>
    -
    63  GLM_FUNC_DECL tmat4x3(tmat4x3<T, Q> const & m);
    +Go to the documentation of this file.
    1 
    +
    43 #pragma once
    +
    44 
    +
    45 // Dependency:
    +
    46 #include "../gtc/quaternion.hpp"
    +
    47 #include "../gtc/vec1.hpp"
    +
    48 #include "../vec2.hpp"
    +
    49 #include "../vec3.hpp"
    +
    50 #include "../vec4.hpp"
    +
    51 #include "../mat2x2.hpp"
    +
    52 #include "../mat2x3.hpp"
    +
    53 #include "../mat2x4.hpp"
    +
    54 #include "../mat3x2.hpp"
    +
    55 #include "../mat3x3.hpp"
    +
    56 #include "../mat3x4.hpp"
    +
    57 #include "../mat4x2.hpp"
    +
    58 #include "../mat4x3.hpp"
    +
    59 #include "../mat4x4.hpp"
    +
    60 
    +
    61 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    62 # pragma message("GLM: GLM_GTC_type_precision extension included")
    +
    63 #endif
    64 
    -
    65  GLM_FUNC_DECL explicit tmat4x3(
    -
    66  ctor Null);
    -
    67  GLM_FUNC_DECL explicit tmat4x3(
    -
    68  T const & x);
    -
    69  GLM_FUNC_DECL explicit tmat4x3(
    -
    70  T const & x0, T const & y0, T const & z0,
    -
    71  T const & x1, T const & y1, T const & z1,
    -
    72  T const & x2, T const & y2, T const & z2,
    -
    73  T const & x3, T const & y3, T const & z3);
    -
    74  GLM_FUNC_DECL explicit tmat4x3(
    -
    75  col_type const & v0,
    -
    76  col_type const & v1,
    -
    77  col_type const & v2,
    -
    78  col_type const & v3);
    -
    79 
    -
    80 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    81  template <typename U>
    -
    82  GLM_FUNC_DECL tmat4x3(std::initializer_list<U> m);
    -
    83 
    -
    84  GLM_FUNC_DECL tmat4x3(std::initializer_list<tvec3<T, P> > m);
    -
    85 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    86 
    -
    88  // Conversions
    -
    89 
    -
    90  template <
    -
    91  typename X1, typename Y1, typename Z1,
    -
    92  typename X2, typename Y2, typename Z2,
    -
    93  typename X3, typename Y3, typename Z3,
    -
    94  typename X4, typename Y4, typename Z4>
    -
    95  GLM_FUNC_DECL explicit tmat4x3(
    -
    96  X1 const & x1, Y1 const & y1, Z1 const & z1,
    -
    97  X2 const & x2, Y2 const & y2, Z2 const & z2,
    -
    98  X3 const & x3, Y3 const & y3, Z3 const & z3,
    -
    99  X4 const & x4, Y4 const & y4, Z4 const & z4);
    -
    100 
    -
    101  template <typename V1, typename V2, typename V3, typename V4>
    -
    102  GLM_FUNC_DECL explicit tmat4x3(
    -
    103  tvec3<V1, P> const & v1,
    -
    104  tvec3<V2, P> const & v2,
    -
    105  tvec3<V3, P> const & v3,
    -
    106  tvec3<V4, P> const & v4);
    -
    107 
    -
    108  // Matrix conversions
    -
    109  template <typename U, precision Q>
    -
    110  GLM_FUNC_DECL explicit tmat4x3(tmat4x3<U, Q> const & m);
    -
    111 
    -
    112  GLM_FUNC_DECL explicit tmat4x3(tmat2x2<T, P> const & x);
    -
    113  GLM_FUNC_DECL explicit tmat4x3(tmat3x3<T, P> const & x);
    -
    114  GLM_FUNC_DECL explicit tmat4x3(tmat4x4<T, P> const & x);
    -
    115  GLM_FUNC_DECL explicit tmat4x3(tmat2x3<T, P> const & x);
    -
    116  GLM_FUNC_DECL explicit tmat4x3(tmat3x2<T, P> const & x);
    -
    117  GLM_FUNC_DECL explicit tmat4x3(tmat2x4<T, P> const & x);
    -
    118  GLM_FUNC_DECL explicit tmat4x3(tmat4x2<T, P> const & x);
    -
    119  GLM_FUNC_DECL explicit tmat4x3(tmat3x4<T, P> const & x);
    +
    65 namespace glm
    +
    66 {
    +
    68  // Signed int vector types
    +
    69 
    +
    72 
    +
    75  typedef detail::int8 lowp_int8;
    +
    76 
    +
    79  typedef detail::int16 lowp_int16;
    +
    80 
    +
    83  typedef detail::int32 lowp_int32;
    +
    84 
    +
    87  typedef detail::int64 lowp_int64;
    +
    88 
    +
    91  typedef detail::int8 lowp_int8_t;
    +
    92 
    +
    95  typedef detail::int16 lowp_int16_t;
    +
    96 
    +
    99  typedef detail::int32 lowp_int32_t;
    +
    100 
    +
    103  typedef detail::int64 lowp_int64_t;
    +
    104 
    +
    107  typedef detail::int8 lowp_i8;
    +
    108 
    +
    111  typedef detail::int16 lowp_i16;
    +
    112 
    +
    115  typedef detail::int32 lowp_i32;
    +
    116 
    +
    119  typedef detail::int64 lowp_i64;
    120 
    -
    121  // Accesses
    -
    122  GLM_FUNC_DECL col_type & operator[](size_type i);
    -
    123  GLM_FUNC_DECL col_type const & operator[](size_type i) const;
    -
    124 
    -
    125  // Unary updatable operators
    -
    126  GLM_FUNC_DECL tmat4x3<T, P> & operator= (tmat4x3<T, P> const & m);
    -
    127  template <typename U>
    -
    128  GLM_FUNC_DECL tmat4x3<T, P> & operator= (tmat4x3<U, P> const & m);
    -
    129  template <typename U>
    -
    130  GLM_FUNC_DECL tmat4x3<T, P> & operator+= (U s);
    -
    131  template <typename U>
    -
    132  GLM_FUNC_DECL tmat4x3<T, P> & operator+= (tmat4x3<U, P> const & m);
    -
    133  template <typename U>
    -
    134  GLM_FUNC_DECL tmat4x3<T, P> & operator-= (U s);
    -
    135  template <typename U>
    -
    136  GLM_FUNC_DECL tmat4x3<T, P> & operator-= (tmat4x3<U, P> const & m);
    -
    137  template <typename U>
    -
    138  GLM_FUNC_DECL tmat4x3<T, P> & operator*= (U s);
    -
    139  template <typename U>
    -
    140  GLM_FUNC_DECL tmat4x3<T, P> & operator/= (U s);
    -
    141 
    -
    143  // Increment and decrement operators
    +
    123  typedef detail::int8 mediump_int8;
    +
    124 
    +
    127  typedef detail::int16 mediump_int16;
    +
    128 
    +
    131  typedef detail::int32 mediump_int32;
    +
    132 
    +
    135  typedef detail::int64 mediump_int64;
    +
    136 
    +
    139  typedef detail::int8 mediump_int8_t;
    +
    140 
    +
    143  typedef detail::int16 mediump_int16_t;
    144 
    -
    145  GLM_FUNC_DECL tmat4x3<T, P> & operator++ ();
    -
    146  GLM_FUNC_DECL tmat4x3<T, P> & operator-- ();
    -
    147  GLM_FUNC_DECL tmat4x3<T, P> operator++(int);
    -
    148  GLM_FUNC_DECL tmat4x3<T, P> operator--(int);
    -
    149  };
    -
    150 
    -
    151  // Binary operators
    -
    152  template <typename T, precision P>
    -
    153  GLM_FUNC_DECL tmat4x3<T, P> operator+ (
    -
    154  tmat4x3<T, P> const & m,
    -
    155  T const & s);
    -
    156 
    -
    157  template <typename T, precision P>
    -
    158  GLM_FUNC_DECL tmat4x3<T, P> operator+ (
    -
    159  tmat4x3<T, P> const & m1,
    -
    160  tmat4x3<T, P> const & m2);
    -
    161 
    -
    162  template <typename T, precision P>
    -
    163  GLM_FUNC_DECL tmat4x3<T, P> operator- (
    -
    164  tmat4x3<T, P> const & m,
    -
    165  T const & s);
    -
    166 
    -
    167  template <typename T, precision P>
    -
    168  GLM_FUNC_DECL tmat4x3<T, P> operator- (
    -
    169  tmat4x3<T, P> const & m1,
    -
    170  tmat4x3<T, P> const & m2);
    -
    171 
    -
    172  template <typename T, precision P>
    -
    173  GLM_FUNC_DECL tmat4x3<T, P> operator* (
    -
    174  tmat4x3<T, P> const & m,
    -
    175  T const & s);
    +
    147  typedef detail::int32 mediump_int32_t;
    +
    148 
    +
    151  typedef detail::int64 mediump_int64_t;
    +
    152 
    +
    155  typedef detail::int8 mediump_i8;
    +
    156 
    +
    159  typedef detail::int16 mediump_i16;
    +
    160 
    +
    163  typedef detail::int32 mediump_i32;
    +
    164 
    +
    167  typedef detail::int64 mediump_i64;
    +
    168 
    +
    171  typedef detail::int8 highp_int8;
    +
    172 
    +
    175  typedef detail::int16 highp_int16;
    176 
    -
    177  template <typename T, precision P>
    -
    178  GLM_FUNC_DECL tmat4x3<T, P> operator* (
    -
    179  T const & s,
    -
    180  tmat4x3<T, P> const & m);
    -
    181 
    -
    182  template <typename T, precision P>
    -
    183  GLM_FUNC_DECL typename tmat4x3<T, P>::col_type operator* (
    -
    184  tmat4x3<T, P> const & m,
    -
    185  typename tmat4x3<T, P>::row_type const & v);
    -
    186 
    -
    187  template <typename T, precision P>
    -
    188  GLM_FUNC_DECL typename tmat4x3<T, P>::row_type operator* (
    -
    189  typename tmat4x3<T, P>::col_type const & v,
    -
    190  tmat4x3<T, P> const & m);
    -
    191 
    -
    192  template <typename T, precision P>
    -
    193  GLM_FUNC_DECL tmat2x3<T, P> operator* (
    -
    194  tmat4x3<T, P> const & m1,
    -
    195  tmat2x4<T, P> const & m2);
    +
    179  typedef detail::int32 highp_int32;
    +
    180 
    +
    183  typedef detail::int64 highp_int64;
    +
    184 
    +
    187  typedef detail::int8 highp_int8_t;
    +
    188 
    +
    191  typedef detail::int16 highp_int16_t;
    +
    192 
    +
    195  typedef detail::int32 highp_int32_t;
    196 
    -
    197  template <typename T, precision P>
    -
    198  GLM_FUNC_DECL tmat3x3<T, P> operator* (
    -
    199  tmat4x3<T, P> const & m1,
    -
    200  tmat3x4<T, P> const & m2);
    -
    201 
    -
    202  template <typename T, precision P>
    -
    203  GLM_FUNC_DECL tmat4x3<T, P> operator* (
    -
    204  tmat4x3<T, P> const & m1,
    -
    205  tmat4x4<T, P> const & m2);
    -
    206 
    -
    207  template <typename T, precision P>
    -
    208  GLM_FUNC_DECL tmat4x3<T, P> operator/ (
    -
    209  tmat4x3<T, P> const & m,
    -
    210  T const & s);
    -
    211 
    -
    212  template <typename T, precision P>
    -
    213  GLM_FUNC_DECL tmat4x3<T, P> operator/ (
    -
    214  T const & s,
    -
    215  tmat4x3<T, P> const & m);
    -
    216 
    -
    217  // Unary constant operators
    -
    218  template <typename T, precision P>
    -
    219  GLM_FUNC_DECL tmat4x3<T, P> const operator- (
    -
    220  tmat4x3<T, P> const & m);
    -
    221 
    -
    222 }//namespace detail
    -
    223 }//namespace glm
    -
    224 
    -
    225 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    226 #include "type_mat4x3.inl"
    -
    227 #endif //GLM_EXTERNAL_TEMPLATE
    -
    228 
    -
    229 #endif//glm_core_type_mat4x3
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    199  typedef detail::int64 highp_int64_t;
    +
    200 
    +
    203  typedef detail::int8 highp_i8;
    +
    204 
    +
    207  typedef detail::int16 highp_i16;
    +
    208 
    +
    211  typedef detail::int32 highp_i32;
    +
    212 
    +
    215  typedef detail::int64 highp_i64;
    +
    216 
    +
    217 
    +
    220  typedef detail::int8 int8;
    +
    221 
    +
    224  typedef detail::int16 int16;
    +
    225 
    +
    228  typedef detail::int32 int32;
    +
    229 
    +
    232  typedef detail::int64 int64;
    +
    233 
    +
    234 #if GLM_HAS_EXTENDED_INTEGER_TYPE
    +
    235  using std::int8_t;
    +
    236  using std::int16_t;
    +
    237  using std::int32_t;
    +
    238  using std::int64_t;
    +
    239 #else
    +
    240  typedef detail::int8 int8_t;
    +
    243 
    +
    246  typedef detail::int16 int16_t;
    +
    247 
    +
    250  typedef detail::int32 int32_t;
    +
    251 
    +
    254  typedef detail::int64 int64_t;
    +
    255 #endif
    +
    256 
    +
    259  typedef detail::int8 i8;
    +
    260 
    +
    263  typedef detail::int16 i16;
    +
    264 
    +
    267  typedef detail::int32 i32;
    +
    268 
    +
    271  typedef detail::int64 i64;
    +
    272 
    +
    273 
    +
    276  typedef tvec1<i8, defaultp> i8vec1;
    +
    277 
    +
    280  typedef tvec2<i8, defaultp> i8vec2;
    +
    281 
    +
    284  typedef tvec3<i8, defaultp> i8vec3;
    +
    285 
    +
    288  typedef tvec4<i8, defaultp> i8vec4;
    +
    289 
    +
    290 
    +
    293  typedef tvec1<i16, defaultp> i16vec1;
    +
    294 
    +
    297  typedef tvec2<i16, defaultp> i16vec2;
    +
    298 
    +
    301  typedef tvec3<i16, defaultp> i16vec3;
    +
    302 
    +
    305  typedef tvec4<i16, defaultp> i16vec4;
    +
    306 
    +
    307 
    +
    310  typedef tvec1<i32, defaultp> i32vec1;
    +
    311 
    +
    314  typedef tvec2<i32, defaultp> i32vec2;
    +
    315 
    +
    318  typedef tvec3<i32, defaultp> i32vec3;
    +
    319 
    +
    322  typedef tvec4<i32, defaultp> i32vec4;
    +
    323 
    +
    324 
    +
    327  typedef tvec1<i64, defaultp> i64vec1;
    +
    328 
    +
    331  typedef tvec2<i64, defaultp> i64vec2;
    +
    332 
    +
    335  typedef tvec3<i64, defaultp> i64vec3;
    +
    336 
    +
    339  typedef tvec4<i64, defaultp> i64vec4;
    +
    340 
    +
    341 
    +
    343  // Unsigned int vector types
    +
    344 
    +
    347  typedef detail::uint8 lowp_uint8;
    +
    348 
    +
    351  typedef detail::uint16 lowp_uint16;
    +
    352 
    +
    355  typedef detail::uint32 lowp_uint32;
    +
    356 
    +
    359  typedef detail::uint64 lowp_uint64;
    +
    360 
    +
    363  typedef detail::uint8 lowp_uint8_t;
    +
    364 
    +
    367  typedef detail::uint16 lowp_uint16_t;
    +
    368 
    +
    371  typedef detail::uint32 lowp_uint32_t;
    +
    372 
    +
    375  typedef detail::uint64 lowp_uint64_t;
    +
    376 
    +
    379  typedef detail::uint8 lowp_u8;
    +
    380 
    +
    383  typedef detail::uint16 lowp_u16;
    +
    384 
    +
    387  typedef detail::uint32 lowp_u32;
    +
    388 
    +
    391  typedef detail::uint64 lowp_u64;
    +
    392 
    +
    395  typedef detail::uint8 mediump_uint8;
    +
    396 
    +
    399  typedef detail::uint16 mediump_uint16;
    +
    400 
    +
    403  typedef detail::uint32 mediump_uint32;
    +
    404 
    +
    407  typedef detail::uint64 mediump_uint64;
    +
    408 
    +
    411  typedef detail::uint8 mediump_uint8_t;
    +
    412 
    +
    415  typedef detail::uint16 mediump_uint16_t;
    +
    416 
    +
    419  typedef detail::uint32 mediump_uint32_t;
    +
    420 
    +
    423  typedef detail::uint64 mediump_uint64_t;
    +
    424 
    +
    427  typedef detail::uint8 mediump_u8;
    +
    428 
    +
    431  typedef detail::uint16 mediump_u16;
    +
    432 
    +
    435  typedef detail::uint32 mediump_u32;
    +
    436 
    +
    439  typedef detail::uint64 mediump_u64;
    +
    440 
    +
    443  typedef detail::uint8 highp_uint8;
    +
    444 
    +
    447  typedef detail::uint16 highp_uint16;
    +
    448 
    +
    451  typedef detail::uint32 highp_uint32;
    +
    452 
    +
    455  typedef detail::uint64 highp_uint64;
    +
    456 
    +
    459  typedef detail::uint8 highp_uint8_t;
    +
    460 
    +
    463  typedef detail::uint16 highp_uint16_t;
    +
    464 
    +
    467  typedef detail::uint32 highp_uint32_t;
    +
    468 
    +
    471  typedef detail::uint64 highp_uint64_t;
    +
    472 
    +
    475  typedef detail::uint8 highp_u8;
    +
    476 
    +
    479  typedef detail::uint16 highp_u16;
    +
    480 
    +
    483  typedef detail::uint32 highp_u32;
    +
    484 
    +
    487  typedef detail::uint64 highp_u64;
    +
    488 
    +
    491  typedef detail::uint8 uint8;
    +
    492 
    +
    495  typedef detail::uint16 uint16;
    +
    496 
    +
    499  typedef detail::uint32 uint32;
    +
    500 
    +
    503  typedef detail::uint64 uint64;
    +
    504 
    +
    505 #if GLM_HAS_EXTENDED_INTEGER_TYPE
    +
    506  using std::uint8_t;
    +
    507  using std::uint16_t;
    +
    508  using std::uint32_t;
    +
    509  using std::uint64_t;
    +
    510 #else
    +
    511  typedef detail::uint8 uint8_t;
    +
    514 
    +
    517  typedef detail::uint16 uint16_t;
    +
    518 
    +
    521  typedef detail::uint32 uint32_t;
    +
    522 
    +
    525  typedef detail::uint64 uint64_t;
    +
    526 #endif
    +
    527 
    +
    530  typedef detail::uint8 u8;
    +
    531 
    +
    534  typedef detail::uint16 u16;
    +
    535 
    +
    538  typedef detail::uint32 u32;
    +
    539 
    +
    542  typedef detail::uint64 u64;
    +
    543 
    +
    544 
    +
    545 
    +
    548  typedef tvec1<u8, defaultp> u8vec1;
    +
    549 
    +
    552  typedef tvec2<u8, defaultp> u8vec2;
    +
    553 
    +
    556  typedef tvec3<u8, defaultp> u8vec3;
    +
    557 
    +
    560  typedef tvec4<u8, defaultp> u8vec4;
    +
    561 
    +
    562 
    +
    565  typedef tvec1<u16, defaultp> u16vec1;
    +
    566 
    +
    569  typedef tvec2<u16, defaultp> u16vec2;
    +
    570 
    +
    573  typedef tvec3<u16, defaultp> u16vec3;
    +
    574 
    +
    577  typedef tvec4<u16, defaultp> u16vec4;
    +
    578 
    +
    579 
    +
    582  typedef tvec1<u32, defaultp> u32vec1;
    +
    583 
    +
    586  typedef tvec2<u32, defaultp> u32vec2;
    +
    587 
    +
    590  typedef tvec3<u32, defaultp> u32vec3;
    +
    591 
    +
    594  typedef tvec4<u32, defaultp> u32vec4;
    +
    595 
    +
    596 
    +
    599  typedef tvec1<u64, defaultp> u64vec1;
    +
    600 
    +
    603  typedef tvec2<u64, defaultp> u64vec2;
    +
    604 
    +
    607  typedef tvec3<u64, defaultp> u64vec3;
    +
    608 
    +
    611  typedef tvec4<u64, defaultp> u64vec4;
    +
    612 
    +
    613 
    +
    615  // Float vector types
    +
    616 
    +
    619  typedef detail::float32 float32;
    +
    620 
    +
    623  typedef detail::float64 float64;
    +
    624 
    +
    625 
    +
    628  typedef detail::float32 float32_t;
    +
    629 
    +
    632  typedef detail::float64 float64_t;
    +
    633 
    +
    634 
    +
    637  typedef float32 f32;
    +
    638 
    +
    641  typedef float64 f64;
    +
    642 
    +
    643 
    +
    646  typedef tvec1<float, defaultp> fvec1;
    +
    647 
    +
    650  typedef tvec2<float, defaultp> fvec2;
    +
    651 
    +
    654  typedef tvec3<float, defaultp> fvec3;
    +
    655 
    +
    658  typedef tvec4<float, defaultp> fvec4;
    +
    659 
    +
    660 
    +
    663  typedef tvec1<f32, defaultp> f32vec1;
    +
    664 
    +
    667  typedef tvec2<f32, defaultp> f32vec2;
    +
    668 
    +
    671  typedef tvec3<f32, defaultp> f32vec3;
    +
    672 
    +
    675  typedef tvec4<f32, defaultp> f32vec4;
    +
    676 
    +
    677 
    +
    680  typedef tvec1<f64, defaultp> f64vec1;
    +
    681 
    +
    684  typedef tvec2<f64, defaultp> f64vec2;
    +
    685 
    +
    688  typedef tvec3<f64, defaultp> f64vec3;
    +
    689 
    +
    692  typedef tvec4<f64, defaultp> f64vec4;
    +
    693 
    +
    694 
    +
    696  // Float matrix types
    +
    697 
    +
    700  //typedef detail::tmat1x1<f32> fmat1;
    +
    701 
    +
    704  typedef tmat2x2<f32, defaultp> fmat2;
    +
    705 
    +
    708  typedef tmat3x3<f32, defaultp> fmat3;
    +
    709 
    +
    712  typedef tmat4x4<f32, defaultp> fmat4;
    +
    713 
    +
    714 
    +
    717  //typedef f32 fmat1x1;
    +
    718 
    +
    721  typedef tmat2x2<f32, defaultp> fmat2x2;
    +
    722 
    +
    725  typedef tmat2x3<f32, defaultp> fmat2x3;
    +
    726 
    +
    729  typedef tmat2x4<f32, defaultp> fmat2x4;
    +
    730 
    +
    733  typedef tmat3x2<f32, defaultp> fmat3x2;
    +
    734 
    +
    737  typedef tmat3x3<f32, defaultp> fmat3x3;
    +
    738 
    +
    741  typedef tmat3x4<f32, defaultp> fmat3x4;
    +
    742 
    +
    745  typedef tmat4x2<f32, defaultp> fmat4x2;
    +
    746 
    +
    749  typedef tmat4x3<f32, defaultp> fmat4x3;
    +
    750 
    +
    753  typedef tmat4x4<f32, defaultp> fmat4x4;
    +
    754 
    +
    755 
    +
    758  //typedef detail::tmat1x1<f32, defaultp> f32mat1;
    +
    759 
    +
    762  typedef tmat2x2<f32, defaultp> f32mat2;
    +
    763 
    +
    766  typedef tmat3x3<f32, defaultp> f32mat3;
    +
    767 
    +
    770  typedef tmat4x4<f32, defaultp> f32mat4;
    +
    771 
    +
    772 
    +
    775  //typedef f32 f32mat1x1;
    +
    776 
    +
    779  typedef tmat2x2<f32, defaultp> f32mat2x2;
    +
    780 
    +
    783  typedef tmat2x3<f32, defaultp> f32mat2x3;
    +
    784 
    +
    787  typedef tmat2x4<f32, defaultp> f32mat2x4;
    +
    788 
    +
    791  typedef tmat3x2<f32, defaultp> f32mat3x2;
    +
    792 
    +
    795  typedef tmat3x3<f32, defaultp> f32mat3x3;
    +
    796 
    +
    799  typedef tmat3x4<f32, defaultp> f32mat3x4;
    +
    800 
    +
    803  typedef tmat4x2<f32, defaultp> f32mat4x2;
    +
    804 
    +
    807  typedef tmat4x3<f32, defaultp> f32mat4x3;
    +
    808 
    +
    811  typedef tmat4x4<f32, defaultp> f32mat4x4;
    +
    812 
    +
    813 
    +
    816  //typedef detail::tmat1x1<f64, defaultp> f64mat1;
    +
    817 
    +
    820  typedef tmat2x2<f64, defaultp> f64mat2;
    +
    821 
    +
    824  typedef tmat3x3<f64, defaultp> f64mat3;
    +
    825 
    +
    828  typedef tmat4x4<f64, defaultp> f64mat4;
    +
    829 
    +
    830 
    +
    833  //typedef f64 f64mat1x1;
    +
    834 
    +
    837  typedef tmat2x2<f64, defaultp> f64mat2x2;
    +
    838 
    +
    841  typedef tmat2x3<f64, defaultp> f64mat2x3;
    +
    842 
    +
    845  typedef tmat2x4<f64, defaultp> f64mat2x4;
    +
    846 
    +
    849  typedef tmat3x2<f64, defaultp> f64mat3x2;
    +
    850 
    +
    853  typedef tmat3x3<f64, defaultp> f64mat3x3;
    +
    854 
    +
    857  typedef tmat3x4<f64, defaultp> f64mat3x4;
    +
    858 
    +
    861  typedef tmat4x2<f64, defaultp> f64mat4x2;
    +
    862 
    +
    865  typedef tmat4x3<f64, defaultp> f64mat4x3;
    +
    866 
    +
    869  typedef tmat4x4<f64, defaultp> f64mat4x4;
    +
    870 
    +
    871 
    +
    873  // Quaternion types
    +
    874 
    +
    877  typedef tquat<f32, defaultp> f32quat;
    +
    878 
    +
    881  typedef tquat<f64, defaultp> f64quat;
    +
    882 
    +
    884 }//namespace glm
    +
    885 
    +
    886 #include "type_precision.inl"
    +
    highp_u32vec3 u32vec3
    Default precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1168
    +
    detail::uint64 u64
    64 bit unsigned integer type.
    Definition: fwd.hpp:934
    +
    highp_f32mat3x3 f32mat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2457
    +
    detail::int64 mediump_i64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:220
    +
    detail::uint64 highp_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:877
    +
    detail::int16 int16_t
    16 bit signed integer type.
    Definition: fwd.hpp:300
    +
    detail::int64 int64_t
    64 bit signed integer type.
    Definition: fwd.hpp:308
    +
    detail::int32 i32
    32 bit signed integer type.
    Definition: fwd.hpp:321
    +
    detail::uint32 lowp_uint32_t
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:756
    +
    detail::int16 highp_int16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:228
    +
    detail::int8 lowp_int8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:128
    +
    detail::int16 lowp_int16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:132
    +
    highp_f32quat f32quat
    Default single-precision floating-point quaternion.
    Definition: fwd.hpp:2489
    +
    highp_f64vec2 f64vec2
    Default double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2535
    +
    detail::int16 i16
    16 bit signed integer type.
    Definition: fwd.hpp:317
    +
    highp_f64mat3x2 f64mat3x2
    Default double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2559
    +
    detail::int64 i64
    64 bit signed integer type.
    Definition: fwd.hpp:325
    +
    fmat3x3 fmat3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2411
    +
    highp_f64mat2x4 f64mat2x4
    Default double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2555
    +
    detail::int16 highp_int16_t
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:244
    +
    detail::uint8 highp_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:833
    +
    detail::int8 highp_int8_t
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:240
    +
    f32mat3x3 f32mat3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2481
    +
    detail::uint8 mediump_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:783
    +
    detail::uint8 mediump_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:815
    +
    highp_i16vec1 i16vec1
    Default precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:472
    +
    highp_f32vec1 f32vec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2425
    +
    highp_f32mat2x4 f32mat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2449
    +
    highp_f64vec4 f64vec4
    Default double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2543
    +
    detail::uint32 u32
    32 bit unsigned integer type.
    Definition: fwd.hpp:930
    +
    highp_f64mat4x4 f64mat4x4
    Default double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2579
    +
    detail::int8 mediump_int8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:176
    +
    detail::int8 mediump_i8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:208
    +
    detail::uint64 highp_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:861
    +
    f32mat2x2 f32mat2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2477
    +
    detail::uint32 lowp_uint32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:739
    +
    detail::int16 mediump_int16_t
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:196
    +
    highp_i64vec2 i64vec2
    Default precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:714
    +
    detail::uint16 lowp_uint16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:735
    +
    highp_u8vec3 u8vec3
    Default precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1009
    +
    highp_u16vec4 u16vec4
    Default precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1093
    +
    detail::uint16 u16
    16 bit unsigned integer type.
    Definition: fwd.hpp:926
    +
    highp_float64_t f64
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1537
    +
    highp_f64vec1 f64vec1
    Default double-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2531
    +
    highp_f32vec4 fvec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2367
    +
    highp_u64vec4 u64vec4
    Default precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1331
    +
    highp_u32vec2 u32vec2
    Default precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1164
    +
    detail::int32 mediump_int32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:184
    +
    highp_i16vec4 i16vec4
    Default precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:484
    +
    detail::int32 lowp_i32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:168
    +
    detail::int16 highp_i16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:260
    +
    detail::uint8 uint8_t
    8 bit unsigned integer type.
    Definition: fwd.hpp:905
    +
    detail::int32 lowp_int32_t
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:152
    +
    detail::int32 highp_i32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:264
    +
    highp_f32mat2x3 fmat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2375
    +
    highp_float32_t float32_t
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1525
    +
    highp_f32mat4x2 f32mat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2465
    +
    detail::uint16 highp_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:869
    +
    detail::uint32 highp_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:873
    +
    detail::uint64 lowp_uint64_t
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:760
    +
    highp_i32vec1 i32vec1
    Default precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:551
    +
    detail::uint32 lowp_u32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:773
    +
    detail::int8 highp_int8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:224
    +
    highp_f64mat2x3 f64mat2x3
    Default double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2551
    +
    highp_u16vec3 u16vec3
    Default precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1089
    +
    highp_f32vec2 f32vec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2429
    +
    detail::uint8 lowp_uint8_t
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:748
    +
    highp_i16vec2 i16vec2
    Default precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:476
    +
    highp_i64vec4 i64vec4
    Default precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:722
    +
    highp_f32vec2 fvec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2359
    +
    detail::int8 int8_t
    8 bit signed integer type.
    Definition: fwd.hpp:296
    +
    highp_f32vec4 f32vec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2437
    +
    detail::uint64 lowp_u64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:777
    +
    highp_f32mat2x2 fmat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2371
    +
    highp_i64vec3 i64vec3
    Default precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:718
    +
    detail::uint64 mediump_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:795
    +
    highp_f32mat4x3 fmat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2399
    +
    highp_f32mat2x2 f32mat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2441
    +
    f64mat4x4 f64mat4
    Default double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2591
    +
    highp_f32mat3x2 f32mat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2453
    +
    detail::uint8 u8
    8 bit unsigned integer type.
    Definition: fwd.hpp:922
    +
    detail::uint8 highp_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:849
    +
    highp_f64mat4x2 f64mat4x2
    Default double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2571
    +
    f64mat2x2 f64mat2
    Default double-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2583
    +
    highp_f64mat3x4 f64mat3x4
    Default double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2567
    +
    detail::int64 lowp_int64_t
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:156
    +
    detail::uint16 lowp_u16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:769
    +
    highp_u16vec2 u16vec2
    Default precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1085
    +
    highp_f32mat4x4 fmat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2403
    +
    detail::uint64 highp_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:845
    +
    highp_u64vec1 u64vec1
    Default precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1319
    +
    detail::int64 lowp_i64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:172
    +
    highp_f64vec3 f64vec3
    Default double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2539
    +
    detail::int32 lowp_int32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:136
    +
    detail::uint16 lowp_uint16_t
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:752
    +
    detail::int64 highp_i64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:268
    +
    Definition: _noise.hpp:31
    +
    detail::int32 highp_int32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:232
    +
    highp_u32vec4 u32vec4
    Default precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1172
    +
    highp_u8vec2 u8vec2
    Default precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1005
    +
    highp_i16vec3 i16vec3
    Default precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:480
    +
    detail::int32 mediump_int32_t
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:200
    +
    fmat4x4 fmat4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2415
    +
    detail::uint16 mediump_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:819
    +
    detail::uint16 highp_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:853
    +
    detail::uint32 mediump_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:791
    +
    detail::int8 i8
    8 bit signed integer type.
    Definition: fwd.hpp:313
    +
    highp_f64mat4x3 f64mat4x3
    Default double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2575
    +
    highp_f32mat2x4 fmat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2379
    +
    highp_f32mat3x4 fmat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2391
    +
    detail::int16 lowp_i16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:164
    +
    highp_i32vec2 i32vec2
    Default precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:555
    +
    detail::uint64 lowp_uint64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:743
    +
    detail::int64 highp_int64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:236
    +
    detail::uint32 mediump_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:823
    +
    highp_i8vec3 i8vec3
    Default precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:400
    +
    highp_f64mat2x2 f64mat2x2
    Default double-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2547
    +
    detail::int64 mediump_int64_t
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:204
    +
    detail::uint32 mediump_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:807
    +
    highp_u16vec1 u16vec1
    Default precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1081
    +
    highp_f32vec3 f32vec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2433
    +
    highp_f32vec1 fvec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2355
    +
    highp_u64vec3 u64vec3
    Default precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1327
    +
    highp_f64quat f64quat
    Default double-precision floating-point quaternion.
    Definition: fwd.hpp:2595
    +
    detail::int16 mediump_i16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:212
    +
    highp_u64vec2 u64vec2
    Default precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1323
    +
    highp_f32mat2x3 f32mat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2445
    +
    highp_f32mat4x2 fmat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2395
    +
    detail::uint32 uint32_t
    32 bit unsigned integer type.
    Definition: fwd.hpp:913
    +
    detail::int32 int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:304
    +
    fmat2x2 fmat2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2407
    +
    highp_f32mat3x4 f32mat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2461
    +
    detail::uint16 mediump_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:787
    +
    detail::uint64 uint64_t
    64 bit unsigned integer type.
    Definition: fwd.hpp:917
    +
    highp_i8vec2 i8vec2
    Default precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:396
    +
    highp_f32mat4x3 f32mat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2469
    +
    detail::int64 lowp_int64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:140
    +
    detail::int16 lowp_int16_t
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:148
    +
    detail::uint8 mediump_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:799
    +
    detail::int16 mediump_int16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:180
    +
    highp_float64_t float64_t
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1529
    +
    detail::uint16 uint16_t
    16 bit unsigned integer type.
    Definition: fwd.hpp:909
    +
    f64mat3x3 f64mat3
    Default double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2587
    +
    highp_f32mat4x4 f32mat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2473
    +
    highp_i8vec1 i8vec1
    Default precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:392
    +
    highp_f64mat3x3 f64mat3x3
    Default double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2563
    +
    highp_i32vec4 i32vec4
    Default precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:563
    +
    highp_f32mat3x2 fmat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2383
    +
    highp_u8vec1 u8vec1
    Default precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:1001
    +
    highp_float32_t f32
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1533
    +
    detail::int8 lowp_i8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:160
    +
    detail::int8 lowp_int8_t
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:144
    +
    detail::int32 highp_int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:248
    +
    f32mat4x4 f32mat4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2485
    +
    detail::int64 mediump_int64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:188
    +
    detail::uint64 mediump_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:827
    +
    detail::uint8 lowp_uint8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:731
    +
    highp_f32mat3x3 fmat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2387
    +
    highp_i8vec4 i8vec4
    Default precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:404
    +
    highp_f32vec3 fvec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2363
    +
    highp_u32vec1 u32vec1
    Default precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1160
    +
    detail::uint8 lowp_u8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:765
    +
    detail::uint32 highp_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:841
    +
    detail::uint16 mediump_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:803
    +
    detail::uint64 mediump_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:811
    +
    highp_i32vec3 i32vec3
    Default precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:559
    +
    detail::uint8 highp_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:865
    +
    highp_u8vec4 u8vec4
    Default precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1013
    +
    detail::int64 highp_int64_t
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:252
    +
    detail::int8 mediump_int8_t
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:192
    +
    detail::uint16 highp_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:837
    +
    highp_i64vec1 i64vec1
    Default precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:710
    +
    detail::uint32 highp_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:857
    +
    detail::int32 mediump_i32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:216
    +
    detail::int8 highp_i8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:256
    diff --git a/doc/api/a00131.html b/doc/api/a00131.html new file mode 100644 index 00000000..95372154 --- /dev/null +++ b/doc/api/a00131.html @@ -0,0 +1,147 @@ + + + + + + +0.9.6: type_ptr.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    type_ptr.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    GLM_FUNC_DECL tmat2x2< T,
    +defaultp > 
    make_mat2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat2x2< T,
    +defaultp > 
    make_mat2x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat2x3< T,
    +defaultp > 
    make_mat2x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat2x4< T,
    +defaultp > 
    make_mat2x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x3< T,
    +defaultp > 
    make_mat3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x2< T,
    +defaultp > 
    make_mat3x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x3< T,
    +defaultp > 
    make_mat3x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x4< T,
    +defaultp > 
    make_mat3x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    make_mat4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x2< T,
    +defaultp > 
    make_mat4x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x3< T,
    +defaultp > 
    make_mat4x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    make_mat4x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tquat< T, defaultp > make_quat (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tvec2< T, defaultp > make_vec2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tvec3< T, defaultp > make_vec3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tvec4< T, defaultp > make_vec4 (T const *const ptr)
     
    template<typename genType >
    GLM_FUNC_DECL
    +genType::value_type const * 
    value_ptr (genType const &vec)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTC_type_ptr

    +
    Date
    2009-05-06 / 2011-06-05
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    +
    +gtc_half_float (dependence)
    +
    +GLM_GTC_quaternion (dependence)
    + +

    Definition in file type_ptr.hpp.

    +
    + + + + diff --git a/doc/api/a00131_source.html b/doc/api/a00131_source.html index f999786f..9da017c4 100644 --- a/doc/api/a00131_source.html +++ b/doc/api/a00131_source.html @@ -3,8 +3,8 @@ - -GLM: type_mat4x4.hpp Source File + +0.9.6: type_ptr.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,260 +41,118 @@
    -
    type_mat4x4.hpp
    +
    type_ptr.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_mat4x4
    -
    30 #define glm_core_type_mat4x4
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec4.hpp"
    -
    34 #include "type_mat.hpp"
    -
    35 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    36 # include <initializer_list>
    -
    37 #endif //GLM_HAS_INITIALIZER_LISTS
    -
    38 #include <limits>
    -
    39 #include <cstddef>
    -
    40 
    -
    41 namespace glm{
    -
    42 namespace detail
    -
    43 {
    -
    44  template <typename T, precision P>
    -
    45  struct tmat4x4
    -
    46  {
    -
    47  enum ctor{_null};
    -
    48  typedef T value_type;
    -
    49  typedef std::size_t size_type;
    -
    50  typedef tvec4<T, P> col_type;
    -
    51  typedef tvec4<T, P> row_type;
    -
    52  typedef tmat4x4<T, P> type;
    -
    53  typedef tmat4x4<T, P> transpose_type;
    -
    54 
    -
    55  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    56 
    -
    57  template <typename U, precision Q>
    -
    58  friend tvec4<U, Q> operator/(tmat4x4<U, Q> const & m, tvec4<U, Q> const & v);
    -
    59  template <typename U, precision Q>
    -
    60  friend tvec4<U, Q> operator/(tvec4<U, Q> const & v, tmat4x4<U, Q> const & m);
    -
    61 
    -
    62  private:
    -
    64  col_type value[4];
    -
    65 
    -
    66  public:
    -
    67  // Constructors
    -
    68  GLM_FUNC_DECL tmat4x4();
    -
    69  GLM_FUNC_DECL tmat4x4(tmat4x4<T, P> const & m);
    -
    70  template <precision Q>
    -
    71  GLM_FUNC_DECL tmat4x4(tmat4x4<T, Q> const & m);
    -
    72 
    -
    73  GLM_FUNC_DECL explicit tmat4x4(
    -
    74  ctor Null);
    -
    75  GLM_FUNC_DECL explicit tmat4x4(
    -
    76  T const & x);
    -
    77  GLM_FUNC_DECL explicit tmat4x4(
    -
    78  T const & x0, T const & y0, T const & z0, T const & w0,
    -
    79  T const & x1, T const & y1, T const & z1, T const & w1,
    -
    80  T const & x2, T const & y2, T const & z2, T const & w2,
    -
    81  T const & x3, T const & y3, T const & z3, T const & w3);
    -
    82  GLM_FUNC_DECL explicit tmat4x4(
    -
    83  col_type const & v0,
    -
    84  col_type const & v1,
    -
    85  col_type const & v2,
    -
    86  col_type const & v3);
    -
    87 
    -
    88 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    89  template <typename U>
    -
    90  GLM_FUNC_DECL tmat4x4(std::initializer_list<U> m);
    -
    91 
    -
    92  GLM_FUNC_DECL tmat4x4(std::initializer_list<tvec4<T, P> > m);
    -
    93 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    94 
    -
    96  // Conversions
    -
    97 
    -
    98  template <
    -
    99  typename X1, typename Y1, typename Z1, typename W1,
    -
    100  typename X2, typename Y2, typename Z2, typename W2,
    -
    101  typename X3, typename Y3, typename Z3, typename W3,
    -
    102  typename X4, typename Y4, typename Z4, typename W4>
    -
    103  GLM_FUNC_DECL explicit tmat4x4(
    -
    104  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
    -
    105  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
    -
    106  X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3,
    -
    107  X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4);
    -
    108 
    -
    109  template <typename V1, typename V2, typename V3, typename V4>
    -
    110  GLM_FUNC_DECL explicit tmat4x4(
    -
    111  tvec4<V1, P> const & v1,
    -
    112  tvec4<V2, P> const & v2,
    -
    113  tvec4<V3, P> const & v3,
    -
    114  tvec4<V4, P> const & v4);
    -
    115 
    -
    116  // Matrix conversions
    -
    117  template <typename U, precision Q>
    -
    118  GLM_FUNC_DECL explicit tmat4x4(tmat4x4<U, Q> const & m);
    -
    119 
    -
    120  GLM_FUNC_DECL explicit tmat4x4(tmat2x2<T, P> const & x);
    -
    121  GLM_FUNC_DECL explicit tmat4x4(tmat3x3<T, P> const & x);
    -
    122  GLM_FUNC_DECL explicit tmat4x4(tmat2x3<T, P> const & x);
    -
    123  GLM_FUNC_DECL explicit tmat4x4(tmat3x2<T, P> const & x);
    -
    124  GLM_FUNC_DECL explicit tmat4x4(tmat2x4<T, P> const & x);
    -
    125  GLM_FUNC_DECL explicit tmat4x4(tmat4x2<T, P> const & x);
    -
    126  GLM_FUNC_DECL explicit tmat4x4(tmat3x4<T, P> const & x);
    -
    127  GLM_FUNC_DECL explicit tmat4x4(tmat4x3<T, P> const & x);
    -
    128 
    -
    129  // Accesses
    -
    130  GLM_FUNC_DECL col_type & operator[](length_t i);
    -
    131  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
    -
    132 
    -
    133  // Unary updatable operators
    -
    134  GLM_FUNC_DECL tmat4x4<T, P> & operator= (tmat4x4<T, P> const & m);
    -
    135  template <typename U>
    -
    136  GLM_FUNC_DECL tmat4x4<T, P> & operator= (tmat4x4<U, P> const & m);
    -
    137  template <typename U>
    -
    138  GLM_FUNC_DECL tmat4x4<T, P> & operator+= (U s);
    -
    139  template <typename U>
    -
    140  GLM_FUNC_DECL tmat4x4<T, P> & operator+= (tmat4x4<U, P> const & m);
    -
    141  template <typename U>
    -
    142  GLM_FUNC_DECL tmat4x4<T, P> & operator-= (U s);
    -
    143  template <typename U>
    -
    144  GLM_FUNC_DECL tmat4x4<T, P> & operator-= (tmat4x4<U, P> const & m);
    -
    145  template <typename U>
    -
    146  GLM_FUNC_DECL tmat4x4<T, P> & operator*= (U s);
    -
    147  template <typename U>
    -
    148  GLM_FUNC_DECL tmat4x4<T, P> & operator*= (tmat4x4<U, P> const & m);
    -
    149  template <typename U>
    -
    150  GLM_FUNC_DECL tmat4x4<T, P> & operator/= (U s);
    -
    151  template <typename U>
    -
    152  GLM_FUNC_DECL tmat4x4<T, P> & operator/= (tmat4x4<U, P> const & m);
    -
    153 
    -
    155  // Increment and decrement operators
    -
    156 
    -
    157  GLM_FUNC_DECL tmat4x4<T, P> & operator++ ();
    -
    158  GLM_FUNC_DECL tmat4x4<T, P> & operator-- ();
    -
    159  GLM_FUNC_DECL tmat4x4<T, P> operator++(int);
    -
    160  GLM_FUNC_DECL tmat4x4<T, P> operator--(int);
    -
    161  };
    -
    162 
    -
    163  template <typename T, precision P>
    -
    164  GLM_FUNC_DECL tmat4x4<T, P> compute_inverse_mat4(tmat4x4<T, P> const & m);
    +Go to the documentation of this file.
    1 
    +
    59 #pragma once
    +
    60 
    +
    61 // Dependency:
    +
    62 #include "../gtc/quaternion.hpp"
    +
    63 #include "../vec2.hpp"
    +
    64 #include "../vec3.hpp"
    +
    65 #include "../vec4.hpp"
    +
    66 #include "../mat2x2.hpp"
    +
    67 #include "../mat2x3.hpp"
    +
    68 #include "../mat2x4.hpp"
    +
    69 #include "../mat3x2.hpp"
    +
    70 #include "../mat3x3.hpp"
    +
    71 #include "../mat3x4.hpp"
    +
    72 #include "../mat4x2.hpp"
    +
    73 #include "../mat4x3.hpp"
    +
    74 #include "../mat4x4.hpp"
    +
    75 #include <cstring>
    +
    76 
    +
    77 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    78 # pragma message("GLM: GLM_GTC_type_ptr extension included")
    +
    79 #endif
    +
    80 
    +
    81 namespace glm
    +
    82 {
    +
    85 
    +
    88  template<typename genType>
    +
    89  GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const & vec);
    +
    90 
    +
    93  template<typename T>
    +
    94  GLM_FUNC_DECL tvec2<T, defaultp> make_vec2(T const * const ptr);
    +
    95 
    +
    98  template<typename T>
    +
    99  GLM_FUNC_DECL tvec3<T, defaultp> make_vec3(T const * const ptr);
    +
    100 
    +
    103  template<typename T>
    +
    104  GLM_FUNC_DECL tvec4<T, defaultp> make_vec4(T const * const ptr);
    +
    105 
    +
    108  template<typename T>
    +
    109  GLM_FUNC_DECL tmat2x2<T, defaultp> make_mat2x2(T const * const ptr);
    +
    110 
    +
    113  template<typename T>
    +
    114  GLM_FUNC_DECL tmat2x3<T, defaultp> make_mat2x3(T const * const ptr);
    +
    115 
    +
    118  template<typename T>
    +
    119  GLM_FUNC_DECL tmat2x4<T, defaultp> make_mat2x4(T const * const ptr);
    +
    120 
    +
    123  template<typename T>
    +
    124  GLM_FUNC_DECL tmat3x2<T, defaultp> make_mat3x2(T const * const ptr);
    +
    125 
    +
    128  template<typename T>
    +
    129  GLM_FUNC_DECL tmat3x3<T, defaultp> make_mat3x3(T const * const ptr);
    +
    130 
    +
    133  template<typename T>
    +
    134  GLM_FUNC_DECL tmat3x4<T, defaultp> make_mat3x4(T const * const ptr);
    +
    135 
    +
    138  template<typename T>
    +
    139  GLM_FUNC_DECL tmat4x2<T, defaultp> make_mat4x2(T const * const ptr);
    +
    140 
    +
    143  template<typename T>
    +
    144  GLM_FUNC_DECL tmat4x3<T, defaultp> make_mat4x3(T const * const ptr);
    +
    145 
    +
    148  template<typename T>
    +
    149  GLM_FUNC_DECL tmat4x4<T, defaultp> make_mat4x4(T const * const ptr);
    +
    150 
    +
    153  template<typename T>
    +
    154  GLM_FUNC_DECL tmat2x2<T, defaultp> make_mat2(T const * const ptr);
    +
    155 
    +
    158  template<typename T>
    +
    159  GLM_FUNC_DECL tmat3x3<T, defaultp> make_mat3(T const * const ptr);
    +
    160 
    +
    163  template<typename T>
    +
    164  GLM_FUNC_DECL tmat4x4<T, defaultp> make_mat4(T const * const ptr);
    165 
    -
    166  // Binary operators
    -
    167  template <typename T, precision P>
    -
    168  GLM_FUNC_DECL tmat4x4<T, P> operator+ (
    -
    169  tmat4x4<T, P> const & m,
    -
    170  T const & s);
    -
    171 
    -
    172  template <typename T, precision P>
    -
    173  GLM_FUNC_DECL tmat4x4<T, P> operator+ (
    -
    174  T const & s,
    -
    175  tmat4x4<T, P> const & m);
    -
    176 
    -
    177  template <typename T, precision P>
    -
    178  GLM_FUNC_DECL tmat4x4<T, P> operator+ (
    -
    179  tmat4x4<T, P> const & m1,
    -
    180  tmat4x4<T, P> const & m2);
    -
    181 
    -
    182  template <typename T, precision P>
    -
    183  GLM_FUNC_DECL tmat4x4<T, P> operator- (
    -
    184  tmat4x4<T, P> const & m,
    -
    185  T const & s);
    -
    186 
    -
    187  template <typename T, precision P>
    -
    188  GLM_FUNC_DECL tmat4x4<T, P> operator- (
    -
    189  T const & s,
    -
    190  tmat4x4<T, P> const & m);
    -
    191 
    -
    192  template <typename T, precision P>
    -
    193  GLM_FUNC_DECL tmat4x4<T, P> operator- (
    -
    194  tmat4x4<T, P> const & m1,
    -
    195  tmat4x4<T, P> const & m2);
    -
    196 
    -
    197  template <typename T, precision P>
    -
    198  GLM_FUNC_DECL tmat4x4<T, P> operator* (
    -
    199  tmat4x4<T, P> const & m,
    -
    200  T const & s);
    -
    201 
    -
    202  template <typename T, precision P>
    -
    203  GLM_FUNC_DECL tmat4x4<T, P> operator* (
    -
    204  T const & s,
    -
    205  tmat4x4<T, P> const & m);
    -
    206 
    -
    207  template <typename T, precision P>
    -
    208  GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator* (
    -
    209  tmat4x4<T, P> const & m,
    -
    210  typename tmat4x4<T, P>::row_type const & v);
    -
    211 
    -
    212  template <typename T, precision P>
    -
    213  GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator* (
    -
    214  typename tmat4x4<T, P>::col_type const & v,
    -
    215  tmat4x4<T, P> const & m);
    -
    216 
    -
    217  template <typename T, precision P>
    -
    218  GLM_FUNC_DECL tmat2x4<T, P> operator* (
    -
    219  tmat4x4<T, P> const & m1,
    -
    220  tmat2x4<T, P> const & m2);
    -
    221 
    -
    222  template <typename T, precision P>
    -
    223  GLM_FUNC_DECL tmat3x4<T, P> operator* (
    -
    224  tmat4x4<T, P> const & m1,
    -
    225  tmat3x4<T, P> const & m2);
    -
    226 
    -
    227  template <typename T, precision P>
    -
    228  GLM_FUNC_DECL tmat4x4<T, P> operator* (
    -
    229  tmat4x4<T, P> const & m1,
    -
    230  tmat4x4<T, P> const & m2);
    -
    231 
    -
    232  template <typename T, precision P>
    -
    233  GLM_FUNC_DECL tmat4x4<T, P> operator/ (
    -
    234  tmat4x4<T, P> const & m,
    -
    235  T const & s);
    -
    236 
    -
    237  template <typename T, precision P>
    -
    238  GLM_FUNC_DECL tmat4x4<T, P> operator/ (
    -
    239  T const & s,
    -
    240  tmat4x4<T, P> const & m);
    -
    241 
    -
    242  template <typename T, precision P>
    -
    243  GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator/ (
    -
    244  tmat4x4<T, P> const & m,
    -
    245  typename tmat4x4<T, P>::row_type const & v);
    -
    246 
    -
    247  template <typename T, precision P>
    -
    248  GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator/ (
    -
    249  typename tmat4x4<T, P>::col_type & v,
    -
    250  tmat4x4<T, P> const & m);
    -
    251 
    -
    252  template <typename T, precision P>
    -
    253  GLM_FUNC_DECL tmat4x4<T, P> operator/ (
    -
    254  tmat4x4<T, P> const & m1,
    -
    255  tmat4x4<T, P> const & m2);
    -
    256 
    -
    257  // Unary constant operators
    -
    258  template <typename T, precision P>
    -
    259  GLM_FUNC_DECL tmat4x4<T, P> const operator- (
    -
    260  tmat4x4<T, P> const & m);
    -
    261 
    -
    262 }//namespace detail
    -
    263 }//namespace glm
    -
    264 
    -
    265 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    266 #include "type_mat4x4.inl"
    -
    267 #endif//GLM_EXTERNAL_TEMPLATE
    -
    268 
    -
    269 #endif//glm_core_type_mat4x4
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    168  template<typename T>
    +
    169  GLM_FUNC_DECL tquat<T, defaultp> make_quat(T const * const ptr);
    +
    170 
    +
    172 }//namespace glm
    +
    173 
    +
    174 #include "type_ptr.inl"
    +
    GLM_FUNC_DECL tmat4x3< T, defaultp > make_mat4x3(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tmat3x3< T, defaultp > make_mat3x3(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tmat2x4< T, defaultp > make_mat2x4(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tquat< T, defaultp > make_quat(T const *const ptr)
    Build a quaternion from a pointer.
    +
    GLM_FUNC_DECL tmat2x3< T, defaultp > make_mat2x3(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tmat4x2< T, defaultp > make_mat4x2(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tmat3x4< T, defaultp > make_mat3x4(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tmat3x2< T, defaultp > make_mat3x2(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tmat3x3< T, defaultp > make_mat3(T const *const ptr)
    Build a matrix from a pointer.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL tvec3< T, defaultp > make_vec3(T const *const ptr)
    Build a vector from a pointer.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > make_mat4(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tvec2< T, defaultp > make_vec2(T const *const ptr)
    Build a vector from a pointer.
    +
    GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &vec)
    Return the constant address to the data of the input parameter.
    +
    GLM_FUNC_DECL tmat4x4< T, defaultp > make_mat4x4(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tmat2x2< T, defaultp > make_mat2x2(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tmat2x2< T, defaultp > make_mat2(T const *const ptr)
    Build a matrix from a pointer.
    +
    GLM_FUNC_DECL tvec4< T, defaultp > make_vec4(T const *const ptr)
    Build a vector from a pointer.
    diff --git a/doc/api/a00132.html b/doc/api/a00132.html index ec3466a3..d0377e04 100644 --- a/doc/api/a00132.html +++ b/doc/api/a00132.html @@ -3,8 +3,8 @@ - -GLM: type_precision.hpp File Reference + +0.9.6: type_vec.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,45 +41,158 @@
    -
    type_precision.hpp File Reference
    +
    type_vec.hpp File Reference

    Go to the source code of this file.

    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Namespaces

     glm
     

    +Typedefs

    typedef highp_bvec2 bvec2
     
    typedef highp_bvec3 bvec3
     
    typedef highp_bvec4 bvec4
     
    typedef highp_dvec2 dvec2
     
    typedef highp_dvec3 dvec3
     
    typedef highp_dvec4 dvec4
     
    typedef tvec2< bool, highp > highp_bvec2
     
    typedef tvec3< bool, highp > highp_bvec3
     
    typedef tvec4< bool, highp > highp_bvec4
     
    typedef tvec2< double, highp > highp_dvec2
     
    typedef tvec3< double, highp > highp_dvec3
     
    typedef tvec4< double, highp > highp_dvec4
     
    typedef tvec2< int, highp > highp_ivec2
     
    typedef tvec3< int, highp > highp_ivec3
     
    typedef tvec4< int, highp > highp_ivec4
     
    typedef tvec2< uint, highp > highp_uvec2
     
    typedef tvec3< uint, highp > highp_uvec3
     
    typedef tvec4< uint, highp > highp_uvec4
     
    typedef tvec2< float, highp > highp_vec2
     
    typedef tvec3< float, highp > highp_vec3
     
    typedef tvec4< float, highp > highp_vec4
     
    typedef highp_ivec2 ivec2
     
    typedef highp_ivec3 ivec3
     
    typedef highp_ivec4 ivec4
     
    typedef tvec2< bool, lowp > lowp_bvec2
     
    typedef tvec3< bool, lowp > lowp_bvec3
     
    typedef tvec4< bool, lowp > lowp_bvec4
     
    typedef tvec2< double, lowp > lowp_dvec2
     
    typedef tvec3< double, lowp > lowp_dvec3
     
    typedef tvec4< double, lowp > lowp_dvec4
     
    typedef tvec2< int, lowp > lowp_ivec2
     
    typedef tvec3< int, lowp > lowp_ivec3
     
    typedef tvec4< int, lowp > lowp_ivec4
     
    typedef tvec2< uint, lowp > lowp_uvec2
     
    typedef tvec3< uint, lowp > lowp_uvec3
     
    typedef tvec4< uint, lowp > lowp_uvec4
     
    typedef tvec2< float, lowp > lowp_vec2
     
    typedef tvec3< float, lowp > lowp_vec3
     
    typedef tvec4< float, lowp > lowp_vec4
     
    typedef tvec2< bool, mediump > mediump_bvec2
     
    typedef tvec3< bool, mediump > mediump_bvec3
     
    typedef tvec4< bool, mediump > mediump_bvec4
     
    typedef tvec2< double, mediump > mediump_dvec2
     
    typedef tvec3< double, mediump > mediump_dvec3
     
    typedef tvec4< double, mediump > mediump_dvec4
     
    typedef tvec2< int, mediump > mediump_ivec2
     
    typedef tvec3< int, mediump > mediump_ivec3
     
    typedef tvec4< int, mediump > mediump_ivec4
     
    typedef tvec2< uint, mediump > mediump_uvec2
     
    typedef tvec3< uint, mediump > mediump_uvec3
     
    typedef tvec4< uint, mediump > mediump_uvec4
     
    typedef tvec2< float, mediump > mediump_vec2
     
    typedef tvec3< float, mediump > mediump_vec3
     
    typedef tvec4< float, mediump > mediump_vec4
     
    typedef highp_uvec2 uvec2
     
    typedef highp_uvec3 uvec3
     
    typedef highp_uvec4 uvec4
     
    typedef highp_vec2 vec2
     
    typedef highp_vec3 vec3
     
    typedef highp_vec4 vec4
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_type_precision

    -
    Date
    2009-06-04 / 2011-12-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -gtc_half_float (dependence)
    -
    -GLM_GTC_quaternion (dependence)
    +

    GLM Core

    +
    Date
    2010-01-26 / 2014-10-05
    +
    Author
    Christophe Riccio
    -

    Definition in file type_precision.hpp.

    +

    Definition in file type_vec.hpp.

    diff --git a/doc/api/a00132_source.html b/doc/api/a00132_source.html index 5010e893..2911d782 100644 --- a/doc/api/a00132_source.html +++ b/doc/api/a00132_source.html @@ -3,8 +3,8 @@ - -GLM: type_precision.hpp Source File + +0.9.6: type_vec.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,649 +41,301 @@
    -
    type_precision.hpp
    +
    type_vec.hpp
    Go to the documentation of this file.
    1 
    -
    43 #ifndef GLM_GTC_type_precision
    -
    44 #define GLM_GTC_type_precision
    -
    45 
    -
    46 // Dependency:
    -
    47 #include "../gtc/quaternion.hpp"
    -
    48 #include "../vec2.hpp"
    -
    49 #include "../vec3.hpp"
    -
    50 #include "../vec4.hpp"
    -
    51 #include "../mat2x2.hpp"
    -
    52 #include "../mat2x3.hpp"
    -
    53 #include "../mat2x4.hpp"
    -
    54 #include "../mat3x2.hpp"
    -
    55 #include "../mat3x3.hpp"
    -
    56 #include "../mat3x4.hpp"
    -
    57 #include "../mat4x2.hpp"
    -
    58 #include "../mat4x3.hpp"
    -
    59 #include "../mat4x4.hpp"
    -
    60 
    -
    61 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    62 # pragma message("GLM: GLM_GTC_type_precision extension included")
    -
    63 #endif
    -
    64 
    -
    65 namespace glm
    -
    66 {
    -
    68  // Signed int vector types
    -
    69 
    -
    72 
    -
    75  typedef detail::int8 lowp_int8;
    -
    76 
    -
    79  typedef detail::int16 lowp_int16;
    +
    29 #pragma once
    +
    30 
    +
    31 #include "precision.hpp"
    +
    32 #include "type_int.hpp"
    +
    33 
    +
    34 namespace glm
    +
    35 {
    +
    36  template <typename T, precision P> struct tvec1;
    +
    37  template <typename T, precision P> struct tvec2;
    +
    38  template <typename T, precision P> struct tvec3;
    +
    39  template <typename T, precision P> struct tvec4;
    +
    40 
    +
    41  typedef tvec1<float, highp> highp_vec1_t;
    +
    42  typedef tvec1<float, mediump> mediump_vec1_t;
    +
    43  typedef tvec1<float, lowp> lowp_vec1_t;
    +
    44  typedef tvec1<double, highp> highp_dvec1_t;
    +
    45  typedef tvec1<double, mediump> mediump_dvec1_t;
    +
    46  typedef tvec1<double, lowp> lowp_dvec1_t;
    +
    47  typedef tvec1<int, highp> highp_ivec1_t;
    +
    48  typedef tvec1<int, mediump> mediump_ivec1_t;
    +
    49  typedef tvec1<int, lowp> lowp_ivec1_t;
    +
    50  typedef tvec1<uint, highp> highp_uvec1_t;
    +
    51  typedef tvec1<uint, mediump> mediump_uvec1_t;
    +
    52  typedef tvec1<uint, lowp> lowp_uvec1_t;
    +
    53  typedef tvec1<bool, highp> highp_bvec1_t;
    +
    54  typedef tvec1<bool, mediump> mediump_bvec1_t;
    +
    55  typedef tvec1<bool, lowp> lowp_bvec1_t;
    +
    56 
    +
    59 
    +
    65  typedef tvec2<float, highp> highp_vec2;
    +
    66 
    +
    72  typedef tvec2<float, mediump> mediump_vec2;
    +
    73 
    +
    79  typedef tvec2<float, lowp> lowp_vec2;
    80 
    -
    83  typedef detail::int32 lowp_int32;
    -
    84 
    -
    87  typedef detail::int64 lowp_int64;
    -
    88 
    -
    91  typedef detail::int8 lowp_int8_t;
    -
    92 
    - -
    96 
    - -
    100 
    -
    103  typedef detail::int64 lowp_int64_t;
    -
    104 
    -
    107  typedef detail::int8 lowp_i8;
    -
    108 
    -
    111  typedef detail::int16 lowp_i16;
    -
    112 
    -
    115  typedef detail::int32 lowp_i32;
    -
    116 
    -
    119  typedef detail::int64 lowp_i64;
    -
    120 
    -
    123  typedef detail::int8 mediump_int8;
    -
    124 
    - -
    128 
    - -
    132 
    - +
    86  typedef tvec2<double, highp> highp_dvec2;
    +
    87 
    +
    93  typedef tvec2<double, mediump> mediump_dvec2;
    +
    94 
    +
    100  typedef tvec2<double, lowp> lowp_dvec2;
    +
    101 
    +
    107  typedef tvec2<int, highp> highp_ivec2;
    +
    108 
    +
    114  typedef tvec2<int, mediump> mediump_ivec2;
    +
    115 
    +
    121  typedef tvec2<int, lowp> lowp_ivec2;
    +
    122 
    +
    128  typedef tvec2<uint, highp> highp_uvec2;
    +
    129 
    +
    135  typedef tvec2<uint, mediump> mediump_uvec2;
    136 
    - -
    140 
    - -
    144 
    - -
    148 
    - -
    152 
    -
    155  typedef detail::int8 mediump_i8;
    -
    156 
    -
    159  typedef detail::int16 mediump_i16;
    -
    160 
    -
    163  typedef detail::int32 mediump_i32;
    +
    142  typedef tvec2<uint, lowp> lowp_uvec2;
    +
    143 
    +
    149  typedef tvec2<bool, highp> highp_bvec2;
    +
    150 
    +
    156  typedef tvec2<bool, mediump> mediump_bvec2;
    +
    157 
    +
    163  typedef tvec2<bool, lowp> lowp_bvec2;
    164 
    -
    167  typedef detail::int64 mediump_i64;
    -
    168 
    -
    171  typedef detail::int8 highp_int8;
    -
    172 
    -
    175  typedef detail::int16 highp_int16;
    -
    176 
    -
    179  typedef detail::int32 highp_int32;
    -
    180 
    -
    183  typedef detail::int64 highp_int64;
    +
    166 
    +
    167 
    +
    170 
    +
    176  typedef tvec3<float, highp> highp_vec3;
    +
    177 
    +
    183  typedef tvec3<float, mediump> mediump_vec3;
    184 
    -
    187  typedef detail::int8 highp_int8_t;
    -
    188 
    - -
    192 
    - -
    196 
    - -
    200 
    -
    203  typedef detail::int8 highp_i8;
    -
    204 
    -
    207  typedef detail::int16 highp_i16;
    -
    208 
    -
    211  typedef detail::int32 highp_i32;
    +
    190  typedef tvec3<float, lowp> lowp_vec3;
    +
    191 
    +
    197  typedef tvec3<double, highp> highp_dvec3;
    +
    198 
    +
    204  typedef tvec3<double, mediump> mediump_dvec3;
    +
    205 
    +
    211  typedef tvec3<double, lowp> lowp_dvec3;
    212 
    -
    215  typedef detail::int64 highp_i64;
    -
    216 
    -
    217 
    -
    220  typedef detail::int8 int8;
    -
    221 
    -
    224  typedef detail::int16 int16;
    -
    225 
    -
    228  typedef detail::int32 int32;
    -
    229 
    -
    232  typedef detail::int64 int64;
    +
    218  typedef tvec3<int, highp> highp_ivec3;
    +
    219 
    +
    225  typedef tvec3<int, mediump> mediump_ivec3;
    +
    226 
    +
    232  typedef tvec3<int, lowp> lowp_ivec3;
    233 
    -
    236  typedef detail::int8 int8_t;
    -
    237 
    -
    240  typedef detail::int16 int16_t;
    -
    241 
    -
    244  typedef detail::int32 int32_t;
    -
    245 
    -
    248  typedef detail::int64 int64_t;
    -
    249 
    -
    252  typedef detail::int8 i8;
    -
    253 
    -
    256  typedef detail::int16 i16;
    -
    257 
    -
    260  typedef detail::int32 i32;
    -
    261 
    -
    264  typedef detail::int64 i64;
    -
    265 
    +
    239  typedef tvec3<uint, highp> highp_uvec3;
    +
    240 
    +
    246  typedef tvec3<uint, mediump> mediump_uvec3;
    +
    247 
    +
    253  typedef tvec3<uint, lowp> lowp_uvec3;
    +
    254 
    +
    259  typedef tvec3<bool, highp> highp_bvec3;
    +
    260 
    +
    265  typedef tvec3<bool, mediump> mediump_bvec3;
    266 
    -
    269  typedef detail::tvec1<i8, defaultp> i8vec1;
    -
    270 
    -
    273  typedef detail::tvec2<i8, defaultp> i8vec2;
    +
    271  typedef tvec3<bool, lowp> lowp_bvec3;
    +
    272 
    274 
    -
    277  typedef detail::tvec3<i8, defaultp> i8vec3;
    -
    278 
    -
    281  typedef detail::tvec4<i8, defaultp> i8vec4;
    -
    282 
    +
    277 
    +
    282  typedef tvec4<float, highp> highp_vec4;
    283 
    -
    286  typedef detail::tvec1<i16, defaultp> i16vec1;
    -
    287 
    -
    290  typedef detail::tvec2<i16, defaultp> i16vec2;
    -
    291 
    -
    294  typedef detail::tvec3<i16, defaultp> i16vec3;
    +
    288  typedef tvec4<float, mediump> mediump_vec4;
    +
    289 
    +
    294  typedef tvec4<float, lowp> lowp_vec4;
    295 
    -
    298  typedef detail::tvec4<i16, defaultp> i16vec4;
    -
    299 
    -
    300 
    -
    303  typedef detail::tvec1<i32, defaultp> i32vec1;
    -
    304 
    -
    307  typedef detail::tvec2<i32, defaultp> i32vec2;
    -
    308 
    -
    311  typedef detail::tvec3<i32, defaultp> i32vec3;
    -
    312 
    -
    315  typedef detail::tvec4<i32, defaultp> i32vec4;
    -
    316 
    -
    317 
    -
    320  typedef detail::tvec1<i64, defaultp> i64vec1;
    -
    321 
    -
    324  typedef detail::tvec2<i64, defaultp> i64vec2;
    +
    300  typedef tvec4<double, highp> highp_dvec4;
    +
    301 
    +
    306  typedef tvec4<double, mediump> mediump_dvec4;
    +
    307 
    +
    312  typedef tvec4<double, lowp> lowp_dvec4;
    +
    313 
    +
    318  typedef tvec4<int, highp> highp_ivec4;
    +
    319 
    +
    324  typedef tvec4<int, mediump> mediump_ivec4;
    325 
    -
    328  typedef detail::tvec3<i64, defaultp> i64vec3;
    -
    329 
    -
    332  typedef detail::tvec4<i64, defaultp> i64vec4;
    -
    333 
    -
    334 
    -
    336  // Unsigned int vector types
    +
    330  typedef tvec4<int, lowp> lowp_ivec4;
    +
    331 
    +
    336  typedef tvec4<uint, highp> highp_uvec4;
    337 
    -
    340  typedef detail::uint8 lowp_uint8;
    -
    341 
    -
    344  typedef detail::uint16 lowp_uint16;
    -
    345 
    -
    348  typedef detail::uint32 lowp_uint32;
    +
    342  typedef tvec4<uint, mediump> mediump_uvec4;
    +
    343 
    +
    348  typedef tvec4<uint, lowp> lowp_uvec4;
    349 
    -
    352  typedef detail::uint64 lowp_uint64;
    -
    353 
    -
    356  typedef detail::uint8 lowp_uint8_t;
    -
    357 
    - +
    354  typedef tvec4<bool, highp> highp_bvec4;
    +
    355 
    +
    360  typedef tvec4<bool, mediump> mediump_bvec4;
    361 
    - -
    365 
    - +
    366  typedef tvec4<bool, lowp> lowp_bvec4;
    +
    367 
    369 
    -
    372  typedef detail::uint8 lowp_u8;
    -
    373 
    -
    376  typedef detail::uint16 lowp_u16;
    -
    377 
    -
    380  typedef detail::uint32 lowp_u32;
    -
    381 
    -
    384  typedef detail::uint64 lowp_u64;
    -
    385 
    - -
    389 
    - -
    393 
    - -
    397 
    - -
    401 
    - -
    405 
    - -
    409 
    - -
    413 
    - -
    417 
    -
    420  typedef detail::uint8 mediump_u8;
    -
    421 
    -
    424  typedef detail::uint16 mediump_u16;
    -
    425 
    -
    428  typedef detail::uint32 mediump_u32;
    -
    429 
    -
    432  typedef detail::uint64 mediump_u64;
    -
    433 
    -
    436  typedef detail::uint8 highp_uint8;
    -
    437 
    - -
    441 
    - -
    445 
    - -
    449 
    - -
    453 
    - -
    457 
    - -
    461 
    - -
    465 
    -
    468  typedef detail::uint8 highp_u8;
    -
    469 
    -
    472  typedef detail::uint16 highp_u16;
    -
    473 
    -
    476  typedef detail::uint32 highp_u32;
    -
    477 
    -
    480  typedef detail::uint64 highp_u64;
    -
    481 
    -
    484  typedef detail::uint8 uint8;
    -
    485 
    -
    488  typedef detail::uint16 uint16;
    -
    489 
    -
    492  typedef detail::uint32 uint32;
    -
    493 
    -
    496  typedef detail::uint64 uint64;
    -
    497 
    -
    500  typedef detail::uint8 uint8_t;
    +
    372 
    +
    374  // Default float definition
    +
    375 
    +
    376 #if(defined(GLM_PRECISION_LOWP_FLOAT))
    +
    377  typedef lowp_vec2 vec2;
    +
    378  typedef lowp_vec3 vec3;
    +
    379  typedef lowp_vec4 vec4;
    +
    380 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    +
    381  typedef mediump_vec2 vec2;
    +
    382  typedef mediump_vec3 vec3;
    +
    383  typedef mediump_vec4 vec4;
    +
    384 #else //defined(GLM_PRECISION_HIGHP_FLOAT)
    +
    385  typedef highp_vec2 vec2;
    +
    389 
    +
    393  typedef highp_vec3 vec3;
    +
    394 
    +
    398  typedef highp_vec4 vec4;
    +
    399 #endif//GLM_PRECISION
    +
    400 
    +
    402  // Default double definition
    +
    403 
    +
    404 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    405  typedef lowp_dvec2 dvec2;
    +
    406  typedef lowp_dvec3 dvec3;
    +
    407  typedef lowp_dvec4 dvec4;
    +
    408 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
    +
    409  typedef mediump_dvec2 dvec2;
    +
    410  typedef mediump_dvec3 dvec3;
    +
    411  typedef mediump_dvec4 dvec4;
    +
    412 #else //defined(GLM_PRECISION_HIGHP_DOUBLE)
    +
    413  typedef highp_dvec2 dvec2;
    +
    417 
    +
    421  typedef highp_dvec3 dvec3;
    +
    422 
    +
    426  typedef highp_dvec4 dvec4;
    +
    427 #endif//GLM_PRECISION
    +
    428 
    +
    430  // Signed integer definition
    +
    431 
    +
    432 #if(defined(GLM_PRECISION_LOWP_INT))
    +
    433  typedef lowp_ivec2 ivec2;
    +
    434  typedef lowp_ivec3 ivec3;
    +
    435  typedef lowp_ivec4 ivec4;
    +
    436 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    437  typedef mediump_ivec2 ivec2;
    +
    438  typedef mediump_ivec3 ivec3;
    +
    439  typedef mediump_ivec4 ivec4;
    +
    440 #else //defined(GLM_PRECISION_HIGHP_INT)
    +
    441  typedef highp_ivec2 ivec2;
    +
    445 
    +
    449  typedef highp_ivec3 ivec3;
    +
    450 
    +
    454  typedef highp_ivec4 ivec4;
    +
    455 #endif//GLM_PRECISION
    +
    456 
    +
    458  // Unsigned integer definition
    +
    459 
    +
    460 #if(defined(GLM_PRECISION_LOWP_UINT))
    +
    461  typedef lowp_uvec2 uvec2;
    +
    462  typedef lowp_uvec3 uvec3;
    +
    463  typedef lowp_uvec4 uvec4;
    +
    464 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    +
    465  typedef mediump_uvec2 uvec2;
    +
    466  typedef mediump_uvec3 uvec3;
    +
    467  typedef mediump_uvec4 uvec4;
    +
    468 #else //defined(GLM_PRECISION_HIGHP_UINT)
    +
    469  typedef highp_uvec2 uvec2;
    +
    473 
    +
    477  typedef highp_uvec3 uvec3;
    +
    478 
    +
    482  typedef highp_uvec4 uvec4;
    +
    483 #endif//GLM_PRECISION
    +
    484 
    +
    486  // Boolean definition
    +
    487 
    +
    488 #if(defined(GLM_PRECISION_LOWP_BOOL))
    +
    489  typedef lowp_bvec2 bvec2;
    +
    490  typedef lowp_bvec3 bvec3;
    +
    491  typedef lowp_bvec4 bvec4;
    +
    492 #elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
    +
    493  typedef mediump_bvec2 bvec2;
    +
    494  typedef mediump_bvec3 bvec3;
    +
    495  typedef mediump_bvec4 bvec4;
    +
    496 #else //defined(GLM_PRECISION_HIGHP_BOOL)
    +
    497  typedef highp_bvec2 bvec2;
    501 
    -
    504  typedef detail::uint16 uint16_t;
    -
    505 
    -
    508  typedef detail::uint32 uint32_t;
    -
    509 
    -
    512  typedef detail::uint64 uint64_t;
    -
    513 
    -
    516  typedef detail::uint8 u8;
    -
    517 
    -
    520  typedef detail::uint16 u16;
    -
    521 
    -
    524  typedef detail::uint32 u32;
    -
    525 
    -
    528  typedef detail::uint64 u64;
    -
    529 
    -
    530 
    -
    531 
    -
    534  typedef detail::tvec1<u8, defaultp> u8vec1;
    -
    535 
    -
    538  typedef detail::tvec2<u8, defaultp> u8vec2;
    -
    539 
    -
    542  typedef detail::tvec3<u8, defaultp> u8vec3;
    -
    543 
    -
    546  typedef detail::tvec4<u8, defaultp> u8vec4;
    -
    547 
    -
    548 
    -
    551  typedef detail::tvec1<u16, defaultp> u16vec1;
    -
    552 
    -
    555  typedef detail::tvec2<u16, defaultp> u16vec2;
    -
    556 
    -
    559  typedef detail::tvec3<u16, defaultp> u16vec3;
    -
    560 
    -
    563  typedef detail::tvec4<u16, defaultp> u16vec4;
    -
    564 
    -
    565 
    -
    568  typedef detail::tvec1<u32, defaultp> u32vec1;
    -
    569 
    -
    572  typedef detail::tvec2<u32, defaultp> u32vec2;
    -
    573 
    -
    576  typedef detail::tvec3<u32, defaultp> u32vec3;
    -
    577 
    -
    580  typedef detail::tvec4<u32, defaultp> u32vec4;
    -
    581 
    -
    582 
    -
    585  typedef detail::tvec1<u64, defaultp> u64vec1;
    -
    586 
    -
    589  typedef detail::tvec2<u64, defaultp> u64vec2;
    -
    590 
    -
    593  typedef detail::tvec3<u64, defaultp> u64vec3;
    -
    594 
    -
    597  typedef detail::tvec4<u64, defaultp> u64vec4;
    -
    598 
    -
    599 
    -
    601  // Float vector types
    -
    602 
    -
    605  typedef detail::float32 float32;
    -
    606 
    -
    609  typedef detail::float64 float64;
    -
    610 
    -
    611 
    -
    614  typedef detail::float32 float32_t;
    -
    615 
    -
    618  typedef detail::float64 float64_t;
    -
    619 
    -
    620 
    -
    623  typedef float32 f32;
    -
    624 
    -
    627  typedef float64 f64;
    -
    628 
    -
    629 
    -
    632  typedef detail::tvec1<float, defaultp> fvec1;
    -
    633 
    -
    636  typedef detail::tvec2<float, defaultp> fvec2;
    -
    637 
    -
    640  typedef detail::tvec3<float, defaultp> fvec3;
    -
    641 
    -
    644  typedef detail::tvec4<float, defaultp> fvec4;
    -
    645 
    -
    646 
    -
    649  typedef detail::tvec1<f32, defaultp> f32vec1;
    -
    650 
    -
    653  typedef detail::tvec2<f32, defaultp> f32vec2;
    -
    654 
    -
    657  typedef detail::tvec3<f32, defaultp> f32vec3;
    -
    658 
    -
    661  typedef detail::tvec4<f32, defaultp> f32vec4;
    -
    662 
    -
    663 
    -
    666  typedef detail::tvec1<f64, defaultp> f64vec1;
    -
    667 
    -
    670  typedef detail::tvec2<f64, defaultp> f64vec2;
    -
    671 
    -
    674  typedef detail::tvec3<f64, defaultp> f64vec3;
    -
    675 
    -
    678  typedef detail::tvec4<f64, defaultp> f64vec4;
    -
    679 
    -
    680 
    -
    682  // Float matrix types
    -
    683 
    -
    686  //typedef detail::tmat1x1<f32> fmat1;
    -
    687 
    -
    690  typedef detail::tmat2x2<f32, defaultp> fmat2;
    -
    691 
    -
    694  typedef detail::tmat3x3<f32, defaultp> fmat3;
    -
    695 
    -
    698  typedef detail::tmat4x4<f32, defaultp> fmat4;
    -
    699 
    -
    700 
    -
    703  //typedef f32 fmat1x1;
    -
    704 
    -
    707  typedef detail::tmat2x2<f32, defaultp> fmat2x2;
    -
    708 
    -
    711  typedef detail::tmat2x3<f32, defaultp> fmat2x3;
    -
    712 
    -
    715  typedef detail::tmat2x4<f32, defaultp> fmat2x4;
    -
    716 
    -
    719  typedef detail::tmat3x2<f32, defaultp> fmat3x2;
    -
    720 
    -
    723  typedef detail::tmat3x3<f32, defaultp> fmat3x3;
    -
    724 
    -
    727  typedef detail::tmat3x4<f32, defaultp> fmat3x4;
    -
    728 
    -
    731  typedef detail::tmat4x2<f32, defaultp> fmat4x2;
    -
    732 
    -
    735  typedef detail::tmat4x3<f32, defaultp> fmat4x3;
    -
    736 
    -
    739  typedef detail::tmat4x4<f32, defaultp> fmat4x4;
    -
    740 
    -
    741 
    -
    744  //typedef detail::tmat1x1<f32, defaultp> f32mat1;
    -
    745 
    -
    748  typedef detail::tmat2x2<f32, defaultp> f32mat2;
    -
    749 
    -
    752  typedef detail::tmat3x3<f32, defaultp> f32mat3;
    -
    753 
    -
    756  typedef detail::tmat4x4<f32, defaultp> f32mat4;
    -
    757 
    -
    758 
    -
    761  //typedef f32 f32mat1x1;
    -
    762 
    -
    765  typedef detail::tmat2x2<f32, defaultp> f32mat2x2;
    -
    766 
    -
    769  typedef detail::tmat2x3<f32, defaultp> f32mat2x3;
    -
    770 
    -
    773  typedef detail::tmat2x4<f32, defaultp> f32mat2x4;
    -
    774 
    -
    777  typedef detail::tmat3x2<f32, defaultp> f32mat3x2;
    -
    778 
    -
    781  typedef detail::tmat3x3<f32, defaultp> f32mat3x3;
    -
    782 
    -
    785  typedef detail::tmat3x4<f32, defaultp> f32mat3x4;
    -
    786 
    -
    789  typedef detail::tmat4x2<f32, defaultp> f32mat4x2;
    -
    790 
    -
    793  typedef detail::tmat4x3<f32, defaultp> f32mat4x3;
    -
    794 
    -
    797  typedef detail::tmat4x4<f32, defaultp> f32mat4x4;
    -
    798 
    -
    799 
    -
    802  //typedef detail::tmat1x1<f64, defaultp> f64mat1;
    -
    803 
    -
    806  typedef detail::tmat2x2<f64, defaultp> f64mat2;
    -
    807 
    -
    810  typedef detail::tmat3x3<f64, defaultp> f64mat3;
    -
    811 
    -
    814  typedef detail::tmat4x4<f64, defaultp> f64mat4;
    -
    815 
    -
    816 
    -
    819  //typedef f64 f64mat1x1;
    -
    820 
    -
    823  typedef detail::tmat2x2<f64, defaultp> f64mat2x2;
    -
    824 
    -
    827  typedef detail::tmat2x3<f64, defaultp> f64mat2x3;
    -
    828 
    -
    831  typedef detail::tmat2x4<f64, defaultp> f64mat2x4;
    -
    832 
    -
    835  typedef detail::tmat3x2<f64, defaultp> f64mat3x2;
    -
    836 
    -
    839  typedef detail::tmat3x3<f64, defaultp> f64mat3x3;
    -
    840 
    -
    843  typedef detail::tmat3x4<f64, defaultp> f64mat3x4;
    -
    844 
    -
    847  typedef detail::tmat4x2<f64, defaultp> f64mat4x2;
    -
    848 
    -
    851  typedef detail::tmat4x3<f64, defaultp> f64mat4x3;
    -
    852 
    -
    855  typedef detail::tmat4x4<f64, defaultp> f64mat4x4;
    -
    856 
    -
    857 
    -
    859  // Quaternion types
    -
    860 
    -
    863  typedef detail::tquat<f32, defaultp> f32quat;
    -
    864 
    -
    867  typedef detail::tquat<f64, defaultp> f64quat;
    -
    868 
    -
    870 }//namespace glm
    -
    871 
    -
    872 #include "type_precision.inl"
    -
    873 
    -
    874 #endif//GLM_GTC_type_precision
    -
    highp_i16vec1 i16vec1
    Default precision 16 bit signed integer scalar type.
    Definition: fwd.hpp:468
    -
    highp_u16vec1 u16vec1
    Default precision 16 bit unsigned integer scalar type.
    Definition: fwd.hpp:1071
    -
    detail::int8 mediump_int8_t
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:196
    -
    highp_f32mat4x3 fmat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2397
    -
    detail::uint8 highp_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:845
    -
    highp_f32vec1 fvec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2353
    -
    highp_u8vec3 u8vec3
    Default precision 8 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:999
    -
    detail::int8 int8
    8 bit signed integer type.
    Definition: type_int.hpp:89
    -
    highp_i64vec2 i64vec2
    Default precision 64 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:710
    -
    highp_u64vec3 u64vec3
    Default precision 64 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1317
    -
    detail::uint16 mediump_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:815
    -
    detail::uint64 lowp_uint64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:739
    -
    detail::uint32 mediump_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:787
    -
    detail::uint32 uint32
    32 bit unsigned integer type.
    Definition: type_int.hpp:96
    -
    detail::int16 int16
    16 bit signed integer type.
    Definition: type_int.hpp:90
    -
    highp_i32vec2 i32vec2
    Default precision 32 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:551
    -
    detail::uint8 lowp_uint8_t
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:744
    -
    float float32
    Default 32 bit single-precision floating-point scalar.
    Definition: type_float.hpp:81
    -
    highp_u16vec3 u16vec3
    Default precision 16 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1079
    -
    detail::int32 highp_int32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:236
    -
    detail::uint8 uint8_t
    8 bit unsigned integer type.
    Definition: fwd.hpp:895
    -
    highp_f32vec3 f32vec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2431
    -
    highp_u64vec1 u64vec1
    Default precision 64 bit unsigned integer scalar type.
    Definition: fwd.hpp:1309
    -
    detail::int16 highp_int16_t
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:248
    -
    highp_u8vec4 u8vec4
    Default precision 8 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1003
    -
    detail::int64 mediump_int64_t
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:208
    -
    detail::int32 lowp_int32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:140
    -
    detail::int64 int64_t
    64 bit signed integer type.
    Definition: fwd.hpp:305
    -
    highp_float32_t f32
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1523
    -
    detail::uint32 uint32_t
    32 bit unsigned integer type.
    Definition: fwd.hpp:903
    -
    detail::uint8 u8
    8 bit unsigned integer type.
    Definition: fwd.hpp:911
    -
    detail::int64 int64
    64 bit signed integer type.
    Definition: type_int.hpp:92
    -
    detail::uint16 lowp_u16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:765
    -
    highp_float32_t float32_t
    Default 32 bit single-precision floating-point scalar.
    Definition: fwd.hpp:1515
    -
    detail::int32 highp_int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:252
    -
    highp_f32vec2 fvec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2357
    -
    highp_i16vec2 i16vec2
    Default precision 16 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:472
    -
    detail::uint32 mediump_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:803
    -
    detail::uint32 highp_uint32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:837
    -
    detail::uint16 mediump_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:783
    -
    detail::uint16 lowp_uint16_t
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:748
    -
    detail::int16 mediump_int16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:184
    -
    highp_f64mat3x4 f64mat3x4
    Default double-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2566
    -
    detail::uint8 mediump_uint8_t
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:795
    -
    detail::int32 i32
    32 bit signed integer type.
    Definition: fwd.hpp:317
    -
    highp_f64vec1 f64vec1
    Default double-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2530
    -
    detail::int8 lowp_int8_t
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:148
    -
    detail::uint16 highp_uint16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:833
    -
    detail::uint64 mediump_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:823
    -
    detail::uint64 uint64_t
    64 bit unsigned integer type.
    Definition: fwd.hpp:907
    -
    highp_i64vec1 i64vec1
    Default precision 64 bit signed integer scalar type.
    Definition: fwd.hpp:706
    -
    detail::int16 int16_t
    16 bit signed integer type.
    Definition: fwd.hpp:297
    -
    highp_f32vec2 f32vec2
    Default single-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2427
    -
    detail::uint16 highp_u16
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:865
    -
    highp_f64mat4x4 f64mat4x4
    Default double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2578
    -
    highp_f64mat4x2 f64mat4x2
    Default double-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2570
    -
    highp_f32vec3 fvec3
    Default single-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2361
    -
    detail::int64 i64
    64 bit signed integer type.
    Definition: fwd.hpp:321
    -
    detail::int32 mediump_int32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:188
    -
    f32mat4x4 f32mat4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2483
    -
    detail::int64 lowp_i64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:176
    -
    detail::uint64 uint64
    64 bit unsigned integer type.
    Definition: type_int.hpp:97
    -
    detail::int64 highp_int64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:240
    -
    detail::uint32 highp_uint32_t
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:853
    -
    detail::int16 mediump_int16_t
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:200
    -
    detail::int16 lowp_int16_t
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:152
    -
    highp_i8vec4 i8vec4
    Default precision 8 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:400
    -
    detail::int32 mediump_int32_t
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:204
    -
    highp_f32mat4x3 f32mat4x3
    Default single-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2467
    -
    detail::uint16 lowp_uint16
    Low precision 16 bit unsigned integer type.
    Definition: fwd.hpp:731
    -
    highp_f32mat3x4 f32mat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2459
    -
    detail::int64 mediump_int64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:192
    -
    highp_u32vec2 u32vec2
    Default precision 32 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1154
    -
    detail::int32 lowp_int32_t
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:156
    -
    highp_f64mat2x3 f64mat2x3
    Default double-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2550
    -
    detail::uint16 highp_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:849
    -
    highp_f32vec4 f32vec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2435
    -
    f64mat3x3 f64mat3
    Default double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2586
    -
    detail::uint64 highp_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:841
    -
    detail::uint64 highp_u64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:873
    -
    detail::uint8 lowp_uint8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:727
    -
    highp_i16vec3 i16vec3
    Default precision 16 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:476
    -
    detail::int16 i16
    16 bit signed integer type.
    Definition: fwd.hpp:313
    -
    detail::uint64 lowp_u64
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:773
    -
    detail::uint64 lowp_uint64_t
    Low precision 64 bit unsigned integer type.
    Definition: fwd.hpp:756
    -
    detail::int8 int8_t
    8 bit signed integer type.
    Definition: fwd.hpp:293
    -
    highp_f64vec3 f64vec3
    Default double-precision floating-point vector of 3 components.
    Definition: fwd.hpp:2538
    -
    fmat4x4 fmat4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2413
    -
    detail::uint16 uint16_t
    16 bit unsigned integer type.
    Definition: fwd.hpp:899
    -
    detail::uint8 lowp_u8
    Low precision 8 bit unsigned integer type.
    Definition: fwd.hpp:761
    -
    detail::int8 i8
    8 bit signed integer type.
    Definition: fwd.hpp:309
    -
    highp_f32mat4x2 f32mat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2463
    -
    detail::uint32 lowp_uint32_t
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:752
    -
    detail::int32 int32
    32 bit signed integer type.
    Definition: type_int.hpp:91
    -
    highp_i64vec4 i64vec4
    Default precision 64 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:718
    -
    f64mat4x4 f64mat4
    Default double-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2590
    -
    highp_f64mat2x4 f64mat2x4
    Default double-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2554
    -
    highp_f32mat4x2 fmat4x2
    Default single-precision floating-point 4x2 matrix.
    Definition: fwd.hpp:2393
    -
    highp_f32mat2x2 fmat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2369
    -
    detail::int32 highp_i32
    High precision 32 bit signed integer type.
    Definition: fwd.hpp:268
    -
    fmat2x2 fmat2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2405
    -
    highp_u64vec2 u64vec2
    Default precision 64 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1313
    -
    detail::int64 highp_int64_t
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:256
    -
    detail::int32 int32_t
    32 bit signed integer type.
    Definition: fwd.hpp:301
    -
    highp_f32mat3x2 f32mat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2451
    -
    highp_f64mat4x3 f64mat4x3
    Default double-precision floating-point 4x3 matrix.
    Definition: fwd.hpp:2574
    -
    detail::int64 lowp_int64_t
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:160
    -
    detail::int8 mediump_int8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:180
    -
    detail::uint32 highp_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:869
    -
    highp_u16vec4 u16vec4
    Default precision 16 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1083
    -
    detail::int16 lowp_int16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:136
    -
    detail::uint64 mediump_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:807
    -
    highp_u16vec2 u16vec2
    Default precision 16 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:1075
    -
    detail::uint64 u64
    64 bit unsigned integer type.
    Definition: fwd.hpp:923
    -
    f64mat2x2 f64mat2
    Default double-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2582
    -
    highp_u64vec4 u64vec4
    Default precision 64 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1321
    -
    detail::uint8 mediump_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:811
    -
    highp_f32mat4x4 f32mat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2471
    -
    highp_f32mat2x3 fmat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2373
    -
    highp_f32mat4x4 fmat4x4
    Default single-precision floating-point 4x4 matrix.
    Definition: fwd.hpp:2401
    -
    highp_u8vec2 u8vec2
    Default precision 8 bit unsigned integer vector of 2 components type.
    Definition: fwd.hpp:995
    -
    highp_u32vec3 u32vec3
    Default precision 32 bit unsigned integer vector of 3 components type.
    Definition: fwd.hpp:1158
    -
    detail::uint8 uint8
    8 bit unsigned integer type.
    Definition: type_int.hpp:94
    -
    detail::int8 lowp_int8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:132
    -
    detail::uint32 mediump_u32
    Medium precision 32 bit unsigned integer type.
    Definition: fwd.hpp:819
    -
    detail::uint32 lowp_uint32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:735
    -
    detail::int32 lowp_i32
    Low precision 32 bit signed integer type.
    Definition: fwd.hpp:172
    -
    detail::uint32 u32
    32 bit unsigned integer type.
    Definition: fwd.hpp:919
    -
    highp_i8vec2 i8vec2
    Default precision 8 bit signed integer vector of 2 components type.
    Definition: fwd.hpp:392
    -
    highp_i32vec3 i32vec3
    Default precision 32 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:555
    -
    highp_f64mat2x2 f64mat2x2
    Default double-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2546
    -
    highp_f32vec1 f32vec1
    Default single-precision floating-point vector of 1 components.
    Definition: fwd.hpp:2423
    -
    highp_f32mat2x4 fmat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2377
    -
    detail::int64 highp_i64
    High precision 64 bit signed integer type.
    Definition: fwd.hpp:272
    -
    highp_float64_t float64_t
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1519
    -
    f32mat3x3 f32mat3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2479
    -
    detail::int8 highp_i8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:260
    -
    highp_i8vec3 i8vec3
    Default precision 8 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:396
    -
    detail::int32 mediump_i32
    Medium precision 32 bit signed integer type.
    Definition: fwd.hpp:220
    -
    highp_f32quat f32quat
    Default single-precision floating-point quaternion.
    Definition: fwd.hpp:2487
    -
    highp_u8vec1 u8vec1
    Default precision 8 bit unsigned integer scalar type.
    Definition: fwd.hpp:991
    -
    detail::uint64 mediump_uint64
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:791
    -
    highp_i32vec1 i32vec1
    Default precision 32 bit signed integer scalar type.
    Definition: fwd.hpp:547
    -
    highp_u32vec4 u32vec4
    Default precision 32 bit unsigned integer vector of 4 components type.
    Definition: fwd.hpp:1162
    -
    detail::uint8 highp_u8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:861
    -
    highp_f32mat2x2 f32mat2x2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2439
    -
    highp_i32vec4 i32vec4
    Default precision 32 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:559
    -
    detail::uint8 mediump_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:779
    -
    highp_i16vec4 i16vec4
    Default precision 16 bit signed integer vector of 4 components type.
    Definition: fwd.hpp:480
    -
    highp_float64_t f64
    Default 64 bit double-precision floating-point scalar.
    Definition: fwd.hpp:1527
    -
    detail::int8 mediump_i8
    Medium precision 8 bit signed integer type.
    Definition: fwd.hpp:212
    -
    detail::int64 mediump_i64
    Medium precision 64 bit signed integer type.
    Definition: fwd.hpp:224
    -
    detail::int16 highp_int16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:232
    -
    highp_f64vec2 f64vec2
    Default double-precision floating-point vector of 2 components.
    Definition: fwd.hpp:2534
    -
    highp_i8vec1 i8vec1
    Default precision 8 bit signed integer scalar type.
    Definition: fwd.hpp:388
    -
    highp_f64mat3x2 f64mat3x2
    Default double-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2558
    -
    detail::uint32 lowp_u32
    Low precision 32 bit unsigned integer type.
    Definition: fwd.hpp:769
    -
    detail::int16 highp_i16
    High precision 16 bit signed integer type.
    Definition: fwd.hpp:264
    -
    detail::int8 highp_int8
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:228
    -
    highp_u32vec1 u32vec1
    Default precision 32 bit unsigned integer scalar type.
    Definition: fwd.hpp:1150
    -
    detail::uint16 u16
    16 bit unsigned integer type.
    Definition: fwd.hpp:915
    -
    fmat3x3 fmat3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2409
    -
    detail::int16 lowp_i16
    Low precision 16 bit signed integer type.
    Definition: fwd.hpp:168
    -
    highp_f32mat2x3 f32mat2x3
    Default single-precision floating-point 2x3 matrix.
    Definition: fwd.hpp:2443
    -
    detail::uint16 uint16
    16 bit unsigned integer type.
    Definition: type_int.hpp:95
    -
    highp_f32vec4 fvec4
    Default single-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2365
    -
    highp_f64quat f64quat
    Default double-precision floating-point quaternion.
    Definition: fwd.hpp:2594
    -
    detail::int8 highp_int8_t
    High precision 8 bit signed integer type.
    Definition: fwd.hpp:244
    -
    highp_f32mat2x4 f32mat2x4
    Default single-precision floating-point 2x4 matrix.
    Definition: fwd.hpp:2447
    -
    f32mat2x2 f32mat2
    Default single-precision floating-point 2x2 matrix.
    Definition: fwd.hpp:2475
    -
    highp_f64vec4 f64vec4
    Default double-precision floating-point vector of 4 components.
    Definition: fwd.hpp:2542
    -
    detail::int64 lowp_int64
    Low precision 64 bit signed integer type.
    Definition: fwd.hpp:144
    -
    detail::uint64 highp_uint64_t
    Medium precision 64 bit unsigned integer type.
    Definition: fwd.hpp:857
    -
    double float64
    Default 64 bit double-precision floating-point scalar.
    Definition: type_float.hpp:82
    -
    highp_f32mat3x3 fmat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2385
    -
    detail::uint8 highp_uint8
    Medium precision 8 bit unsigned integer type.
    Definition: fwd.hpp:829
    -
    detail::int8 lowp_i8
    Low precision 8 bit signed integer type.
    Definition: fwd.hpp:164
    -
    highp_f32mat3x3 f32mat3x3
    Default single-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2455
    -
    highp_f64mat3x3 f64mat3x3
    Default double-precision floating-point 3x3 matrix.
    Definition: fwd.hpp:2562
    -
    highp_f32mat3x4 fmat3x4
    Default single-precision floating-point 3x4 matrix.
    Definition: fwd.hpp:2389
    -
    highp_f32mat3x2 fmat3x2
    Default single-precision floating-point 3x2 matrix.
    Definition: fwd.hpp:2381
    -
    detail::int16 mediump_i16
    Medium precision 16 bit signed integer type.
    Definition: fwd.hpp:216
    -
    highp_i64vec3 i64vec3
    Default precision 64 bit signed integer vector of 3 components type.
    Definition: fwd.hpp:714
    -
    detail::uint16 mediump_uint16_t
    Medium precision 16 bit unsigned integer type.
    Definition: fwd.hpp:799
    +
    505  typedef highp_bvec3 bvec3;
    +
    506 
    +
    510  typedef highp_bvec4 bvec4;
    +
    511 #endif//GLM_PRECISION
    +
    512 
    +
    514 }//namespace glm
    +
    tvec2< uint, mediump > mediump_uvec2
    2 components vector of medium precision unsigned integer numbers.
    Definition: type_vec.hpp:135
    +
    highp_uvec3 uvec3
    3 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:477
    +
    tvec3< bool, lowp > lowp_bvec3
    3 components vector of low precision bool numbers.
    Definition: type_vec.hpp:271
    +
    tvec3< int, mediump > mediump_ivec3
    3 components vector of medium precision signed integer numbers.
    Definition: type_vec.hpp:225
    +
    tvec2< double, mediump > mediump_dvec2
    2 components vector of medium double-precision floating-point numbers.
    Definition: type_vec.hpp:93
    +
    tvec4< int, mediump > mediump_ivec4
    4 components vector of medium precision signed integer numbers.
    Definition: type_vec.hpp:324
    +
    highp_dvec2 dvec2
    2 components vector of double-precision floating-point numbers.
    Definition: type_vec.hpp:416
    +
    tvec4< int, lowp > lowp_ivec4
    4 components vector of low precision signed integer numbers.
    Definition: type_vec.hpp:330
    +
    tvec3< float, mediump > mediump_vec3
    3 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:183
    +
    tvec3< uint, highp > highp_uvec3
    3 components vector of high precision unsigned integer numbers.
    Definition: type_vec.hpp:239
    +
    tvec4< double, lowp > lowp_dvec4
    4 components vector of low double-precision floating-point numbers.
    Definition: type_vec.hpp:312
    +
    tvec2< float, highp > highp_vec2
    2 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:65
    +
    tvec4< uint, lowp > lowp_uvec4
    4 components vector of low precision unsigned integer numbers.
    Definition: type_vec.hpp:348
    +
    tvec2< int, mediump > mediump_ivec2
    2 components vector of medium precision signed integer numbers.
    Definition: type_vec.hpp:114
    +
    tvec3< int, lowp > lowp_ivec3
    3 components vector of low precision signed integer numbers.
    Definition: type_vec.hpp:232
    +
    tvec2< uint, lowp > lowp_uvec2
    2 components vector of low precision unsigned integer numbers.
    Definition: type_vec.hpp:142
    +
    tvec3< int, highp > highp_ivec3
    3 components vector of high precision signed integer numbers.
    Definition: type_vec.hpp:218
    +
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    +
    tvec3< float, lowp > lowp_vec3
    3 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:190
    +
    tvec2< float, mediump > mediump_vec2
    2 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:72
    +
    highp_bvec3 bvec3
    3 components vector of boolean.
    Definition: type_vec.hpp:505
    +
    tvec4< int, highp > highp_ivec4
    4 components vector of high precision signed integer numbers.
    Definition: type_vec.hpp:318
    +
    highp_uvec4 uvec4
    4 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:482
    +
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    +
    highp_dvec3 dvec3
    3 components vector of double-precision floating-point numbers.
    Definition: type_vec.hpp:421
    +
    highp_ivec3 ivec3
    3 components vector of signed integer numbers.
    Definition: type_vec.hpp:449
    +
    tvec3< bool, highp > highp_bvec3
    3 components vector of high precision bool numbers.
    Definition: type_vec.hpp:259
    +
    tvec3< double, highp > highp_dvec3
    3 components vector of high double-precision floating-point numbers.
    Definition: type_vec.hpp:197
    +
    tvec3< float, highp > highp_vec3
    3 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:176
    +
    tvec4< uint, mediump > mediump_uvec4
    4 components vector of medium precision unsigned integer numbers.
    Definition: type_vec.hpp:342
    +
    highp_ivec2 ivec2
    2 components vector of signed integer numbers.
    Definition: type_vec.hpp:444
    +
    tvec2< bool, lowp > lowp_bvec2
    2 components vector of low precision bool numbers.
    Definition: type_vec.hpp:163
    +
    tvec2< double, highp > highp_dvec2
    2 components vector of high double-precision floating-point numbers.
    Definition: type_vec.hpp:86
    +
    tvec4< float, lowp > lowp_vec4
    4 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:294
    +
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    +
    tvec3< uint, mediump > mediump_uvec3
    3 components vector of medium precision unsigned integer numbers.
    Definition: type_vec.hpp:246
    +
    highp_dvec4 dvec4
    4 components vector of double-precision floating-point numbers.
    Definition: type_vec.hpp:426
    +
    tvec2< float, lowp > lowp_vec2
    2 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:79
    +
    tvec4< bool, highp > highp_bvec4
    4 components vector of high precision bool numbers.
    Definition: type_vec.hpp:354
    +
    Definition: _noise.hpp:31
    +
    tvec2< bool, mediump > mediump_bvec2
    2 components vector of medium precision bool numbers.
    Definition: type_vec.hpp:156
    +
    tvec3< bool, mediump > mediump_bvec3
    3 components vector of medium precision bool numbers.
    Definition: type_vec.hpp:265
    +
    tvec3< double, mediump > mediump_dvec3
    3 components vector of medium double-precision floating-point numbers.
    Definition: type_vec.hpp:204
    +
    tvec4< bool, mediump > mediump_bvec4
    4 components vector of medium precision bool numbers.
    Definition: type_vec.hpp:360
    +
    tvec3< uint, lowp > lowp_uvec3
    3 components vector of low precision unsigned integer numbers.
    Definition: type_vec.hpp:253
    +
    tvec2< int, highp > highp_ivec2
    2 components vector of high precision signed integer numbers.
    Definition: type_vec.hpp:107
    +
    tvec4< double, highp > highp_dvec4
    4 components vector of high double-precision floating-point numbers.
    Definition: type_vec.hpp:300
    +
    tvec2< bool, highp > highp_bvec2
    2 components vector of high precision bool numbers.
    Definition: type_vec.hpp:149
    +
    tvec2< double, lowp > lowp_dvec2
    2 components vector of low double-precision floating-point numbers.
    Definition: type_vec.hpp:100
    +
    tvec4< bool, lowp > lowp_bvec4
    4 components vector of low precision bool numbers.
    Definition: type_vec.hpp:366
    +
    highp_bvec2 bvec2
    2 components vector of boolean.
    Definition: type_vec.hpp:500
    +
    tvec4< uint, highp > highp_uvec4
    4 components vector of high precision unsigned integer numbers.
    Definition: type_vec.hpp:336
    +
    highp_bvec4 bvec4
    4 components vector of boolean.
    Definition: type_vec.hpp:510
    +
    tvec2< int, lowp > lowp_ivec2
    2 components vector of low precision signed integer numbers.
    Definition: type_vec.hpp:121
    +
    tvec4< float, highp > highp_vec4
    4 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:282
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    tvec4< double, mediump > mediump_dvec4
    4 components vector of medium double-precision floating-point numbers.
    Definition: type_vec.hpp:306
    +
    highp_ivec4 ivec4
    4 components vector of signed integer numbers.
    Definition: type_vec.hpp:454
    +
    tvec2< uint, highp > highp_uvec2
    2 components vector of high precision unsigned integer numbers.
    Definition: type_vec.hpp:128
    +
    tvec4< float, mediump > mediump_vec4
    4 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:288
    +
    tvec3< double, lowp > lowp_dvec3
    3 components vector of low double-precision floating-point numbers.
    Definition: type_vec.hpp:211
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    highp_uvec2 uvec2
    2 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:472
    diff --git a/doc/api/a00133.html b/doc/api/a00133.html index 5b8d6f5d..6bc7ea0f 100644 --- a/doc/api/a00133.html +++ b/doc/api/a00133.html @@ -3,8 +3,8 @@ - -GLM: type_ptr.hpp File Reference + +0.9.6: type_vec1.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,117 +41,32 @@
    -
    -
    type_ptr.hpp File Reference
    +
    type_vec1.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename T >
    GLM_FUNC_DECL detail::tmat2x2
    -< T, defaultp > 
    make_mat2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x2
    -< T, defaultp > 
    make_mat2x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x3
    -< T, defaultp > 
    make_mat2x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x4
    -< T, defaultp > 
    make_mat2x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x3
    -< T, defaultp > 
    make_mat3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x2
    -< T, defaultp > 
    make_mat3x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x3
    -< T, defaultp > 
    make_mat3x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x4
    -< T, defaultp > 
    make_mat3x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    make_mat4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x2
    -< T, defaultp > 
    make_mat4x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x3
    -< T, defaultp > 
    make_mat4x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    make_mat4x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tquat< T,
    -defaultp > 
    make_quat (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec2< T,
    -defaultp > 
    make_vec2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec3< T,
    -defaultp > 
    make_vec3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec4< T,
    -defaultp > 
    make_vec4 (T const *const ptr)
     
    template<typename genType >
    GLM_FUNC_DECL
    -genType::value_type const * 
    value_ptr (genType const &vec)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_type_ptr

    -
    Date
    2009-05-06 / 2011-06-05
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -gtc_half_float (dependence)
    -
    -GLM_GTC_quaternion (dependence)
    +

    GLM Core

    +
    Date
    2008-08-25 / 2011-06-15
    +
    Author
    Christophe Riccio
    -

    Definition in file type_ptr.hpp.

    +

    Definition in file type_vec1.hpp.

    diff --git a/doc/api/a00133_source.html b/doc/api/a00133_source.html index 1a3994f2..28a5f56b 100644 --- a/doc/api/a00133_source.html +++ b/doc/api/a00133_source.html @@ -3,8 +3,8 @@ - -GLM: type_ptr.hpp Source File + +0.9.6: type_vec1.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,122 +41,293 @@
    -
    type_ptr.hpp
    +
    type_vec1.hpp
    Go to the documentation of this file.
    1 
    -
    59 #ifndef GLM_GTC_type_ptr
    -
    60 #define GLM_GTC_type_ptr
    -
    61 
    -
    62 // Dependency:
    -
    63 #include "../gtc/quaternion.hpp"
    -
    64 #include "../vec2.hpp"
    -
    65 #include "../vec3.hpp"
    -
    66 #include "../vec4.hpp"
    -
    67 #include "../mat2x2.hpp"
    -
    68 #include "../mat2x3.hpp"
    -
    69 #include "../mat2x4.hpp"
    -
    70 #include "../mat3x2.hpp"
    -
    71 #include "../mat3x3.hpp"
    -
    72 #include "../mat3x4.hpp"
    -
    73 #include "../mat4x2.hpp"
    -
    74 #include "../mat4x3.hpp"
    -
    75 #include "../mat4x4.hpp"
    -
    76 #include <cstring>
    -
    77 
    -
    78 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    79 # pragma message("GLM: GLM_GTC_type_ptr extension included")
    -
    80 #endif
    -
    81 
    -
    82 namespace glm
    -
    83 {
    -
    86 
    -
    89  template<typename genType>
    -
    90  GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const & vec);
    -
    91 
    -
    94  template<typename T>
    -
    95  GLM_FUNC_DECL detail::tvec2<T, defaultp> make_vec2(T const * const ptr);
    -
    96 
    -
    99  template<typename T>
    -
    100  GLM_FUNC_DECL detail::tvec3<T, defaultp> make_vec3(T const * const ptr);
    -
    101 
    -
    104  template<typename T>
    -
    105  GLM_FUNC_DECL detail::tvec4<T, defaultp> make_vec4(T const * const ptr);
    -
    106 
    -
    109  template<typename T>
    -
    110  GLM_FUNC_DECL detail::tmat2x2<T, defaultp> make_mat2x2(T const * const ptr);
    -
    111 
    -
    114  template<typename T>
    -
    115  GLM_FUNC_DECL detail::tmat2x3<T, defaultp> make_mat2x3(T const * const ptr);
    -
    116 
    -
    119  template<typename T>
    -
    120  GLM_FUNC_DECL detail::tmat2x4<T, defaultp> make_mat2x4(T const * const ptr);
    -
    121 
    -
    124  template<typename T>
    -
    125  GLM_FUNC_DECL detail::tmat3x2<T, defaultp> make_mat3x2(T const * const ptr);
    +
    29 #pragma once
    +
    30 
    +
    31 #include "../fwd.hpp"
    +
    32 #include "type_vec.hpp"
    +
    33 #ifdef GLM_SWIZZLE
    +
    34 # if GLM_HAS_ANONYMOUS_UNION
    +
    35 # include "_swizzle.hpp"
    +
    36 # else
    +
    37 # include "_swizzle_func.hpp"
    +
    38 # endif
    +
    39 #endif //GLM_SWIZZLE
    +
    40 #include <cstddef>
    +
    41 
    +
    42 namespace glm
    +
    43 {
    +
    44  template <typename T, precision P = defaultp>
    +
    45  struct tvec1
    +
    46  {
    +
    48  // Implementation detail
    +
    49 
    +
    50  typedef tvec1<T, P> type;
    +
    51  typedef tvec1<bool, P> bool_type;
    +
    52  typedef T value_type;
    +
    53 
    +
    55  // Helper
    +
    56 
    +
    57 # ifdef GLM_FORCE_SIZE_FUNC
    +
    58  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    60 # else
    +
    61  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    63 # endif//GLM_FORCE_SIZE_FUNC
    +
    64 
    +
    66  // Data
    +
    67 
    +
    68 # if GLM_HAS_ANONYMOUS_UNION
    +
    69  union
    +
    70  {
    +
    71  T x;
    +
    72  T r;
    +
    73  T s;
    +
    74 /*
    +
    75 # ifdef GLM_SWIZZLE
    +
    76  _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, x)
    +
    77  _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, r)
    +
    78  _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, s)
    +
    79  _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, x)
    +
    80  _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, r)
    +
    81  _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, s)
    +
    82  _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, x)
    +
    83  _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, r)
    +
    84  _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, s)
    +
    85 # endif//GLM_SWIZZLE*/
    +
    86  };
    +
    87 # else
    +
    88  union {T x, r, s;};
    +
    89 /*
    +
    90 # ifdef GLM_SWIZZLE
    +
    91  GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, P, tvec2, tvec2, tvec3, tvec4)
    +
    92 # endif//GLM_SWIZZLE*/
    +
    93 # endif
    +
    94 
    +
    96  // Accesses
    +
    97 
    +
    98  GLM_FUNC_DECL T & operator[](length_t i);
    +
    99  GLM_FUNC_DECL T const & operator[](length_t i) const;
    +
    100 
    +
    102  // Implicit basic constructors
    +
    103 
    +
    104  GLM_FUNC_DECL tvec1();
    +
    105  template <precision Q>
    +
    106  GLM_FUNC_DECL tvec1(tvec1<T, Q> const & v);
    +
    107 
    +
    109  // Explicit basic constructors
    +
    110 
    +
    111  GLM_FUNC_DECL explicit tvec1(ctor);
    +
    112  GLM_FUNC_DECL explicit tvec1(T const & s);
    +
    113 
    +
    115  // Conversion vector constructors
    +
    116 
    +
    118  template <typename U, precision Q>
    +
    119  GLM_FUNC_DECL explicit tvec1(tvec2<U, Q> const & v);
    +
    121  template <typename U, precision Q>
    +
    122  GLM_FUNC_DECL explicit tvec1(tvec3<U, Q> const & v);
    +
    124  template <typename U, precision Q>
    +
    125  GLM_FUNC_DECL explicit tvec1(tvec4<U, Q> const & v);
    126 
    -
    129  template<typename T>
    -
    130  GLM_FUNC_DECL detail::tmat3x3<T, defaultp> make_mat3x3(T const * const ptr);
    -
    131 
    -
    134  template<typename T>
    -
    135  GLM_FUNC_DECL detail::tmat3x4<T, defaultp> make_mat3x4(T const * const ptr);
    +
    127 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    128  template <typename U, precision Q>
    +
    130  GLM_FUNC_DECL explicit tvec1(tvec1<U, Q> const & v);
    +
    131 # else
    +
    132  template <typename U, precision Q>
    +
    134  GLM_FUNC_DECL tvec1(tvec1<U, Q> const & v);
    +
    135 # endif
    136 
    -
    139  template<typename T>
    -
    140  GLM_FUNC_DECL detail::tmat4x2<T, defaultp> make_mat4x2(
    -
    141  T const * const ptr);
    -
    142 
    -
    145  template<typename T>
    -
    146  GLM_FUNC_DECL detail::tmat4x3<T, defaultp> make_mat4x3(T const * const ptr);
    +
    138  // Swizzle constructors
    +
    139 
    +
    140 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    +
    141  template <int E0>
    +
    142  GLM_FUNC_DECL tvec1(detail::_swizzle<1, T, P, tvec1<T, P>, E0, -1,-2,-3> const & that)
    +
    143  {
    +
    144  *this = that();
    +
    145  }
    +
    146 # endif//(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    147 
    -
    150  template<typename T>
    -
    151  GLM_FUNC_DECL detail::tmat4x4<T, defaultp> make_mat4x4(T const * const ptr);
    -
    152 
    -
    155  template<typename T>
    -
    156  GLM_FUNC_DECL detail::tmat2x2<T, defaultp> make_mat2(T const * const ptr);
    -
    157 
    -
    160  template<typename T>
    -
    161  GLM_FUNC_DECL detail::tmat3x3<T, defaultp> make_mat3(T const * const ptr);
    -
    162 
    -
    165  template<typename T>
    -
    166  GLM_FUNC_DECL detail::tmat4x4<T, defaultp> make_mat4(T const * const ptr);
    -
    167 
    -
    170  template<typename T>
    -
    171  GLM_FUNC_DECL detail::tquat<T, defaultp> make_quat(T const * const ptr);
    +
    149  // Unary arithmetic operators
    +
    150 
    +
    151  template <typename U>
    +
    152  GLM_FUNC_DECL tvec1<T, P> & operator=(tvec1<U, P> const & v);
    +
    153  template <typename U>
    +
    154  GLM_FUNC_DECL tvec1<T, P> & operator+=(U const & s);
    +
    155  template <typename U>
    +
    156  GLM_FUNC_DECL tvec1<T, P> & operator+=(tvec1<U, P> const & v);
    +
    157  template <typename U>
    +
    158  GLM_FUNC_DECL tvec1<T, P> & operator-=(U const & s);
    +
    159  template <typename U>
    +
    160  GLM_FUNC_DECL tvec1<T, P> & operator-=(tvec1<U, P> const & v);
    +
    161  template <typename U>
    +
    162  GLM_FUNC_DECL tvec1<T, P> & operator*=(U const & s);
    +
    163  template <typename U>
    +
    164  GLM_FUNC_DECL tvec1<T, P> & operator*=(tvec1<U, P> const & v);
    +
    165  template <typename U>
    +
    166  GLM_FUNC_DECL tvec1<T, P> & operator/=(U const & s);
    +
    167  template <typename U>
    +
    168  GLM_FUNC_DECL tvec1<T, P> & operator/=(tvec1<U, P> const & v);
    +
    169 
    +
    171  // Increment and decrement operators
    172 
    -
    174 }//namespace glm
    -
    175 
    -
    176 #include "type_ptr.inl"
    +
    173  GLM_FUNC_DECL tvec1<T, P> & operator++();
    +
    174  GLM_FUNC_DECL tvec1<T, P> & operator--();
    +
    175  GLM_FUNC_DECL tvec1<T, P> operator++(int);
    +
    176  GLM_FUNC_DECL tvec1<T, P> operator--(int);
    177 
    -
    178 #endif//GLM_GTC_type_ptr
    -
    179 
    -
    GLM_FUNC_DECL detail::tmat3x3< T, defaultp > make_mat3x3(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tquat< T, defaultp > make_quat(T const *const ptr)
    Build a quaternion from a pointer.
    -
    GLM_FUNC_DECL detail::tmat3x3< T, defaultp > make_mat3(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tmat2x2< T, defaultp > make_mat2(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tmat3x2< T, defaultp > make_mat3x2(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tmat2x2< T, defaultp > make_mat2x2(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tmat3x4< T, defaultp > make_mat3x4(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tmat4x2< T, defaultp > make_mat4x2(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, defaultp > make_mat4(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tmat2x4< T, defaultp > make_mat2x4(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tvec3< T, defaultp > make_vec3(T const *const ptr)
    Build a vector from a pointer.
    -
    GLM_FUNC_DECL detail::tvec2< T, defaultp > make_vec2(T const *const ptr)
    Build a vector from a pointer.
    -
    GLM_FUNC_DECL detail::tvec4< T, defaultp > make_vec4(T const *const ptr)
    Build a vector from a pointer.
    -
    GLM_FUNC_DECL detail::tmat4x3< T, defaultp > make_mat4x3(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &vec)
    Return the constant address to the data of the input parameter.
    -
    GLM_FUNC_DECL detail::tmat4x4< T, defaultp > make_mat4x4(T const *const ptr)
    Build a matrix from a pointer.
    -
    GLM_FUNC_DECL detail::tmat2x3< T, defaultp > make_mat2x3(T const *const ptr)
    Build a matrix from a pointer.
    +
    179  // Unary bit operators
    +
    180 
    +
    181  template <typename U>
    +
    182  GLM_FUNC_DECL tvec1<T, P> & operator%=(U const & s);
    +
    183  template <typename U>
    +
    184  GLM_FUNC_DECL tvec1<T, P> & operator%=(tvec1<U, P> const & v);
    +
    185  template <typename U>
    +
    186  GLM_FUNC_DECL tvec1<T, P> & operator&=(U const & s);
    +
    187  template <typename U>
    +
    188  GLM_FUNC_DECL tvec1<T, P> & operator&=(tvec1<U, P> const & v);
    +
    189  template <typename U>
    +
    190  GLM_FUNC_DECL tvec1<T, P> & operator|=(U const & s);
    +
    191  template <typename U>
    +
    192  GLM_FUNC_DECL tvec1<T, P> & operator|=(tvec1<U, P> const & v);
    +
    193  template <typename U>
    +
    194  GLM_FUNC_DECL tvec1<T, P> & operator^=(U const & s);
    +
    195  template <typename U>
    +
    196  GLM_FUNC_DECL tvec1<T, P> & operator^=(tvec1<U, P> const & v);
    +
    197  template <typename U>
    +
    198  GLM_FUNC_DECL tvec1<T, P> & operator<<=(U const & s);
    +
    199  template <typename U>
    +
    200  GLM_FUNC_DECL tvec1<T, P> & operator<<=(tvec1<U, P> const & v);
    +
    201  template <typename U>
    +
    202  GLM_FUNC_DECL tvec1<T, P> & operator>>=(U const & s);
    +
    203  template <typename U>
    +
    204  GLM_FUNC_DECL tvec1<T, P> & operator>>=(tvec1<U, P> const & v);
    +
    205  };
    +
    206 
    +
    207 
    +
    208  template <typename T, precision P>
    +
    209  GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v, T const & s);
    +
    210 
    +
    211  template <typename T, precision P>
    +
    212  GLM_FUNC_DECL tvec1<T, P> operator+(T const & s, tvec1<T, P> const & v);
    +
    213 
    +
    214  template <typename T, precision P>
    +
    215  GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    216 
    +
    217  template <typename T, precision P>
    +
    218  GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v, T const & s);
    +
    219 
    +
    220  template <typename T, precision P>
    +
    221  GLM_FUNC_DECL tvec1<T, P> operator-(T const & s, tvec1<T, P> const & v);
    +
    222 
    +
    223  template <typename T, precision P>
    +
    224  GLM_FUNC_DECL tvec1<T, P> operator- (tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    225 
    +
    226  template <typename T, precision P>
    +
    227  GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v, T const & s);
    +
    228 
    +
    229  template <typename T, precision P>
    +
    230  GLM_FUNC_DECL tvec1<T, P> operator*(T const & s, tvec1<T, P> const & v);
    +
    231 
    +
    232  template <typename T, precision P>
    +
    233  GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    234 
    +
    235  template <typename T, precision P>
    +
    236  GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v, T const & s);
    +
    237 
    +
    238  template <typename T, precision P>
    +
    239  GLM_FUNC_DECL tvec1<T, P> operator/(T const & s, tvec1<T, P> const & v);
    +
    240 
    +
    241  template <typename T, precision P>
    +
    242  GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    243 
    +
    244  template <typename T, precision P>
    +
    245  GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v);
    +
    246 
    +
    247  template <typename T, precision P>
    +
    248  GLM_FUNC_DECL bool operator==(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    249 
    +
    250  template <typename T, precision P>
    +
    251  GLM_FUNC_DECL bool operator!=(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    252 
    +
    253  template <typename T, precision P>
    +
    254  GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v, T const & s);
    +
    255 
    +
    256  template <typename T, precision P>
    +
    257  GLM_FUNC_DECL tvec1<T, P> operator%(T const & s, tvec1<T, P> const & v);
    +
    258 
    +
    259  template <typename T, precision P>
    +
    260  GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    261 
    +
    262  template <typename T, precision P>
    +
    263  GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v, T const & s);
    +
    264 
    +
    265  template <typename T, precision P>
    +
    266  GLM_FUNC_DECL tvec1<T, P> operator&(T const & s, tvec1<T, P> const & v);
    +
    267 
    +
    268  template <typename T, precision P>
    +
    269  GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    270 
    +
    271  template <typename T, precision P>
    +
    272  GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v, T const & s);
    +
    273 
    +
    274  template <typename T, precision P>
    +
    275  GLM_FUNC_DECL tvec1<T, P> operator|(T const & s, tvec1<T, P> const & v);
    +
    276 
    +
    277  template <typename T, precision P>
    +
    278  GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    279 
    +
    280  template <typename T, precision P>
    +
    281  GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v, T const & s);
    +
    282 
    +
    283  template <typename T, precision P>
    +
    284  GLM_FUNC_DECL tvec1<T, P> operator^(T const & s, tvec1<T, P> const & v);
    +
    285 
    +
    286  template <typename T, precision P>
    +
    287  GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    288 
    +
    289  template <typename T, precision P>
    +
    290  GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v, T const & s);
    +
    291 
    +
    292  template <typename T, precision P>
    +
    293  GLM_FUNC_DECL tvec1<T, P> operator<<(T const & s, tvec1<T, P> const & v);
    +
    294 
    +
    295  template <typename T, precision P>
    +
    296  GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    297 
    +
    298  template <typename T, precision P>
    +
    299  GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v, T const & s);
    +
    300 
    +
    301  template <typename T, precision P>
    +
    302  GLM_FUNC_DECL tvec1<T, P> operator>>(T const & s, tvec1<T, P> const & v);
    +
    303 
    +
    304  template <typename T, precision P>
    +
    305  GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    306 
    +
    307  template <typename T, precision P>
    +
    308  GLM_FUNC_DECL tvec1<T, P> operator~(tvec1<T, P> const & v);
    +
    309 }//namespace glm
    +
    310 
    +
    311 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    312 #include "type_vec1.inl"
    +
    313 #endif//GLM_EXTERNAL_TEMPLATE
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00134.html b/doc/api/a00134.html new file mode 100644 index 00000000..ca312447 --- /dev/null +++ b/doc/api/a00134.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_vec2.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_vec2.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2008-08-18 / 2013-08-27
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_vec2.hpp.

    +
    + + + + diff --git a/doc/api/a00134_source.html b/doc/api/a00134_source.html index a5e28fc5..a9c7c7b6 100644 --- a/doc/api/a00134_source.html +++ b/doc/api/a00134_source.html @@ -3,8 +3,8 @@ - -GLM: type_vec.hpp Source File + +0.9.6: type_vec2.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,300 +41,374 @@
    -
    type_vec.hpp
    +
    type_vec2.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_vec
    -
    30 #define glm_core_type_vec
    -
    31 
    -
    32 #include "precision.hpp"
    -
    33 #include "type_int.hpp"
    -
    34 
    -
    35 namespace glm{
    -
    36 namespace detail
    -
    37 {
    -
    38  template <typename T, precision P> struct tvec1;
    -
    39  template <typename T, precision P> struct tvec2;
    -
    40  template <typename T, precision P> struct tvec3;
    -
    41  template <typename T, precision P> struct tvec4;
    -
    42 }//namespace detail
    -
    43 
    -
    44  typedef detail::tvec1<float, highp> highp_vec1_t;
    -
    45  typedef detail::tvec1<float, mediump> mediump_vec1_t;
    -
    46  typedef detail::tvec1<float, lowp> lowp_vec1_t;
    -
    47  typedef detail::tvec1<int, highp> highp_ivec1_t;
    -
    48  typedef detail::tvec1<int, mediump> mediump_ivec1_t;
    -
    49  typedef detail::tvec1<int, lowp> lowp_ivec1_t;
    -
    50  typedef detail::tvec1<uint, highp> highp_uvec1_t;
    -
    51  typedef detail::tvec1<uint, mediump> mediump_uvec1_t;
    -
    52  typedef detail::tvec1<uint, lowp> lowp_uvec1_t;
    -
    53  typedef detail::tvec1<bool, highp> highp_bvec1_t;
    -
    54  typedef detail::tvec1<bool, mediump> mediump_bvec1_t;
    -
    55  typedef detail::tvec1<bool, lowp> lowp_bvec1_t;
    -
    56 
    -
    59 
    -
    65  typedef detail::tvec2<float, highp> highp_vec2;
    -
    66 
    -
    72  typedef detail::tvec2<float, mediump> mediump_vec2;
    -
    73 
    -
    79  typedef detail::tvec2<float, lowp> lowp_vec2;
    -
    80 
    -
    86  typedef detail::tvec2<double, highp> highp_dvec2;
    -
    87 
    -
    93  typedef detail::tvec2<double, mediump> mediump_dvec2;
    -
    94 
    -
    100  typedef detail::tvec2<double, lowp> lowp_dvec2;
    -
    101 
    -
    107  typedef detail::tvec2<int, highp> highp_ivec2;
    -
    108 
    -
    114  typedef detail::tvec2<int, mediump> mediump_ivec2;
    -
    115 
    -
    121  typedef detail::tvec2<int, lowp> lowp_ivec2;
    -
    122 
    -
    128  typedef detail::tvec2<uint, highp> highp_uvec2;
    -
    129 
    -
    135  typedef detail::tvec2<uint, mediump> mediump_uvec2;
    -
    136 
    -
    142  typedef detail::tvec2<uint, lowp> lowp_uvec2;
    -
    143 
    -
    149  typedef detail::tvec2<bool, highp> highp_bvec2;
    -
    150 
    -
    156  typedef detail::tvec2<bool, mediump> mediump_bvec2;
    -
    157 
    -
    163  typedef detail::tvec2<bool, lowp> lowp_bvec2;
    -
    164 
    -
    166 
    -
    167 
    -
    170 
    -
    176  typedef detail::tvec3<float, highp> highp_vec3;
    -
    177 
    -
    183  typedef detail::tvec3<float, mediump> mediump_vec3;
    -
    184 
    -
    190  typedef detail::tvec3<float, lowp> lowp_vec3;
    -
    191 
    -
    197  typedef detail::tvec3<double, highp> highp_dvec3;
    -
    198 
    -
    204  typedef detail::tvec3<double, mediump> mediump_dvec3;
    -
    205 
    -
    211  typedef detail::tvec3<double, lowp> lowp_dvec3;
    -
    212 
    -
    218  typedef detail::tvec3<int, highp> highp_ivec3;
    -
    219 
    -
    225  typedef detail::tvec3<int, mediump> mediump_ivec3;
    -
    226 
    -
    232  typedef detail::tvec3<int, lowp> lowp_ivec3;
    -
    233 
    -
    239  typedef detail::tvec3<uint, highp> highp_uvec3;
    -
    240 
    -
    246  typedef detail::tvec3<uint, mediump> mediump_uvec3;
    -
    247 
    -
    253  typedef detail::tvec3<uint, lowp> lowp_uvec3;
    -
    254 
    -
    259  typedef detail::tvec3<bool, highp> highp_bvec3;
    -
    260 
    -
    265  typedef detail::tvec3<bool, mediump> mediump_bvec3;
    -
    266 
    -
    271  typedef detail::tvec3<bool, lowp> lowp_bvec3;
    -
    272 
    -
    274 
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 //#include "../fwd.hpp"
    +
    32 #include "type_vec.hpp"
    +
    33 #ifdef GLM_SWIZZLE
    +
    34 # if GLM_HAS_ANONYMOUS_UNION
    +
    35 # include "_swizzle.hpp"
    +
    36 # else
    +
    37 # include "_swizzle_func.hpp"
    +
    38 # endif
    +
    39 #endif //GLM_SWIZZLE
    +
    40 #include <cstddef>
    +
    41 
    +
    42 namespace glm
    +
    43 {
    +
    44  template <typename T, precision P = defaultp>
    +
    45  struct tvec2
    +
    46  {
    +
    48  // Implementation detail
    +
    49 
    +
    50  typedef tvec2<T, P> type;
    +
    51  typedef tvec2<bool, P> bool_type;
    +
    52  typedef T value_type;
    +
    53  typedef int size_type;
    +
    54 
    +
    56  // Helper
    +
    57 
    +
    58 # ifdef GLM_FORCE_SIZE_FUNC
    +
    59  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    61 # else
    +
    62  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    64 # endif//GLM_FORCE_SIZE_FUNC
    +
    65 
    +
    67  // Data
    +
    68 
    +
    69 # if GLM_HAS_ANONYMOUS_UNION
    +
    70  union
    +
    71  {
    +
    72  struct{ T x, y; };
    +
    73  struct{ T r, g; };
    +
    74  struct{ T s, t; };
    +
    75 
    +
    76 # ifdef GLM_SWIZZLE
    +
    77  _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, x, y)
    +
    78  _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, r, g)
    +
    79  _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, s, t)
    +
    80  _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, x, y)
    +
    81  _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, r, g)
    +
    82  _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, s, t)
    +
    83  _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, x, y)
    +
    84  _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, r, g)
    +
    85  _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, s, t)
    +
    86 # endif//GLM_SWIZZLE
    +
    87  };
    +
    88 # else
    +
    89  union {T x, r, s;};
    +
    90  union {T y, g, t;};
    +
    91 
    +
    92 # ifdef GLM_SWIZZLE
    +
    93  GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P, tvec2, tvec2, tvec3, tvec4)
    +
    94 # endif//GLM_SWIZZLE
    +
    95 # endif
    +
    96 
    +
    98  // Accesses
    +
    99 
    +
    100  GLM_FUNC_DECL T & operator[](length_t i);
    +
    101  GLM_FUNC_DECL T const & operator[](length_t i) const;
    +
    102 
    +
    104  // Implicit basic constructors
    +
    105 
    +
    106  GLM_FUNC_DECL tvec2();
    +
    107  template <precision Q>
    +
    108  GLM_FUNC_DECL tvec2(tvec2<T, Q> const & v);
    +
    109 
    +
    111  // Explicit basic constructors
    +
    112 
    +
    113  GLM_FUNC_DECL explicit tvec2(ctor);
    +
    114  GLM_FUNC_DECL explicit tvec2(T const & s);
    +
    115  GLM_FUNC_DECL tvec2(T const & s1, T const & s2);
    +
    116 
    +
    118  // Conversion constructors
    +
    119 
    +
    121  template <typename A, typename B>
    +
    122  GLM_FUNC_DECL tvec2(A const & x, B const & y);
    +
    123  template <typename A, typename B>
    +
    124  GLM_FUNC_DECL tvec2(tvec1<A, P> const & v1, tvec1<B, P> const & v2);
    +
    125 
    +
    127  // Conversion vector constructors
    +
    128 
    +
    130  template <typename U, precision Q>
    +
    131  GLM_FUNC_DECL explicit tvec2(tvec3<U, Q> const & v);
    +
    133  template <typename U, precision Q>
    +
    134  GLM_FUNC_DECL explicit tvec2(tvec4<U, Q> const & v);
    +
    135 
    +
    136 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    137  template <typename U, precision Q>
    +
    139  GLM_FUNC_DECL explicit tvec2(tvec2<U, Q> const & v);
    +
    140 # else
    +
    141  template <typename U, precision Q>
    +
    143  GLM_FUNC_DECL tvec2(tvec2<U, Q> const & v);
    +
    144 # endif
    +
    145 
    +
    147  // Swizzle constructors
    +
    148 
    +
    149 # if GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
    +
    150  template <int E0, int E1>
    +
    151  GLM_FUNC_DECL tvec2(detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1,-1,-2> const & that)
    +
    152  {
    +
    153  *this = that();
    +
    154  }
    +
    155 # endif// GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
    +
    156 
    +
    158  // Unary arithmetic operators
    +
    159 
    +
    160  template <typename U>
    +
    161  GLM_FUNC_DECL tvec2<T, P> & operator=(tvec2<U, P> const & v);
    +
    162  template <typename U>
    +
    163  GLM_FUNC_DECL tvec2<T, P> & operator+=(U s);
    +
    164  template <typename U>
    +
    165  GLM_FUNC_DECL tvec2<T, P> & operator+=(tvec1<U, P> const & v);
    +
    166  template <typename U>
    +
    167  GLM_FUNC_DECL tvec2<T, P> & operator+=(tvec2<U, P> const & v);
    +
    168  template <typename U>
    +
    169  GLM_FUNC_DECL tvec2<T, P> & operator-=(U s);
    +
    170  template <typename U>
    +
    171  GLM_FUNC_DECL tvec2<T, P> & operator-=(tvec1<U, P> const & v);
    +
    172  template <typename U>
    +
    173  GLM_FUNC_DECL tvec2<T, P> & operator-=(tvec2<U, P> const & v);
    +
    174  template <typename U>
    +
    175  GLM_FUNC_DECL tvec2<T, P> & operator*=(U s);
    +
    176  template <typename U>
    +
    177  GLM_FUNC_DECL tvec2<T, P> & operator*=(tvec1<U, P> const & v);
    +
    178  template <typename U>
    +
    179  GLM_FUNC_DECL tvec2<T, P> & operator*=(tvec2<U, P> const & v);
    +
    180  template <typename U>
    +
    181  GLM_FUNC_DECL tvec2<T, P> & operator/=(U s);
    +
    182  template <typename U>
    +
    183  GLM_FUNC_DECL tvec2<T, P> & operator/=(tvec1<U, P> const & v);
    +
    184  template <typename U>
    +
    185  GLM_FUNC_DECL tvec2<T, P> & operator/=(tvec2<U, P> const & v);
    +
    186 
    +
    188  // Increment and decrement operators
    +
    189 
    +
    190  GLM_FUNC_DECL tvec2<T, P> & operator++();
    +
    191  GLM_FUNC_DECL tvec2<T, P> & operator--();
    +
    192  GLM_FUNC_DECL tvec2<T, P> operator++(int);
    +
    193  GLM_FUNC_DECL tvec2<T, P> operator--(int);
    +
    194 
    +
    196  // Unary bit operators
    +
    197 
    +
    198  template <typename U>
    +
    199  GLM_FUNC_DECL tvec2<T, P> & operator%= (U s);
    +
    200  template <typename U>
    +
    201  GLM_FUNC_DECL tvec2<T, P> & operator%= (tvec1<U, P> const & v);
    +
    202  template <typename U>
    +
    203  GLM_FUNC_DECL tvec2<T, P> & operator%= (tvec2<U, P> const & v);
    +
    204  template <typename U>
    +
    205  GLM_FUNC_DECL tvec2<T, P> & operator&= (U s);
    +
    206  template <typename U>
    +
    207  GLM_FUNC_DECL tvec2<T, P> & operator&= (tvec1<U, P> const & v);
    +
    208  template <typename U>
    +
    209  GLM_FUNC_DECL tvec2<T, P> & operator&= (tvec2<U, P> const & v);
    +
    210  template <typename U>
    +
    211  GLM_FUNC_DECL tvec2<T, P> & operator|= (U s);
    +
    212  template <typename U>
    +
    213  GLM_FUNC_DECL tvec2<T, P> & operator|= (tvec1<U, P> const & v);
    +
    214  template <typename U>
    +
    215  GLM_FUNC_DECL tvec2<T, P> & operator|= (tvec2<U, P> const & v);
    +
    216  template <typename U>
    +
    217  GLM_FUNC_DECL tvec2<T, P> & operator^= (U s);
    +
    218  template <typename U>
    +
    219  GLM_FUNC_DECL tvec2<T, P> & operator^= (tvec1<U, P> const & v);
    +
    220  template <typename U>
    +
    221  GLM_FUNC_DECL tvec2<T, P> & operator^= (tvec2<U, P> const & v);
    +
    222  template <typename U>
    +
    223  GLM_FUNC_DECL tvec2<T, P> & operator<<=(U s);
    +
    224  template <typename U>
    +
    225  GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec1<U, P> const & v);
    +
    226  template <typename U>
    +
    227  GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec2<U, P> const & v);
    +
    228  template <typename U>
    +
    229  GLM_FUNC_DECL tvec2<T, P> & operator>>=(U s);
    +
    230  template <typename U>
    +
    231  GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec1<U, P> const & v);
    +
    232  template <typename U>
    +
    233  GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec2<U, P> const & v);
    +
    234  };
    +
    235 
    +
    236  template <typename T, precision P>
    +
    237  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v, T const & s);
    +
    238 
    +
    239  template <typename T, precision P>
    +
    240  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    +
    241 
    +
    242  template <typename T, precision P>
    +
    243  GLM_FUNC_DECL tvec2<T, P> operator+(T const & s, tvec2<T, P> const & v);
    +
    244 
    +
    245  template <typename T, precision P>
    +
    246  GLM_FUNC_DECL tvec2<T, P> operator+(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    +
    247 
    +
    248  template <typename T, precision P>
    +
    249  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    250 
    +
    251  template <typename T, precision P>
    +
    252  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v, T const & s);
    +
    253 
    +
    254  template <typename T, precision P>
    +
    255  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    +
    256 
    +
    257  template <typename T, precision P>
    +
    258  GLM_FUNC_DECL tvec2<T, P> operator-(T const & s, tvec2<T, P> const & v);
    +
    259 
    +
    260  template <typename T, precision P>
    +
    261  GLM_FUNC_DECL tvec2<T, P> operator-(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    +
    262 
    +
    263  template <typename T, precision P>
    +
    264  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    265 
    +
    266  template <typename T, precision P>
    +
    267  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v, T const & s);
    +
    268 
    +
    269  template <typename T, precision P>
    +
    270  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    +
    271 
    +
    272  template <typename T, precision P>
    +
    273  GLM_FUNC_DECL tvec2<T, P> operator*(T const & s, tvec2<T, P> const & v);
    +
    274 
    +
    275  template <typename T, precision P>
    +
    276  GLM_FUNC_DECL tvec2<T, P> operator*(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    277 
    -
    282  typedef detail::tvec4<float, highp> highp_vec4;
    -
    283 
    -
    288  typedef detail::tvec4<float, mediump> mediump_vec4;
    -
    289 
    -
    294  typedef detail::tvec4<float, lowp> lowp_vec4;
    -
    295 
    -
    300  typedef detail::tvec4<double, highp> highp_dvec4;
    -
    301 
    -
    306  typedef detail::tvec4<double, mediump> mediump_dvec4;
    -
    307 
    -
    312  typedef detail::tvec4<double, lowp> lowp_dvec4;
    -
    313 
    -
    318  typedef detail::tvec4<int, highp> highp_ivec4;
    -
    319 
    -
    324  typedef detail::tvec4<int, mediump> mediump_ivec4;
    -
    325 
    -
    330  typedef detail::tvec4<int, lowp> lowp_ivec4;
    -
    331 
    -
    336  typedef detail::tvec4<uint, highp> highp_uvec4;
    -
    337 
    -
    342  typedef detail::tvec4<uint, mediump> mediump_uvec4;
    -
    343 
    -
    348  typedef detail::tvec4<uint, lowp> lowp_uvec4;
    +
    278  template <typename T, precision P>
    +
    279  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    280 
    +
    281  template <typename T, precision P>
    +
    282  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v, T const & s);
    +
    283 
    +
    284  template <typename T, precision P>
    +
    285  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    +
    286 
    +
    287  template <typename T, precision P>
    +
    288  GLM_FUNC_DECL tvec2<T, P> operator/(T const & s, tvec2<T, P> const & v);
    +
    289 
    +
    290  template <typename T, precision P>
    +
    291  GLM_FUNC_DECL tvec2<T, P> operator/(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    +
    292 
    +
    293  template <typename T, precision P>
    +
    294  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    295 
    +
    296  template <typename T, precision P>
    +
    297  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v);
    +
    298 
    +
    299  template <typename T, precision P>
    +
    300  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v, T const & s);
    +
    301 
    +
    302  template <typename T, precision P>
    +
    303  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    +
    304 
    +
    305  template <typename T, precision P>
    +
    306  GLM_FUNC_DECL tvec2<T, P> operator%(T const & s, tvec2<T, P> const & v);
    +
    307 
    +
    308  template <typename T, precision P>
    +
    309  GLM_FUNC_DECL tvec2<T, P> operator%(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    +
    310 
    +
    311  template <typename T, precision P>
    +
    312  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    313 
    +
    314  template <typename T, precision P>
    +
    315  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v, T const & s);
    +
    316 
    +
    317  template <typename T, precision P>
    +
    318  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    +
    319 
    +
    320  template <typename T, precision P>
    +
    321  GLM_FUNC_DECL tvec2<T, P> operator&(T const & s, tvec2<T, P> const & v);
    +
    322 
    +
    323  template <typename T, precision P>
    +
    324  GLM_FUNC_DECL tvec2<T, P> operator&(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    +
    325 
    +
    326  template <typename T, precision P>
    +
    327  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    328 
    +
    329  template <typename T, precision P>
    +
    330  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v, T const & s);
    +
    331 
    +
    332  template <typename T, precision P>
    +
    333  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    +
    334 
    +
    335  template <typename T, precision P>
    +
    336  GLM_FUNC_DECL tvec2<T, P> operator|(T const & s, tvec2<T, P> const & v);
    +
    337 
    +
    338  template <typename T, precision P>
    +
    339  GLM_FUNC_DECL tvec2<T, P> operator|(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    +
    340 
    +
    341  template <typename T, precision P>
    +
    342  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    343 
    +
    344  template <typename T, precision P>
    +
    345  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v, T const & s);
    +
    346 
    +
    347  template <typename T, precision P>
    +
    348  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    349 
    -
    354  typedef detail::tvec4<bool, highp> highp_bvec4;
    -
    355 
    -
    360  typedef detail::tvec4<bool, mediump> mediump_bvec4;
    -
    361 
    -
    366  typedef detail::tvec4<bool, lowp> lowp_bvec4;
    -
    367 
    -
    369 
    -
    372 
    -
    374  // Default float definition
    -
    375 
    -
    376 #if(defined(GLM_PRECISION_LOWP_FLOAT))
    -
    377  typedef lowp_vec2 vec2;
    -
    378  typedef lowp_vec3 vec3;
    -
    379  typedef lowp_vec4 vec4;
    -
    380 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    -
    381  typedef mediump_vec2 vec2;
    -
    382  typedef mediump_vec3 vec3;
    -
    383  typedef mediump_vec4 vec4;
    -
    384 #else //defined(GLM_PRECISION_HIGHP_FLOAT)
    -
    385  typedef highp_vec2 vec2;
    -
    389 
    -
    393  typedef highp_vec3 vec3;
    -
    394 
    -
    398  typedef highp_vec4 vec4;
    -
    399 #endif//GLM_PRECISION
    -
    400 
    -
    402  // Default double definition
    -
    403 
    -
    404 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
    -
    405  typedef lowp_dvec2 dvec2;
    -
    406  typedef lowp_dvec3 dvec3;
    -
    407  typedef lowp_dvec4 dvec4;
    -
    408 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
    -
    409  typedef mediump_dvec2 dvec2;
    -
    410  typedef mediump_dvec3 dvec3;
    -
    411  typedef mediump_dvec4 dvec4;
    -
    412 #else //defined(GLM_PRECISION_HIGHP_DOUBLE)
    -
    413  typedef highp_dvec2 dvec2;
    -
    417 
    - -
    422 
    - -
    427 #endif//GLM_PRECISION
    -
    428 
    -
    430  // Signed integer definition
    -
    431 
    -
    432 #if(defined(GLM_PRECISION_LOWP_INT))
    -
    433  typedef lowp_ivec2 ivec2;
    -
    434  typedef lowp_ivec3 ivec3;
    -
    435  typedef lowp_ivec4 ivec4;
    -
    436 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    437  typedef mediump_ivec2 ivec2;
    -
    438  typedef mediump_ivec3 ivec3;
    -
    439  typedef mediump_ivec4 ivec4;
    -
    440 #else //defined(GLM_PRECISION_HIGHP_INT)
    -
    441  typedef highp_ivec2 ivec2;
    -
    445 
    - -
    450 
    - -
    455 #endif//GLM_PRECISION
    -
    456 
    -
    458  // Unsigned integer definition
    -
    459 
    -
    460 #if(defined(GLM_PRECISION_LOWP_UINT))
    -
    461  typedef lowp_uvec2 uvec2;
    -
    462  typedef lowp_uvec3 uvec3;
    -
    463  typedef lowp_uvec4 uvec4;
    -
    464 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    -
    465  typedef mediump_uvec2 uvec2;
    -
    466  typedef mediump_uvec3 uvec3;
    -
    467  typedef mediump_uvec4 uvec4;
    -
    468 #else //defined(GLM_PRECISION_HIGHP_UINT)
    -
    469  typedef highp_uvec2 uvec2;
    -
    473 
    - -
    478 
    - -
    483 #endif//GLM_PRECISION
    -
    484 
    -
    486  // Boolean definition
    -
    487 
    -
    488 #if(defined(GLM_PRECISION_LOWP_BOOL))
    -
    489  typedef lowp_bvec2 bvec2;
    -
    490  typedef lowp_bvec3 bvec3;
    -
    491  typedef lowp_bvec4 bvec4;
    -
    492 #elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
    -
    493  typedef mediump_bvec2 bvec2;
    -
    494  typedef mediump_bvec3 bvec3;
    -
    495  typedef mediump_bvec4 bvec4;
    -
    496 #else //defined(GLM_PRECISION_HIGHP_BOOL)
    -
    497  typedef highp_bvec2 bvec2;
    -
    501 
    - -
    506 
    - -
    511 #endif//GLM_PRECISION
    -
    512 
    -
    514 }//namespace glm
    -
    515 
    -
    516 #endif//glm_core_type_vec
    -
    highp_ivec4 ivec4
    4 components vector of signed integer numbers.
    Definition: type_vec.hpp:454
    -
    detail::tvec4< bool, highp > highp_bvec4
    4 components vector of high precision bool numbers.
    Definition: type_vec.hpp:354
    -
    detail::tvec2< uint, highp > highp_uvec2
    2 components vector of high precision unsigned integer numbers.
    Definition: type_vec.hpp:128
    -
    detail::tvec4< uint, highp > highp_uvec4
    4 components vector of high precision unsigned integer numbers.
    Definition: type_vec.hpp:336
    -
    highp_bvec3 bvec3
    3 components vector of boolean.
    Definition: type_vec.hpp:505
    -
    detail::tvec3< int, mediump > mediump_ivec3
    3 components vector of medium precision signed integer numbers.
    Definition: type_vec.hpp:225
    -
    highp_bvec2 bvec2
    2 components vector of boolean.
    Definition: type_vec.hpp:500
    -
    highp_vec3 vec3
    3 components vector of floating-point numbers.
    Definition: type_vec.hpp:393
    -
    highp_dvec3 dvec3
    3 components vector of double-precision floating-point numbers.
    Definition: type_vec.hpp:421
    -
    detail::tvec2< int, mediump > mediump_ivec2
    2 components vector of medium precision signed integer numbers.
    Definition: type_vec.hpp:114
    -
    detail::tvec4< double, lowp > lowp_dvec4
    4 components vector of low double-precision floating-point numbers.
    Definition: type_vec.hpp:312
    -
    highp_ivec2 ivec2
    2 components vector of signed integer numbers.
    Definition: type_vec.hpp:444
    -
    detail::tvec2< uint, lowp > lowp_uvec2
    2 components vector of low precision unsigned integer numbers.
    Definition: type_vec.hpp:142
    -
    highp_vec4 vec4
    4 components vector of floating-point numbers.
    Definition: type_vec.hpp:398
    -
    detail::tvec4< float, mediump > mediump_vec4
    4 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:288
    -
    detail::tvec2< bool, mediump > mediump_bvec2
    2 components vector of medium precision bool numbers.
    Definition: type_vec.hpp:156
    -
    detail::tvec4< bool, lowp > lowp_bvec4
    4 components vector of low precision bool numbers.
    Definition: type_vec.hpp:366
    -
    detail::tvec3< uint, lowp > lowp_uvec3
    3 components vector of low precision unsigned integer numbers.
    Definition: type_vec.hpp:253
    -
    detail::tvec3< float, lowp > lowp_vec3
    3 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:190
    -
    detail::tvec4< int, lowp > lowp_ivec4
    4 components vector of low precision signed integer numbers.
    Definition: type_vec.hpp:330
    -
    detail::tvec2< bool, highp > highp_bvec2
    2 components vector of high precision bool numbers.
    Definition: type_vec.hpp:149
    -
    detail::tvec4< double, highp > highp_dvec4
    4 components vector of high double-precision floating-point numbers.
    Definition: type_vec.hpp:300
    -
    detail::tvec4< uint, lowp > lowp_uvec4
    4 components vector of low precision unsigned integer numbers.
    Definition: type_vec.hpp:348
    -
    detail::tvec3< float, highp > highp_vec3
    3 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:176
    -
    highp_dvec2 dvec2
    2 components vector of double-precision floating-point numbers.
    Definition: type_vec.hpp:416
    -
    detail::tvec3< bool, mediump > mediump_bvec3
    3 components vector of medium precision bool numbers.
    Definition: type_vec.hpp:265
    -
    detail::tvec4< double, mediump > mediump_dvec4
    4 components vector of medium double-precision floating-point numbers.
    Definition: type_vec.hpp:306
    -
    detail::tvec2< double, highp > highp_dvec2
    2 components vector of high double-precision floating-point numbers.
    Definition: type_vec.hpp:86
    -
    detail::tvec3< uint, highp > highp_uvec3
    3 components vector of high precision unsigned integer numbers.
    Definition: type_vec.hpp:239
    -
    highp_ivec3 ivec3
    3 components vector of signed integer numbers.
    Definition: type_vec.hpp:449
    -
    detail::tvec3< uint, mediump > mediump_uvec3
    3 components vector of medium precision unsigned integer numbers.
    Definition: type_vec.hpp:246
    -
    detail::tvec4< bool, mediump > mediump_bvec4
    4 components vector of medium precision bool numbers.
    Definition: type_vec.hpp:360
    -
    detail::tvec3< bool, lowp > lowp_bvec3
    3 components vector of low precision bool numbers.
    Definition: type_vec.hpp:271
    -
    detail::tvec3< double, highp > highp_dvec3
    3 components vector of high double-precision floating-point numbers.
    Definition: type_vec.hpp:197
    -
    highp_uvec3 uvec3
    3 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:477
    -
    highp_dvec4 dvec4
    4 components vector of double-precision floating-point numbers.
    Definition: type_vec.hpp:426
    -
    detail::tvec2< uint, mediump > mediump_uvec2
    2 components vector of medium precision unsigned integer numbers.
    Definition: type_vec.hpp:135
    -
    detail::tvec2< int, lowp > lowp_ivec2
    2 components vector of low precision signed integer numbers.
    Definition: type_vec.hpp:121
    -
    detail::tvec2< bool, lowp > lowp_bvec2
    2 components vector of low precision bool numbers.
    Definition: type_vec.hpp:163
    -
    detail::tvec4< int, mediump > mediump_ivec4
    4 components vector of medium precision signed integer numbers.
    Definition: type_vec.hpp:324
    -
    detail::tvec2< double, lowp > lowp_dvec2
    2 components vector of low double-precision floating-point numbers.
    Definition: type_vec.hpp:100
    -
    detail::tvec2< float, highp > highp_vec2
    2 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:65
    -
    detail::tvec3< double, mediump > mediump_dvec3
    3 components vector of medium double-precision floating-point numbers.
    Definition: type_vec.hpp:204
    -
    detail::tvec3< double, lowp > lowp_dvec3
    3 components vector of low double-precision floating-point numbers.
    Definition: type_vec.hpp:211
    -
    detail::tvec2< float, lowp > lowp_vec2
    2 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:79
    -
    detail::tvec2< double, mediump > mediump_dvec2
    2 components vector of medium double-precision floating-point numbers.
    Definition: type_vec.hpp:93
    -
    highp_uvec4 uvec4
    4 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:482
    -
    detail::tvec3< int, lowp > lowp_ivec3
    3 components vector of low precision signed integer numbers.
    Definition: type_vec.hpp:232
    -
    highp_uvec2 uvec2
    2 components vector of unsigned integer numbers.
    Definition: type_vec.hpp:472
    -
    highp_bvec4 bvec4
    4 components vector of boolean.
    Definition: type_vec.hpp:510
    -
    detail::tvec2< int, highp > highp_ivec2
    2 components vector of high precision signed integer numbers.
    Definition: type_vec.hpp:107
    -
    detail::tvec4< float, lowp > lowp_vec4
    4 components vector of low single-precision floating-point numbers.
    Definition: type_vec.hpp:294
    -
    detail::tvec2< float, mediump > mediump_vec2
    2 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:72
    -
    highp_vec2 vec2
    2 components vector of floating-point numbers.
    Definition: type_vec.hpp:388
    -
    detail::tvec3< int, highp > highp_ivec3
    3 components vector of high precision signed integer numbers.
    Definition: type_vec.hpp:218
    -
    detail::tvec3< bool, highp > highp_bvec3
    3 components vector of high precision bool numbers.
    Definition: type_vec.hpp:259
    -
    detail::tvec4< float, highp > highp_vec4
    4 components vector of high single-precision floating-point numbers.
    Definition: type_vec.hpp:282
    -
    detail::tvec4< int, highp > highp_ivec4
    4 components vector of high precision signed integer numbers.
    Definition: type_vec.hpp:318
    -
    detail::tvec4< uint, mediump > mediump_uvec4
    4 components vector of medium precision unsigned integer numbers.
    Definition: type_vec.hpp:342
    -
    detail::tvec3< float, mediump > mediump_vec3
    3 components vector of medium single-precision floating-point numbers.
    Definition: type_vec.hpp:183
    +
    350  template <typename T, precision P>
    +
    351  GLM_FUNC_DECL tvec2<T, P> operator^(T const & s, tvec2<T, P> const & v);
    +
    352 
    +
    353  template <typename T, precision P>
    +
    354  GLM_FUNC_DECL tvec2<T, P> operator^(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    +
    355 
    +
    356  template <typename T, precision P>
    +
    357  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    358 
    +
    359  template <typename T, precision P>
    +
    360  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v, T const & s);
    +
    361 
    +
    362  template <typename T, precision P>
    +
    363  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    +
    364 
    +
    365  template <typename T, precision P>
    +
    366  GLM_FUNC_DECL tvec2<T, P> operator<<(T const & s, tvec2<T, P> const & v);
    +
    367 
    +
    368  template <typename T, precision P>
    +
    369  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    +
    370 
    +
    371  template <typename T, precision P>
    +
    372  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    373 
    +
    374  template <typename T, precision P>
    +
    375  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v, T const & s);
    +
    376 
    +
    377  template <typename T, precision P>
    +
    378  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
    +
    379 
    +
    380  template <typename T, precision P>
    +
    381  GLM_FUNC_DECL tvec2<T, P> operator>>(T const & s, tvec2<T, P> const & v);
    +
    382 
    +
    383  template <typename T, precision P>
    +
    384  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
    +
    385 
    +
    386  template <typename T, precision P>
    +
    387  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    388 
    +
    389  template <typename T, precision P>
    +
    390  GLM_FUNC_DECL tvec2<T, P> operator~(tvec2<T, P> const & v);
    +
    391 }//namespace glm
    +
    392 
    +
    393 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    394 #include "type_vec2.inl"
    +
    395 #endif//GLM_EXTERNAL_TEMPLATE
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00135.html b/doc/api/a00135.html new file mode 100644 index 00000000..e35ba04e --- /dev/null +++ b/doc/api/a00135.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_vec3.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_vec3.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2008-08-22 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_vec3.hpp.

    +
    + + + + diff --git a/doc/api/a00135_source.html b/doc/api/a00135_source.html index dd104ce6..4ab629db 100644 --- a/doc/api/a00135_source.html +++ b/doc/api/a00135_source.html @@ -3,8 +3,8 @@ - -GLM: type_vec1.hpp Source File + +0.9.6: type_vec3.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,265 +41,393 @@
    -
    type_vec1.hpp
    +
    type_vec3.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_gentype1
    -
    30 #define glm_core_type_gentype1
    -
    31 
    -
    32 #include "../fwd.hpp"
    -
    33 #include "type_vec.hpp"
    -
    34 #ifdef GLM_SWIZZLE
    -
    35 # if GLM_HAS_ANONYMOUS_UNION
    -
    36 # include "_swizzle.hpp"
    -
    37 # else
    -
    38 # include "_swizzle_func.hpp"
    -
    39 # endif
    -
    40 #endif //GLM_SWIZZLE
    -
    41 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    42 # include <initializer_list>
    -
    43 #endif //GLM_HAS_INITIALIZER_LISTS
    -
    44 #include <cstddef>
    -
    45 
    -
    46 namespace glm{
    -
    47 namespace detail
    -
    48 {
    -
    49  template <typename T, precision P>
    -
    50  struct tvec1
    -
    51  {
    -
    53  // Implementation detail
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 //#include "../fwd.hpp"
    +
    32 #include "type_vec.hpp"
    +
    33 #ifdef GLM_SWIZZLE
    +
    34 # if GLM_HAS_ANONYMOUS_UNION
    +
    35 # include "_swizzle.hpp"
    +
    36 # else
    +
    37 # include "_swizzle_func.hpp"
    +
    38 # endif
    +
    39 #endif //GLM_SWIZZLE
    +
    40 #include <cstddef>
    +
    41 
    +
    42 namespace glm
    +
    43 {
    +
    44  template <typename T, precision P = defaultp>
    +
    45  struct tvec3
    +
    46  {
    +
    48  // Implementation detail
    +
    49 
    +
    50  typedef tvec3<T, P> type;
    +
    51  typedef tvec3<bool, P> bool_type;
    +
    52  typedef T value_type;
    +
    53  typedef int size_type;
    54 
    -
    55  enum ctor{_null};
    -
    56 
    -
    57  typedef tvec1<T, P> type;
    -
    58  typedef tvec1<bool, P> bool_type;
    -
    59  typedef T value_type;
    -
    60 
    -
    62  // Helper
    -
    63 
    -
    64  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    56  // Helper
    +
    57 
    +
    58 # ifdef GLM_FORCE_SIZE_FUNC
    +
    59  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    61 # else
    +
    62  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    64 # endif//GLM_FORCE_SIZE_FUNC
    65 
    67  // Data
    68 
    -
    69  union {T x, r, s;};
    -
    70 
    -
    72  // Accesses
    -
    73 
    -
    74  GLM_FUNC_DECL T & operator[](length_t i);
    -
    75  GLM_FUNC_DECL T const & operator[](length_t i) const;
    -
    76 
    -
    78  // Implicit basic constructors
    -
    79 
    -
    80  GLM_FUNC_DECL tvec1();
    -
    81  GLM_FUNC_DECL tvec1(tvec1<T, P> const & v);
    -
    82  template <precision Q>
    -
    83  GLM_FUNC_DECL tvec1(tvec1<T, Q> const & v);
    -
    84 
    -
    85 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    86  template <typename U>
    -
    87  GLM_FUNC_DECL tvec1(std::initializer_list<U> const & v);
    -
    88 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    89 
    -
    91  // Explicit basic constructors
    +
    69 # if GLM_HAS_ANONYMOUS_UNION
    +
    70  union
    +
    71  {
    +
    72  struct{ T x, y, z; };
    +
    73  struct{ T r, g, b; };
    +
    74  struct{ T s, t, p; };
    +
    75 
    +
    76 # ifdef GLM_SWIZZLE
    +
    77  _GLM_SWIZZLE3_2_MEMBERS(T, P, tvec2, x, y, z)
    +
    78  _GLM_SWIZZLE3_2_MEMBERS(T, P, tvec2, r, g, b)
    +
    79  _GLM_SWIZZLE3_2_MEMBERS(T, P, tvec2, s, t, p)
    +
    80  _GLM_SWIZZLE3_3_MEMBERS(T, P, tvec3, x, y, z)
    +
    81  _GLM_SWIZZLE3_3_MEMBERS(T, P, tvec3, r, g, b)
    +
    82  _GLM_SWIZZLE3_3_MEMBERS(T, P, tvec3, s, t, p)
    +
    83  _GLM_SWIZZLE3_4_MEMBERS(T, P, tvec4, x, y, z)
    +
    84  _GLM_SWIZZLE3_4_MEMBERS(T, P, tvec4, r, g, b)
    +
    85  _GLM_SWIZZLE3_4_MEMBERS(T, P, tvec4, s, t, p)
    +
    86 # endif//GLM_SWIZZLE
    +
    87  };
    +
    88 # else
    +
    89  union { T x, r, s; };
    +
    90  union { T y, g, t; };
    +
    91  union { T z, b, p; };
    92 
    -
    93  GLM_FUNC_DECL explicit tvec1(
    -
    94  ctor);
    -
    95  GLM_FUNC_DECL tvec1(
    -
    96  T const & s);
    +
    93 # ifdef GLM_SWIZZLE
    +
    94  GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P, tvec3, tvec2, tvec3, tvec4)
    +
    95 # endif//GLM_SWIZZLE
    +
    96 # endif//GLM_LANG
    97 
    -
    99  // Conversion vector constructors
    -
    100 
    -
    102  template <typename U, precision Q>
    -
    103  GLM_FUNC_DECL explicit tvec1(tvec1<U, Q> const & v);
    -
    105  template <typename U, precision Q>
    -
    106  GLM_FUNC_DECL explicit tvec1(tvec2<U, Q> const & v);
    -
    108  template <typename U, precision Q>
    -
    109  GLM_FUNC_DECL explicit tvec1(tvec3<U, Q> const & v);
    -
    111  template <typename U, precision Q>
    -
    112  GLM_FUNC_DECL explicit tvec1(tvec4<U, Q> const & v);
    +
    99  // Accesses
    +
    100 
    +
    101  GLM_FUNC_DECL T & operator[](length_t i);
    +
    102  GLM_FUNC_DECL T const & operator[](length_t i) const;
    +
    103 
    +
    105  // Implicit basic constructors
    +
    106 
    +
    107  GLM_FUNC_DECL tvec3();
    +
    108  template <precision Q>
    +
    109  GLM_FUNC_DECL tvec3(tvec3<T, Q> const & v);
    +
    110 
    +
    112  // Explicit basic constructors
    113 
    -
    115  // Unary arithmetic operators
    -
    116 
    -
    117  GLM_FUNC_DECL tvec1<T, P> & operator= (tvec1<T, P> const & v);
    -
    118  template <typename U>
    -
    119  GLM_FUNC_DECL tvec1<T, P> & operator= (tvec1<U, P> const & v);
    +
    114  GLM_FUNC_DECL explicit tvec3(ctor);
    +
    115  GLM_FUNC_DECL explicit tvec3(T const & s);
    +
    116  GLM_FUNC_DECL tvec3(T const & a, T const & b, T const & c);
    +
    117 
    +
    119  // Conversion scalar constructors
    120 
    -
    121  template <typename U>
    -
    122  GLM_FUNC_DECL tvec1<T, P> & operator+=(U const & s);
    -
    123  template <typename U>
    -
    124  GLM_FUNC_DECL tvec1<T, P> & operator+=(tvec1<U, P> const & v);
    -
    125  template <typename U>
    -
    126  GLM_FUNC_DECL tvec1<T, P> & operator-=(U const & s);
    -
    127  template <typename U>
    -
    128  GLM_FUNC_DECL tvec1<T, P> & operator-=(tvec1<U, P> const & v);
    -
    129  template <typename U>
    -
    130  GLM_FUNC_DECL tvec1<T, P> & operator*=(U const & s);
    -
    131  template <typename U>
    -
    132  GLM_FUNC_DECL tvec1<T, P> & operator*=(tvec1<U, P> const & v);
    -
    133  template <typename U>
    -
    134  GLM_FUNC_DECL tvec1<T, P> & operator/=(U const & s);
    -
    135  template <typename U>
    -
    136  GLM_FUNC_DECL tvec1<T, P> & operator/=(tvec1<U, P> const & v);
    -
    137 
    -
    139  // Increment and decrement operators
    -
    140 
    -
    141  GLM_FUNC_DECL tvec1<T, P> & operator++();
    -
    142  GLM_FUNC_DECL tvec1<T, P> & operator--();
    -
    143  GLM_FUNC_DECL tvec1<T, P> operator++(int);
    -
    144  GLM_FUNC_DECL tvec1<T, P> operator--(int);
    +
    122  template <typename A, typename B, typename C>
    +
    123  GLM_FUNC_DECL tvec3(A const & a, B const & b, C const & c);
    +
    124  template <typename A, typename B, typename C>
    +
    125  GLM_FUNC_DECL tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c);
    +
    126 
    +
    128  // Conversion vector constructors
    +
    129 
    +
    131  template <typename A, typename B, precision Q>
    +
    132  GLM_FUNC_DECL explicit tvec3(tvec2<A, Q> const & a, B const & b);
    +
    134  template <typename A, typename B, precision Q>
    +
    135  GLM_FUNC_DECL explicit tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b);
    +
    137  template <typename A, typename B, precision Q>
    +
    138  GLM_FUNC_DECL explicit tvec3(A const & a, tvec2<B, Q> const & b);
    +
    140  template <typename A, typename B, precision Q>
    +
    141  GLM_FUNC_DECL explicit tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b);
    +
    143  template <typename U, precision Q>
    +
    144  GLM_FUNC_DECL explicit tvec3(tvec4<U, Q> const & v);
    145 
    -
    147  // Unary bit operators
    -
    148 
    -
    149  template <typename U>
    -
    150  GLM_FUNC_DECL tvec1<T, P> & operator%=(U const & s);
    -
    151  template <typename U>
    -
    152  GLM_FUNC_DECL tvec1<T, P> & operator%=(tvec1<U, P> const & v);
    -
    153  template <typename U>
    -
    154  GLM_FUNC_DECL tvec1<T, P> & operator&=(U const & s);
    -
    155  template <typename U>
    -
    156  GLM_FUNC_DECL tvec1<T, P> & operator&=(tvec1<U, P> const & v);
    -
    157  template <typename U>
    -
    158  GLM_FUNC_DECL tvec1<T, P> & operator|=(U const & s);
    -
    159  template <typename U>
    -
    160  GLM_FUNC_DECL tvec1<T, P> & operator|=(tvec1<U, P> const & v);
    -
    161  template <typename U>
    -
    162  GLM_FUNC_DECL tvec1<T, P> & operator^=(U const & s);
    -
    163  template <typename U>
    -
    164  GLM_FUNC_DECL tvec1<T, P> & operator^=(tvec1<U, P> const & v);
    -
    165  template <typename U>
    -
    166  GLM_FUNC_DECL tvec1<T, P> & operator<<=(U const & s);
    -
    167  template <typename U>
    -
    168  GLM_FUNC_DECL tvec1<T, P> & operator<<=(tvec1<U, P> const & v);
    -
    169  template <typename U>
    -
    170  GLM_FUNC_DECL tvec1<T, P> & operator>>=(U const & s);
    -
    171  template <typename U>
    -
    172  GLM_FUNC_DECL tvec1<T, P> & operator>>=(tvec1<U, P> const & v);
    -
    173  };
    -
    174 
    -
    175 
    -
    176  template <typename T, precision P>
    -
    177  GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v, T const & s);
    +
    146 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    147  template <typename U, precision Q>
    +
    149  GLM_FUNC_DECL explicit tvec3(tvec3<U, Q> const & v);
    +
    150 # else
    +
    151  template <typename U, precision Q>
    +
    153  GLM_FUNC_DECL tvec3(tvec3<U, Q> const & v);
    +
    154 # endif
    +
    155 
    +
    157  // Swizzle constructors
    +
    158 
    +
    159 # if GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
    +
    160  template <int E0, int E1, int E2>
    +
    161  GLM_FUNC_DECL tvec3(detail::_swizzle<3, T, P, tvec3<T, P>, E0, E1, E2, -1> const & that)
    +
    162  {
    +
    163  *this = that();
    +
    164  }
    +
    165 
    +
    166  template <int E0, int E1>
    +
    167  GLM_FUNC_DECL tvec3(detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v, T const & s)
    +
    168  {
    +
    169  *this = tvec3<T, P>(v(), s);
    +
    170  }
    +
    171 
    +
    172  template <int E0, int E1>
    +
    173  GLM_FUNC_DECL tvec3(T const & s, detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v)
    +
    174  {
    +
    175  *this = tvec3<T, P>(s, v());
    +
    176  }
    +
    177 # endif// GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
    178 
    -
    179  template <typename T, precision P>
    -
    180  GLM_FUNC_DECL tvec1<T, P> operator+(T const & s, tvec1<T, P> const & v);
    +
    180  // Unary arithmetic operators
    181 
    -
    182  template <typename T, precision P>
    -
    183  GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    184 
    -
    185  template <typename T, precision P>
    -
    186  GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v, T const & s);
    -
    187 
    -
    188  template <typename T, precision P>
    -
    189  GLM_FUNC_DECL tvec1<T, P> operator-(T const & s, tvec1<T, P> const & v);
    -
    190 
    -
    191  template <typename T, precision P>
    -
    192  GLM_FUNC_DECL tvec1<T, P> operator- (tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    193 
    -
    194  template <typename T, precision P>
    -
    195  GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v, T const & s);
    -
    196 
    -
    197  template <typename T, precision P>
    -
    198  GLM_FUNC_DECL tvec1<T, P> operator*(T const & s, tvec1<T, P> const & v);
    -
    199 
    -
    200  template <typename T, precision P>
    -
    201  GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    202 
    -
    203  template <typename T, precision P>
    -
    204  GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v, T const & s);
    -
    205 
    -
    206  template <typename T, precision P>
    -
    207  GLM_FUNC_DECL tvec1<T, P> operator/(T const & s, tvec1<T, P> const & v);
    +
    182  template <typename U>
    +
    183  GLM_FUNC_DECL tvec3<T, P> & operator=(tvec3<U, P> const & v);
    +
    184  template <typename U>
    +
    185  GLM_FUNC_DECL tvec3<T, P> & operator+=(U s);
    +
    186  template <typename U>
    +
    187  GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec1<U, P> const & v);
    +
    188  template <typename U>
    +
    189  GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec3<U, P> const & v);
    +
    190  template <typename U>
    +
    191  GLM_FUNC_DECL tvec3<T, P> & operator-=(U s);
    +
    192  template <typename U>
    +
    193  GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec1<U, P> const & v);
    +
    194  template <typename U>
    +
    195  GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec3<U, P> const & v);
    +
    196  template <typename U>
    +
    197  GLM_FUNC_DECL tvec3<T, P> & operator*=(U s);
    +
    198  template <typename U>
    +
    199  GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec1<U, P> const & v);
    +
    200  template <typename U>
    +
    201  GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec3<U, P> const & v);
    +
    202  template <typename U>
    +
    203  GLM_FUNC_DECL tvec3<T, P> & operator/=(U s);
    +
    204  template <typename U>
    +
    205  GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec1<U, P> const & v);
    +
    206  template <typename U>
    +
    207  GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec3<U, P> const & v);
    208 
    -
    209  template <typename T, precision P>
    -
    210  GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    +
    210  // Increment and decrement operators
    211 
    -
    212  template <typename T, precision P>
    -
    213  GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v);
    -
    214 
    -
    215  template <typename T, precision P>
    -
    216  GLM_FUNC_DECL bool operator==(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    217 
    -
    218  template <typename T, precision P>
    -
    219  GLM_FUNC_DECL bool operator!=(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    220 
    -
    221  template <typename T, precision P>
    -
    222  GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v, T const & s);
    -
    223 
    -
    224  template <typename T, precision P>
    -
    225  GLM_FUNC_DECL tvec1<T, P> operator%(T const & s, tvec1<T, P> const & v);
    -
    226 
    -
    227  template <typename T, precision P>
    -
    228  GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    229 
    -
    230  template <typename T, precision P>
    -
    231  GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v, T const & s);
    -
    232 
    -
    233  template <typename T, precision P>
    -
    234  GLM_FUNC_DECL tvec1<T, P> operator&(T const & s, tvec1<T, P> const & v);
    -
    235 
    -
    236  template <typename T, precision P>
    -
    237  GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    238 
    -
    239  template <typename T, precision P>
    -
    240  GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v, T const & s);
    -
    241 
    -
    242  template <typename T, precision P>
    -
    243  GLM_FUNC_DECL tvec1<T, P> operator|(T const & s, tvec1<T, P> const & v);
    -
    244 
    -
    245  template <typename T, precision P>
    -
    246  GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    247 
    -
    248  template <typename T, precision P>
    -
    249  GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v, T const & s);
    -
    250 
    -
    251  template <typename T, precision P>
    -
    252  GLM_FUNC_DECL tvec1<T, P> operator^(T const & s, tvec1<T, P> const & v);
    -
    253 
    -
    254  template <typename T, precision P>
    -
    255  GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    256 
    -
    257  template <typename T, precision P>
    -
    258  GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v, T const & s);
    -
    259 
    -
    260  template <typename T, precision P>
    -
    261  GLM_FUNC_DECL tvec1<T, P> operator<<(T const & s, tvec1<T, P> const & v);
    -
    262 
    -
    263  template <typename T, precision P>
    -
    264  GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    265 
    -
    266  template <typename T, precision P>
    -
    267  GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v, T const & s);
    -
    268 
    -
    269  template <typename T, precision P>
    -
    270  GLM_FUNC_DECL tvec1<T, P> operator>>(T const & s, tvec1<T, P> const & v);
    -
    271 
    -
    272  template <typename T, precision P>
    -
    273  GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
    -
    274 
    -
    275  template <typename T, precision P>
    -
    276  GLM_FUNC_DECL tvec1<T, P> operator~(tvec1<T, P> const & v);
    -
    277 
    -
    278 }//namespace detail
    -
    279 }//namespace glm
    -
    280 
    -
    281 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    282 #include "type_vec1.inl"
    -
    283 #endif//GLM_EXTERNAL_TEMPLATE
    -
    284 
    -
    285 #endif//glm_core_type_gentype1
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    212  GLM_FUNC_DECL tvec3<T, P> & operator++();
    +
    213  GLM_FUNC_DECL tvec3<T, P> & operator--();
    +
    214  GLM_FUNC_DECL tvec3<T, P> operator++(int);
    +
    215  GLM_FUNC_DECL tvec3<T, P> operator--(int);
    +
    216 
    +
    218  // Unary bit operators
    +
    219 
    +
    220  template <typename U>
    +
    221  GLM_FUNC_DECL tvec3<T, P> & operator%=(U s);
    +
    222  template <typename U>
    +
    223  GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec1<U, P> const & v);
    +
    224  template <typename U>
    +
    225  GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec3<U, P> const & v);
    +
    226  template <typename U>
    +
    227  GLM_FUNC_DECL tvec3<T, P> & operator&=(U s);
    +
    228  template <typename U>
    +
    229  GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec1<U, P> const & v);
    +
    230  template <typename U>
    +
    231  GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec3<U, P> const & v);
    +
    232  template <typename U>
    +
    233  GLM_FUNC_DECL tvec3<T, P> & operator|=(U s);
    +
    234  template <typename U>
    +
    235  GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec1<U, P> const & v);
    +
    236  template <typename U>
    +
    237  GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec3<U, P> const & v);
    +
    238  template <typename U>
    +
    239  GLM_FUNC_DECL tvec3<T, P> & operator^=(U s);
    +
    240  template <typename U>
    +
    241  GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec1<U, P> const & v);
    +
    242  template <typename U>
    +
    243  GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec3<U, P> const & v);
    +
    244  template <typename U>
    +
    245  GLM_FUNC_DECL tvec3<T, P> & operator<<=(U s);
    +
    246  template <typename U>
    +
    247  GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec1<U, P> const & v);
    +
    248  template <typename U>
    +
    249  GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec3<U, P> const & v);
    +
    250  template <typename U>
    +
    251  GLM_FUNC_DECL tvec3<T, P> & operator>>=(U s);
    +
    252  template <typename U>
    +
    253  GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec1<U, P> const & v);
    +
    254  template <typename U>
    +
    255  GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec3<U, P> const & v);
    +
    256  };
    +
    257 
    +
    258  template <typename T, precision P>
    +
    259  GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v, T const & s);
    +
    260 
    +
    261  template <typename T, precision P>
    +
    262  GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    263 
    +
    264  template <typename T, precision P>
    +
    265  GLM_FUNC_DECL tvec3<T, P> operator+(T const & s, tvec3<T, P> const & v);
    +
    266 
    +
    267  template <typename T, precision P>
    +
    268  GLM_FUNC_DECL tvec3<T, P> operator+(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    269 
    +
    270  template <typename T, precision P>
    +
    271  GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    272 
    +
    273  template <typename T, precision P>
    +
    274  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v, T const & s);
    +
    275 
    +
    276  template <typename T, precision P>
    +
    277  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    278 
    +
    279  template <typename T, precision P>
    +
    280  GLM_FUNC_DECL tvec3<T, P> operator-(T const & s, tvec3<T, P> const & v);
    +
    281 
    +
    282  template <typename T, precision P>
    +
    283  GLM_FUNC_DECL tvec3<T, P> operator-(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    284 
    +
    285  template <typename T, precision P>
    +
    286  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    287 
    +
    288  template <typename T, precision P>
    +
    289  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, T const & s);
    +
    290 
    +
    291  template <typename T, precision P>
    +
    292  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    293 
    +
    294  template <typename T, precision P>
    +
    295  GLM_FUNC_DECL tvec3<T, P> operator*(T const & s, tvec3<T, P> const & v);
    +
    296 
    +
    297  template <typename T, precision P>
    +
    298  GLM_FUNC_DECL tvec3<T, P> operator*(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    299 
    +
    300  template <typename T, precision P>
    +
    301  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    302 
    +
    303  template <typename T, precision P>
    +
    304  GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v, T const & s);
    +
    305 
    +
    306  template <typename T, precision P>
    +
    307  GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    308 
    +
    309  template <typename T, precision P>
    +
    310  GLM_FUNC_DECL tvec3<T, P> operator/(T const & s, tvec3<T, P> const & v);
    +
    311 
    +
    312  template <typename T, precision P>
    +
    313  GLM_FUNC_DECL tvec3<T, P> operator/(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    314 
    +
    315  template <typename T, precision P>
    +
    316  GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    317 
    +
    318  template <typename T, precision P>
    +
    319  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v);
    +
    320 
    +
    321  template <typename T, precision P>
    +
    322  GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v, T const & s);
    +
    323 
    +
    324  template <typename T, precision P>
    +
    325  GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    326 
    +
    327  template <typename T, precision P>
    +
    328  GLM_FUNC_DECL tvec3<T, P> operator%(T const & s, tvec3<T, P> const & v);
    +
    329 
    +
    330  template <typename T, precision P>
    +
    331  GLM_FUNC_DECL tvec3<T, P> operator%(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    332 
    +
    333  template <typename T, precision P>
    +
    334  GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    335 
    +
    336  template <typename T, precision P>
    +
    337  GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v, T const & s);
    +
    338 
    +
    339  template <typename T, precision P>
    +
    340  GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    341 
    +
    342  template <typename T, precision P>
    +
    343  GLM_FUNC_DECL tvec3<T, P> operator&(T const & s, tvec3<T, P> const & v);
    +
    344 
    +
    345  template <typename T, precision P>
    +
    346  GLM_FUNC_DECL tvec3<T, P> operator&(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    347 
    +
    348  template <typename T, precision P>
    +
    349  GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    350 
    +
    351  template <typename T, precision P>
    +
    352  GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v, T const & s);
    +
    353 
    +
    354  template <typename T, precision P>
    +
    355  GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    356 
    +
    357  template <typename T, precision P>
    +
    358  GLM_FUNC_DECL tvec3<T, P> operator|(T const & s, tvec3<T, P> const & v);
    +
    359 
    +
    360  template <typename T, precision P>
    +
    361  GLM_FUNC_DECL tvec3<T, P> operator|(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    362 
    +
    363  template <typename T, precision P>
    +
    364  GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    365 
    +
    366  template <typename T, precision P>
    +
    367  GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v, T const & s);
    +
    368 
    +
    369  template <typename T, precision P>
    +
    370  GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    371 
    +
    372  template <typename T, precision P>
    +
    373  GLM_FUNC_DECL tvec3<T, P> operator^(T const & s, tvec3<T, P> const & v);
    +
    374 
    +
    375  template <typename T, precision P>
    +
    376  GLM_FUNC_DECL tvec3<T, P> operator^(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    377 
    +
    378  template <typename T, precision P>
    +
    379  GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    380 
    +
    381  template <typename T, precision P>
    +
    382  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v, T const & s);
    +
    383 
    +
    384  template <typename T, precision P>
    +
    385  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    386 
    +
    387  template <typename T, precision P>
    +
    388  GLM_FUNC_DECL tvec3<T, P> operator<<(T const & s, tvec3<T, P> const & v);
    +
    389 
    +
    390  template <typename T, precision P>
    +
    391  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    392 
    +
    393  template <typename T, precision P>
    +
    394  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    395 
    +
    396  template <typename T, precision P>
    +
    397  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v, T const & s);
    +
    398 
    +
    399  template <typename T, precision P>
    +
    400  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v, tvec1<T, P> const & s);
    +
    401 
    +
    402  template <typename T, precision P>
    +
    403  GLM_FUNC_DECL tvec3<T, P> operator>>(T const & s, tvec3<T, P> const & v);
    +
    404 
    +
    405  template <typename T, precision P>
    +
    406  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec1<T, P> const & s, tvec3<T, P> const & v);
    +
    407 
    +
    408  template <typename T, precision P>
    +
    409  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    +
    410 
    +
    411  template <typename T, precision P>
    +
    412  GLM_FUNC_DECL tvec3<T, P> operator~(tvec3<T, P> const & v);
    +
    413 }//namespace glm
    +
    414 
    +
    415 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    416 #include "type_vec3.inl"
    +
    417 #endif//GLM_EXTERNAL_TEMPLATE
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00136.html b/doc/api/a00136.html new file mode 100644 index 00000000..036ee938 --- /dev/null +++ b/doc/api/a00136.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: type_vec4.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    type_vec4.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2008-08-22 / 2011-06-15
    +
    Author
    Christophe Riccio
    + +

    Definition in file type_vec4.hpp.

    +
    + + + + diff --git a/doc/api/a00136_source.html b/doc/api/a00136_source.html index a3978312..861e252c 100644 --- a/doc/api/a00136_source.html +++ b/doc/api/a00136_source.html @@ -3,8 +3,8 @@ - -GLM: type_vec2.hpp Source File + +0.9.6: type_vec4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,301 +41,491 @@
    -
    type_vec2.hpp
    +
    type_vec4.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_gentype2
    -
    30 #define glm_core_type_gentype2
    -
    31 
    -
    32 //#include "../fwd.hpp"
    -
    33 #include "type_vec.hpp"
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 //#include "../fwd.hpp"
    +
    32 #include "setup.hpp"
    +
    33 #include "type_vec.hpp"
    34 #ifdef GLM_SWIZZLE
    -
    35 # if GLM_HAS_ANONYMOUS_UNION
    -
    36 # include "_swizzle.hpp"
    +
    35 # if GLM_HAS_ANONYMOUS_UNION
    +
    36 # include "_swizzle.hpp"
    37 # else
    -
    38 # include "_swizzle_func.hpp"
    +
    38 # include "_swizzle_func.hpp"
    39 # endif
    -
    40 #endif //GLM_SWIZZLE
    -
    41 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    42 # include <initializer_list>
    -
    43 #endif //GLM_HAS_INITIALIZER_LISTS
    -
    44 #include <cstddef>
    -
    45 
    -
    46 namespace glm{
    -
    47 namespace detail
    -
    48 {
    -
    49  template <typename T, precision P>
    -
    50  struct tvec2
    -
    51  {
    -
    53  // Implementation detail
    -
    54 
    -
    55  enum ctor{_null};
    -
    56 
    -
    57  typedef tvec2<T, P> type;
    -
    58  typedef tvec2<bool, P> bool_type;
    -
    59  typedef T value_type;
    -
    60  typedef int size_type;
    -
    61 
    -
    63  // Helper
    +
    40 #endif //GLM_SWIZZLE
    +
    41 #include <cstddef>
    +
    42 
    +
    43 namespace glm{
    +
    44 namespace detail
    +
    45 {
    +
    46  template <typename T>
    +
    47  struct simd
    +
    48  {
    +
    49  typedef T type[4];
    +
    50  };
    +
    51 
    +
    52 # if GLM_ARCH & GLM_ARCH_SSE2
    +
    53  template <>
    +
    54  struct simd<float>
    +
    55  {
    +
    56  typedef __m128 type;
    +
    57  };
    +
    58 
    +
    59  template <>
    +
    60  struct simd<int>
    +
    61  {
    +
    62  typedef __m128i type;
    +
    63  };
    64 
    -
    65  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    66 
    -
    68  // Data
    -
    69 
    -
    70 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    -
    71  union
    -
    72  {
    -
    73  struct{ T x, y; };
    -
    74  struct{ T r, g; };
    -
    75  struct{ T s, t; };
    -
    76 
    -
    77  _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, x, y)
    -
    78  _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, r, g)
    -
    79  _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, s, t)
    -
    80  _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, x, y)
    -
    81  _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, r, g)
    -
    82  _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, s, t)
    -
    83  _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, x, y)
    -
    84  _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, r, g)
    -
    85  _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, s, t)
    -
    86  };
    -
    87 # else
    -
    88  union {T x, r, s;};
    -
    89  union {T y, g, t;};
    -
    90 
    -
    91 # ifdef GLM_SWIZZLE
    -
    92  GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4)
    -
    93 # endif
    -
    94 # endif
    -
    95 
    -
    97  // Accesses
    -
    98 
    -
    99  GLM_FUNC_DECL T & operator[](length_t i);
    -
    100  GLM_FUNC_DECL T const & operator[](length_t i) const;
    +
    65  template <>
    +
    66  struct simd<unsigned int>
    +
    67  {
    +
    68  typedef __m128i type;
    +
    69  };
    +
    70 # endif
    +
    71 
    +
    72 # if GLM_ARCH & GLM_ARCH_AVX
    +
    73  template <>
    +
    74  struct simd<double>
    +
    75  {
    +
    76  typedef __m256d type;
    +
    77  };
    +
    78 # endif
    +
    79 
    +
    80 # if GLM_ARCH & GLM_ARCH_AVX2
    +
    81  template <>
    +
    82  struct simd<int64>
    +
    83  {
    +
    84  typedef __m256i type;
    +
    85  };
    +
    86 
    +
    87  template <>
    +
    88  struct simd<uint64>
    +
    89  {
    +
    90  typedef __m256i type;
    +
    91  };
    +
    92 # endif
    +
    93 
    +
    94 }//namespace detail
    +
    95 
    +
    96  template <typename T, precision P = defaultp>
    +
    97  struct tvec4
    +
    98  {
    +
    100  // Implementation detail
    101 
    -
    103  // Implicit basic constructors
    -
    104 
    -
    105  GLM_FUNC_DECL tvec2();
    -
    106  GLM_FUNC_DECL tvec2(tvec2<T, P> const & v);
    -
    107  template <precision Q>
    -
    108  GLM_FUNC_DECL tvec2(tvec2<T, Q> const & v);
    +
    102  typedef tvec4<T, P> type;
    +
    103  typedef tvec4<bool, P> bool_type;
    +
    104  typedef T value_type;
    +
    105  typedef int size_type;
    +
    106 
    +
    108  // Helper
    109 
    -
    110 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    111  template <typename U>
    -
    112  GLM_FUNC_DECL tvec2(std::initializer_list<U> const & v);
    -
    113 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    114 
    -
    116  // Explicit basic constructors
    +
    110 # ifdef GLM_FORCE_SIZE_FUNC
    +
    111  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
    +
    113 # else
    +
    114  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    +
    116 # endif//GLM_FORCE_SIZE_FUNC
    117 
    -
    118  GLM_FUNC_DECL explicit tvec2(
    -
    119  ctor);
    -
    120  GLM_FUNC_DECL explicit tvec2(
    -
    121  T const & s);
    -
    122  GLM_FUNC_DECL explicit tvec2(
    -
    123  T const & s1,
    -
    124  T const & s2);
    -
    125 
    -
    127  // Swizzle constructors
    +
    119  // Data
    +
    120 
    +
    121 # if GLM_HAS_ANONYMOUS_UNION
    +
    122  union
    +
    123  {
    +
    124  typename detail::simd<T>::type data;
    +
    125  struct { T r, g, b, a; };
    +
    126  struct { T s, t, p, q; };
    +
    127  struct { T x, y, z, w;};
    128 
    -
    129 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    -
    130  template <int E0, int E1>
    -
    131  GLM_FUNC_DECL tvec2(_swizzle<2,T, P, tvec2<T, P>, E0, E1,-1,-2> const & that)
    -
    132  {
    -
    133  *this = that();
    -
    134  }
    -
    135 # endif//(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    -
    136 
    -
    138  // Conversion constructors
    -
    139 
    -
    141  template <typename U, typename V>
    -
    142  GLM_FUNC_DECL explicit tvec2(
    -
    143  U const & x,
    -
    144  V const & y);
    -
    145 
    -
    147  // Conversion vector constructors
    -
    148 
    -
    150  template <typename U, precision Q>
    -
    151  GLM_FUNC_DECL explicit tvec2(tvec2<U, Q> const & v);
    -
    153  template <typename U, precision Q>
    -
    154  GLM_FUNC_DECL explicit tvec2(tvec3<U, Q> const & v);
    -
    156  template <typename U, precision Q>
    -
    157  GLM_FUNC_DECL explicit tvec2(tvec4<U, Q> const & v);
    -
    158 
    -
    160  // Unary arithmetic operators
    -
    161 
    -
    162  GLM_FUNC_DECL tvec2<T, P> & operator= (tvec2<T, P> const & v);
    -
    163  template <typename U>
    -
    164  GLM_FUNC_DECL tvec2<T, P> & operator= (tvec2<U, P> const & v);
    -
    165 
    -
    166  template <typename U>
    -
    167  GLM_FUNC_DECL tvec2<T, P> & operator+=(U s);
    -
    168  template <typename U>
    -
    169  GLM_FUNC_DECL tvec2<T, P> & operator+=(tvec2<U, P> const & v);
    -
    170  template <typename U>
    -
    171  GLM_FUNC_DECL tvec2<T, P> & operator-=(U s);
    -
    172  template <typename U>
    -
    173  GLM_FUNC_DECL tvec2<T, P> & operator-=(tvec2<U, P> const & v);
    -
    174  template <typename U>
    -
    175  GLM_FUNC_DECL tvec2<T, P> & operator*=(U s);
    -
    176  template <typename U>
    -
    177  GLM_FUNC_DECL tvec2<T, P> & operator*=(tvec2<U, P> const & v);
    -
    178  template <typename U>
    -
    179  GLM_FUNC_DECL tvec2<T, P> & operator/=(U s);
    -
    180  template <typename U>
    -
    181  GLM_FUNC_DECL tvec2<T, P> & operator/=(tvec2<U, P> const & v);
    -
    182 
    -
    184  // Increment and decrement operators
    -
    185 
    -
    186  GLM_FUNC_DECL tvec2<T, P> & operator++();
    -
    187  GLM_FUNC_DECL tvec2<T, P> & operator--();
    -
    188  GLM_FUNC_DECL tvec2<T, P> operator++(int);
    -
    189  GLM_FUNC_DECL tvec2<T, P> operator--(int);
    -
    190 
    -
    192  // Unary bit operators
    -
    193 
    -
    194  template <typename U>
    -
    195  GLM_FUNC_DECL tvec2<T, P> & operator%= (U s);
    -
    196  template <typename U>
    -
    197  GLM_FUNC_DECL tvec2<T, P> & operator%= (tvec2<U, P> const & v);
    -
    198  template <typename U>
    -
    199  GLM_FUNC_DECL tvec2<T, P> & operator&= (U s);
    -
    200  template <typename U>
    -
    201  GLM_FUNC_DECL tvec2<T, P> & operator&= (tvec2<U, P> const & v);
    -
    202  template <typename U>
    -
    203  GLM_FUNC_DECL tvec2<T, P> & operator|= (U s);
    -
    204  template <typename U>
    -
    205  GLM_FUNC_DECL tvec2<T, P> & operator|= (tvec2<U, P> const & v);
    -
    206  template <typename U>
    -
    207  GLM_FUNC_DECL tvec2<T, P> & operator^= (U s);
    -
    208  template <typename U>
    -
    209  GLM_FUNC_DECL tvec2<T, P> & operator^= (tvec2<U, P> const & v);
    -
    210  template <typename U>
    -
    211  GLM_FUNC_DECL tvec2<T, P> & operator<<=(U s);
    -
    212  template <typename U>
    -
    213  GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec2<U, P> const & v);
    -
    214  template <typename U>
    -
    215  GLM_FUNC_DECL tvec2<T, P> & operator>>=(U s);
    -
    216  template <typename U>
    -
    217  GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec2<U, P> const & v);
    -
    218  };
    -
    219 
    -
    220  template <typename T, precision P>
    -
    221  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v, T const & s);
    -
    222 
    -
    223  template <typename T, precision P>
    -
    224  GLM_FUNC_DECL tvec2<T, P> operator+(T const & s, tvec2<T, P> const & v);
    -
    225 
    -
    226  template <typename T, precision P>
    -
    227  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    +
    129 # ifdef GLM_SWIZZLE
    +
    130  _GLM_SWIZZLE4_2_MEMBERS(T, P, tvec2, x, y, z, w)
    +
    131  _GLM_SWIZZLE4_2_MEMBERS(T, P, tvec2, r, g, b, a)
    +
    132  _GLM_SWIZZLE4_2_MEMBERS(T, P, tvec2, s, t, p, q)
    +
    133  _GLM_SWIZZLE4_3_MEMBERS(T, P, tvec3, x, y, z, w)
    +
    134  _GLM_SWIZZLE4_3_MEMBERS(T, P, tvec3, r, g, b, a)
    +
    135  _GLM_SWIZZLE4_3_MEMBERS(T, P, tvec3, s, t, p, q)
    +
    136  _GLM_SWIZZLE4_4_MEMBERS(T, P, tvec4, x, y, z, w)
    +
    137  _GLM_SWIZZLE4_4_MEMBERS(T, P, tvec4, r, g, b, a)
    +
    138  _GLM_SWIZZLE4_4_MEMBERS(T, P, tvec4, s, t, p, q)
    +
    139 # endif//GLM_SWIZZLE
    +
    140  };
    +
    141 # else
    +
    142  union { T x, r, s; };
    +
    143  union { T y, g, t; };
    +
    144  union { T z, b, p; };
    +
    145  union { T w, a, q; };
    +
    146 
    +
    147 # ifdef GLM_SWIZZLE
    +
    148  GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P, tvec4, tvec2, tvec3, tvec4)
    +
    149 # endif//GLM_SWIZZLE
    +
    150 # endif//GLM_LANG
    +
    151 
    +
    153  // Accesses
    +
    154 
    +
    155  GLM_FUNC_DECL T & operator[](length_t i);
    +
    156  GLM_FUNC_DECL T const & operator[](length_t i) const;
    +
    157 
    +
    159  // Implicit basic constructors
    +
    160 
    +
    161  GLM_FUNC_DECL tvec4();
    +
    162  template <precision Q>
    +
    163  GLM_FUNC_DECL tvec4(tvec4<T, Q> const & v);
    +
    164 
    +
    166  // Explicit basic constructors
    +
    167 
    +
    168  GLM_FUNC_DECL explicit tvec4(ctor);
    +
    169  GLM_FUNC_DECL explicit tvec4(T s);
    +
    170  GLM_FUNC_DECL tvec4(T a, T b, T c, T d);
    +
    171  GLM_FUNC_DECL ~tvec4(){}
    +
    172 
    +
    174  // Conversion scalar constructors
    +
    175 
    +
    177  template <typename A, typename B, typename C, typename D>
    +
    178  GLM_FUNC_DECL tvec4(A a, B b, C c, D d);
    +
    179  template <typename A, typename B, typename C, typename D>
    +
    180  GLM_FUNC_DECL tvec4(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c, tvec1<D, P> const & d);
    +
    181 
    +
    183  // Conversion vector constructors
    +
    184 
    +
    186  template <typename A, typename B, typename C, precision Q>
    +
    187  GLM_FUNC_DECL explicit tvec4(tvec2<A, Q> const & a, B b, C c);
    +
    189  template <typename A, typename B, typename C, precision Q>
    +
    190  GLM_FUNC_DECL explicit tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c);
    +
    192  template <typename A, typename B, typename C, precision Q>
    +
    193  GLM_FUNC_DECL explicit tvec4(A a, tvec2<B, Q> const & b, C c);
    +
    195  template <typename A, typename B, typename C, precision Q>
    +
    196  GLM_FUNC_DECL explicit tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c);
    +
    198  template <typename A, typename B, typename C, precision Q>
    +
    199  GLM_FUNC_DECL explicit tvec4(A a, B b, tvec2<C, Q> const & c);
    +
    201  template <typename A, typename B, typename C, precision Q>
    +
    202  GLM_FUNC_DECL explicit tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c);
    +
    204  template <typename A, typename B, precision Q>
    +
    205  GLM_FUNC_DECL explicit tvec4(tvec3<A, Q> const & a, B b);
    +
    207  template <typename A, typename B, precision Q>
    +
    208  GLM_FUNC_DECL explicit tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b);
    +
    210  template <typename A, typename B, precision Q>
    +
    211  GLM_FUNC_DECL explicit tvec4(A a, tvec3<B, Q> const & b);
    +
    213  template <typename A, typename B, precision Q>
    +
    214  GLM_FUNC_DECL explicit tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b);
    +
    216  template <typename A, typename B, precision Q>
    +
    217  GLM_FUNC_DECL explicit tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b);
    +
    218 
    +
    219 # ifdef GLM_FORCE_EXPLICIT_CTOR
    +
    220  template <typename U, precision Q>
    +
    222  GLM_FUNC_DECL explicit tvec4(tvec4<U, Q> const & v);
    +
    223 # else
    +
    224  template <typename U, precision Q>
    +
    226  GLM_FUNC_DECL tvec4(tvec4<U, Q> const & v);
    +
    227 # endif
    228 
    -
    229  template <typename T, precision P>
    -
    230  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v, T const & s);
    +
    230  // Swizzle constructors
    231 
    -
    232  template <typename T, precision P>
    -
    233  GLM_FUNC_DECL tvec2<T, P> operator-(T const & s, tvec2<T, P> const & v);
    -
    234 
    -
    235  template <typename T, precision P>
    -
    236  GLM_FUNC_DECL tvec2<T, P> operator- (tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    -
    237 
    -
    238  template <typename T, precision P>
    -
    239  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v, T const & s);
    -
    240 
    -
    241  template <typename T, precision P>
    -
    242  GLM_FUNC_DECL tvec2<T, P> operator*(T const & s, tvec2<T, P> const & v);
    -
    243 
    -
    244  template <typename T, precision P>
    -
    245  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    -
    246 
    -
    247  template <typename T, precision P>
    -
    248  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v, T const & s);
    -
    249 
    -
    250  template <typename T, precision P>
    -
    251  GLM_FUNC_DECL tvec2<T, P> operator/(T const & s, tvec2<T, P> const & v);
    -
    252 
    -
    253  template <typename T, precision P>
    -
    254  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    -
    255 
    -
    256  template <typename T, precision P>
    -
    257  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v);
    -
    258 
    -
    259  template <typename T, precision P>
    -
    260  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v, T const & s);
    -
    261 
    -
    262  template <typename T, precision P>
    -
    263  GLM_FUNC_DECL tvec2<T, P> operator%(T const & s, tvec2<T, P> const & v);
    -
    264 
    -
    265  template <typename T, precision P>
    -
    266  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    -
    267 
    -
    268  template <typename T, precision P>
    -
    269  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v, T const & s);
    -
    270 
    -
    271  template <typename T, precision P>
    -
    272  GLM_FUNC_DECL tvec2<T, P> operator&(T const & s, tvec2<T, P> const & v);
    -
    273 
    -
    274  template <typename T, precision P>
    -
    275  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    -
    276 
    -
    277  template <typename T, precision P>
    -
    278  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v, T const & s);
    -
    279 
    -
    280  template <typename T, precision P>
    -
    281  GLM_FUNC_DECL tvec2<T, P> operator|(T const & s, tvec2<T, P> const & v);
    -
    282 
    -
    283  template <typename T, precision P>
    -
    284  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    -
    285 
    -
    286  template <typename T, precision P>
    -
    287  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v, T const & s);
    -
    288 
    -
    289  template <typename T, precision P>
    -
    290  GLM_FUNC_DECL tvec2<T, P> operator^(T const & s, tvec2<T, P> const & v);
    -
    291 
    -
    292  template <typename T, precision P>
    -
    293  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    -
    294 
    -
    295  template <typename T, precision P>
    -
    296  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v, T const & s);
    -
    297 
    -
    298  template <typename T, precision P>
    -
    299  GLM_FUNC_DECL tvec2<T, P> operator<<(T const & s, tvec2<T, P> const & v);
    -
    300 
    -
    301  template <typename T, precision P>
    -
    302  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    -
    303 
    -
    304  template <typename T, precision P>
    -
    305  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v, T const & s);
    -
    306 
    -
    307  template <typename T, precision P>
    -
    308  GLM_FUNC_DECL tvec2<T, P> operator>>(T const & s, tvec2<T, P> const & v);
    -
    309 
    -
    310  template <typename T, precision P>
    -
    311  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
    -
    312 
    -
    313  template <typename T, precision P>
    -
    314  GLM_FUNC_DECL tvec2<T, P> operator~(tvec2<T, P> const & v);
    -
    315 
    -
    316 }//namespace detail
    -
    317 }//namespace glm
    -
    318 
    -
    319 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    320 #include "type_vec2.inl"
    -
    321 #endif//GLM_EXTERNAL_TEMPLATE
    -
    322 
    -
    323 #endif//glm_core_type_gentype2
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    232 # if GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
    +
    233  template <int E0, int E1, int E2, int E3>
    +
    234  GLM_FUNC_DECL tvec4(detail::_swizzle<4, T, P, tvec4<T, P>, E0, E1, E2, E3> const & that)
    +
    235  {
    +
    236  *this = that();
    +
    237  }
    +
    238 
    +
    239  template <int E0, int E1, int F0, int F1>
    +
    240  GLM_FUNC_DECL tvec4(detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v, detail::_swizzle<2, T, P, tvec2<T, P>, F0, F1, -1, -2> const & u)
    +
    241  {
    +
    242  *this = tvec4<T, P>(v(), u());
    +
    243  }
    +
    244 
    +
    245  template <int E0, int E1>
    +
    246  GLM_FUNC_DECL tvec4(T const & x, T const & y, detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v)
    +
    247  {
    +
    248  *this = tvec4<T, P>(x, y, v());
    +
    249  }
    +
    250 
    +
    251  template <int E0, int E1>
    +
    252  GLM_FUNC_DECL tvec4(T const & x, detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v, T const & w)
    +
    253  {
    +
    254  *this = tvec4<T, P>(x, v(), w);
    +
    255  }
    +
    256 
    +
    257  template <int E0, int E1>
    +
    258  GLM_FUNC_DECL tvec4(detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v, T const & z, T const & w)
    +
    259  {
    +
    260  *this = tvec4<T, P>(v(), z, w);
    +
    261  }
    +
    262 
    +
    263  template <int E0, int E1, int E2>
    +
    264  GLM_FUNC_DECL tvec4(detail::_swizzle<3, T, P, tvec3<T, P>, E0, E1, E2, -1> const & v, T const & w)
    +
    265  {
    +
    266  *this = tvec4<T, P>(v(), w);
    +
    267  }
    +
    268 
    +
    269  template <int E0, int E1, int E2>
    +
    270  GLM_FUNC_DECL tvec4(T const & x, detail::_swizzle<3, T, P, tvec3<T, P>, E0, E1, E2, -1> const & v)
    +
    271  {
    +
    272  *this = tvec4<T, P>(x, v());
    +
    273  }
    +
    274 # endif// GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
    +
    275 
    +
    277  // Unary arithmetic operators
    +
    278 
    +
    279  template <typename U>
    +
    280  GLM_FUNC_DECL tvec4<T, P> & operator=(tvec4<U, P> const & v);
    +
    281  template <typename U>
    +
    282  GLM_FUNC_DECL tvec4<T, P> & operator+=(U scalar);
    +
    283  template <typename U>
    +
    284  GLM_FUNC_DECL tvec4<T, P> & operator+=(tvec1<U, P> const & v);
    +
    285  template <typename U>
    +
    286  GLM_FUNC_DECL tvec4<T, P> & operator+=(tvec4<U, P> const & v);
    +
    287  template <typename U>
    +
    288  GLM_FUNC_DECL tvec4<T, P> & operator-=(U scalar);
    +
    289  template <typename U>
    +
    290  GLM_FUNC_DECL tvec4<T, P> & operator-=(tvec1<U, P> const & v);
    +
    291  template <typename U>
    +
    292  GLM_FUNC_DECL tvec4<T, P> & operator-=(tvec4<U, P> const & v);
    +
    293  template <typename U>
    +
    294  GLM_FUNC_DECL tvec4<T, P> & operator*=(U scalar);
    +
    295  template <typename U>
    +
    296  GLM_FUNC_DECL tvec4<T, P> & operator*=(tvec1<U, P> const & v);
    +
    297  template <typename U>
    +
    298  GLM_FUNC_DECL tvec4<T, P> & operator*=(tvec4<U, P> const & v);
    +
    299  template <typename U>
    +
    300  GLM_FUNC_DECL tvec4<T, P> & operator/=(U scalar);
    +
    301  template <typename U>
    +
    302  GLM_FUNC_DECL tvec4<T, P> & operator/=(tvec1<U, P> const & v);
    +
    303  template <typename U>
    +
    304  GLM_FUNC_DECL tvec4<T, P> & operator/=(tvec4<U, P> const & v);
    +
    305 
    +
    307  // Increment and decrement operators
    +
    308 
    +
    309  GLM_FUNC_DECL tvec4<T, P> & operator++();
    +
    310  GLM_FUNC_DECL tvec4<T, P> & operator--();
    +
    311  GLM_FUNC_DECL tvec4<T, P> operator++(int);
    +
    312  GLM_FUNC_DECL tvec4<T, P> operator--(int);
    +
    313 
    +
    315  // Unary bit operators
    +
    316 
    +
    317  template <typename U>
    +
    318  GLM_FUNC_DECL tvec4<T, P> & operator%=(U scalar);
    +
    319  template <typename U>
    +
    320  GLM_FUNC_DECL tvec4<T, P> & operator%=(tvec1<U, P> const & v);
    +
    321  template <typename U>
    +
    322  GLM_FUNC_DECL tvec4<T, P> & operator%=(tvec4<U, P> const & v);
    +
    323  template <typename U>
    +
    324  GLM_FUNC_DECL tvec4<T, P> & operator&=(U scalar);
    +
    325  template <typename U>
    +
    326  GLM_FUNC_DECL tvec4<T, P> & operator&=(tvec1<U, P> const & v);
    +
    327  template <typename U>
    +
    328  GLM_FUNC_DECL tvec4<T, P> & operator&=(tvec4<U, P> const & v);
    +
    329  template <typename U>
    +
    330  GLM_FUNC_DECL tvec4<T, P> & operator|=(U scalar);
    +
    331  template <typename U>
    +
    332  GLM_FUNC_DECL tvec4<T, P> & operator|=(tvec1<U, P> const & v);
    +
    333  template <typename U>
    +
    334  GLM_FUNC_DECL tvec4<T, P> & operator|=(tvec4<U, P> const & v);
    +
    335  template <typename U>
    +
    336  GLM_FUNC_DECL tvec4<T, P> & operator^=(U scalar);
    +
    337  template <typename U>
    +
    338  GLM_FUNC_DECL tvec4<T, P> & operator^=(tvec1<U, P> const & v);
    +
    339  template <typename U>
    +
    340  GLM_FUNC_DECL tvec4<T, P> & operator^=(tvec4<U, P> const & v);
    +
    341  template <typename U>
    +
    342  GLM_FUNC_DECL tvec4<T, P> & operator<<=(U scalar);
    +
    343  template <typename U>
    +
    344  GLM_FUNC_DECL tvec4<T, P> & operator<<=(tvec1<U, P> const & v);
    +
    345  template <typename U>
    +
    346  GLM_FUNC_DECL tvec4<T, P> & operator<<=(tvec4<U, P> const & v);
    +
    347  template <typename U>
    +
    348  GLM_FUNC_DECL tvec4<T, P> & operator>>=(U scalar);
    +
    349  template <typename U>
    +
    350  GLM_FUNC_DECL tvec4<T, P> & operator>>=(tvec1<U, P> const & v);
    +
    351  template <typename U>
    +
    352  GLM_FUNC_DECL tvec4<T, P> & operator>>=(tvec4<U, P> const & v);
    +
    353  };
    +
    354 
    +
    355  template <typename T, precision P>
    +
    356  GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v, T scalar);
    +
    357 
    +
    358  template <typename T, precision P>
    +
    359  GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    360 
    +
    361  template <typename T, precision P>
    +
    362  GLM_FUNC_DECL tvec4<T, P> operator+(T scalar, tvec4<T, P> const & v);
    +
    363 
    +
    364  template <typename T, precision P>
    +
    365  GLM_FUNC_DECL tvec4<T, P> operator+(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    366 
    +
    367  template <typename T, precision P>
    +
    368  GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    369 
    +
    370  template <typename T, precision P>
    +
    371  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v, T scalar);
    +
    372 
    +
    373  template <typename T, precision P>
    +
    374  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    375 
    +
    376  template <typename T, precision P>
    +
    377  GLM_FUNC_DECL tvec4<T, P> operator-(T scalar, tvec4<T, P> const & v);
    +
    378 
    +
    379  template <typename T, precision P>
    +
    380  GLM_FUNC_DECL tvec4<T, P> operator-(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    381 
    +
    382  template <typename T, precision P>
    +
    383  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    384 
    +
    385  template <typename T, precision P>
    +
    386  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, T scalar);
    +
    387 
    +
    388  template <typename T, precision P>
    +
    389  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    390 
    +
    391  template <typename T, precision P>
    +
    392  GLM_FUNC_DECL tvec4<T, P> operator*(T scalar, tvec4<T, P> const & v);
    +
    393 
    +
    394  template <typename T, precision P>
    +
    395  GLM_FUNC_DECL tvec4<T, P> operator*(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    396 
    +
    397  template <typename T, precision P>
    +
    398  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    399 
    +
    400  template <typename T, precision P>
    +
    401  GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v, T scalar);
    +
    402 
    +
    403  template <typename T, precision P>
    +
    404  GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    405 
    +
    406  template <typename T, precision P>
    +
    407  GLM_FUNC_DECL tvec4<T, P> operator/(T scalar, tvec4<T, P> const & v);
    +
    408 
    +
    409  template <typename T, precision P>
    +
    410  GLM_FUNC_DECL tvec4<T, P> operator/(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    411 
    +
    412  template <typename T, precision P>
    +
    413  GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    414 
    +
    415  template <typename T, precision P>
    +
    416  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v);
    +
    417 
    +
    418  template <typename T, precision P>
    +
    419  GLM_FUNC_DECL bool operator==(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    420 
    +
    421  template <typename T, precision P>
    +
    422  GLM_FUNC_DECL bool operator!=(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    423 
    +
    424  template <typename T, precision P>
    +
    425  GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v, T scalar);
    +
    426 
    +
    427  template <typename T, precision P>
    +
    428  GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    429 
    +
    430  template <typename T, precision P>
    +
    431  GLM_FUNC_DECL tvec4<T, P> operator%(T scalar, tvec4<T, P> const & v);
    +
    432 
    +
    433  template <typename T, precision P>
    +
    434  GLM_FUNC_DECL tvec4<T, P> operator%(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    435 
    +
    436  template <typename T, precision P>
    +
    437  GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    438 
    +
    439  template <typename T, precision P>
    +
    440  GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v, T scalar);
    +
    441 
    +
    442  template <typename T, precision P>
    +
    443  GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    444 
    +
    445  template <typename T, precision P>
    +
    446  GLM_FUNC_DECL tvec4<T, P> operator&(T scalar, tvec4<T, P> const & v);
    +
    447 
    +
    448  template <typename T, precision P>
    +
    449  GLM_FUNC_DECL tvec4<T, P> operator&(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    450 
    +
    451  template <typename T, precision P>
    +
    452  GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    453 
    +
    454  template <typename T, precision P>
    +
    455  GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v, T scalar);
    +
    456 
    +
    457  template <typename T, precision P>
    +
    458  GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    459 
    +
    460  template <typename T, precision P>
    +
    461  GLM_FUNC_DECL tvec4<T, P> operator|(T scalar, tvec4<T, P> const & v);
    +
    462 
    +
    463  template <typename T, precision P>
    +
    464  GLM_FUNC_DECL tvec4<T, P> operator|(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    465 
    +
    466  template <typename T, precision P>
    +
    467  GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    468 
    +
    469  template <typename T, precision P>
    +
    470  GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v, T scalar);
    +
    471 
    +
    472  template <typename T, precision P>
    +
    473  GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    474 
    +
    475  template <typename T, precision P>
    +
    476  GLM_FUNC_DECL tvec4<T, P> operator^(T scalar, tvec4<T, P> const & v);
    +
    477 
    +
    478  template <typename T, precision P>
    +
    479  GLM_FUNC_DECL tvec4<T, P> operator^(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    480 
    +
    481  template <typename T, precision P>
    +
    482  GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    483 
    +
    484  template <typename T, precision P>
    +
    485  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v, T scalar);
    +
    486 
    +
    487  template <typename T, precision P>
    +
    488  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    489 
    +
    490  template <typename T, precision P>
    +
    491  GLM_FUNC_DECL tvec4<T, P> operator<<(T scalar, tvec4<T, P> const & v);
    +
    492 
    +
    493  template <typename T, precision P>
    +
    494  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    495 
    +
    496  template <typename T, precision P>
    +
    497  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    498 
    +
    499  template <typename T, precision P>
    +
    500  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v, T scalar);
    +
    501 
    +
    502  template <typename T, precision P>
    +
    503  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v, tvec1<T, P> const & s);
    +
    504 
    +
    505  template <typename T, precision P>
    +
    506  GLM_FUNC_DECL tvec4<T, P> operator>>(T scalar, tvec4<T, P> const & v);
    +
    507 
    +
    508  template <typename T, precision P>
    +
    509  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec1<T, P> const & s, tvec4<T, P> const & v);
    +
    510 
    +
    511  template <typename T, precision P>
    +
    512  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    +
    513 
    +
    514  template <typename T, precision P>
    +
    515  GLM_FUNC_DECL tvec4<T, P> operator~(tvec4<T, P> const & v);
    +
    516 }//namespace glm
    +
    517 
    +
    518 #ifndef GLM_EXTERNAL_TEMPLATE
    +
    519 #include "type_vec4.inl"
    +
    520 #endif//GLM_EXTERNAL_TEMPLATE
    +
    GLM_FUNC_DECL T length(vecType< T, P > const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    Definition: _noise.hpp:31
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00137.html b/doc/api/a00137.html new file mode 100644 index 00000000..f776688e --- /dev/null +++ b/doc/api/a00137.html @@ -0,0 +1,97 @@ + + + + + + +0.9.6: ulp.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    ulp.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    GLM_FUNC_DECL uint float_distance (T const &x, T const &y)
     
    template<typename T , template< typename > class vecType>
    GLM_FUNC_DECL vecType< uint > float_distance (vecType< T > const &x, vecType< T > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x, uint const &Distance)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x, uint const &Distance)
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTC_ulp

    +
    Date
    2011-02-21 / 2011-12-12
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file ulp.hpp.

    +
    + + + + diff --git a/doc/api/a00137_source.html b/doc/api/a00137_source.html index 22b068c9..18655737 100644 --- a/doc/api/a00137_source.html +++ b/doc/api/a00137_source.html @@ -3,8 +3,8 @@ - -GLM: type_vec3.hpp Source File + +0.9.6: ulp.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,318 +41,61 @@
    -
    type_vec3.hpp
    +
    ulp.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_gentype3
    -
    30 #define glm_core_type_gentype3
    -
    31 
    -
    32 //#include "../fwd.hpp"
    -
    33 #include "type_vec.hpp"
    -
    34 #ifdef GLM_SWIZZLE
    -
    35 # if GLM_HAS_ANONYMOUS_UNION
    -
    36 # include "_swizzle.hpp"
    -
    37 # else
    -
    38 # include "_swizzle_func.hpp"
    -
    39 # endif
    -
    40 #endif //GLM_SWIZZLE
    -
    41 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    42 # include <initializer_list>
    -
    43 #endif //GLM_HAS_INITIALIZER_LISTS
    -
    44 #include <cstddef>
    +Go to the documentation of this file.
    1 
    +
    39 #pragma once
    +
    40 
    +
    41 // Dependencies
    +
    42 #include "../detail/setup.hpp"
    +
    43 #include "../detail/precision.hpp"
    +
    44 #include "../detail/type_int.hpp"
    45 
    -
    46 namespace glm{
    -
    47 namespace detail
    -
    48 {
    -
    49  template <typename T, precision P>
    -
    50  struct tvec3
    -
    51  {
    -
    53  // Implementation detail
    +
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    47 # pragma message("GLM: GLM_GTC_ulp extension included")
    +
    48 #endif
    +
    49 
    +
    50 namespace glm
    +
    51 {
    54 
    -
    55  enum ctor{_null};
    -
    56 
    -
    57  typedef tvec3<T, P> type;
    -
    58  typedef tvec3<bool, P> bool_type;
    -
    59  typedef T value_type;
    -
    60  typedef int size_type;
    -
    61 
    -
    63  // Helper
    +
    57  template <typename genType>
    +
    58  GLM_FUNC_DECL genType next_float(genType const & x);
    +
    59 
    +
    62  template <typename genType>
    +
    63  GLM_FUNC_DECL genType prev_float(genType const & x);
    64 
    -
    65  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    66 
    -
    68  // Data
    +
    67  template <typename genType>
    +
    68  GLM_FUNC_DECL genType next_float(genType const & x, uint const & Distance);
    69 
    -
    70 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    -
    71  union
    -
    72  {
    -
    73  struct{ T x, y, z; };
    -
    74  struct{ T r, g, b; };
    -
    75  struct{ T s, t, p; };
    -
    76 
    -
    77  _GLM_SWIZZLE3_2_MEMBERS(T, P, tvec2, x, y, z)
    -
    78  _GLM_SWIZZLE3_2_MEMBERS(T, P, tvec2, r, g, b)
    -
    79  _GLM_SWIZZLE3_2_MEMBERS(T, P, tvec2, s, t, p)
    -
    80  _GLM_SWIZZLE3_3_MEMBERS(T, P, tvec3, x, y, z)
    -
    81  _GLM_SWIZZLE3_3_MEMBERS(T, P, tvec3, r, g, b)
    -
    82  _GLM_SWIZZLE3_3_MEMBERS(T, P, tvec3, s, t, p)
    -
    83  _GLM_SWIZZLE3_4_MEMBERS(T, P, tvec4, x, y, z)
    -
    84  _GLM_SWIZZLE3_4_MEMBERS(T, P, tvec4, r, g, b)
    -
    85  _GLM_SWIZZLE3_4_MEMBERS(T, P, tvec4, s, t, p)
    -
    86  };
    -
    87 # else
    -
    88  union { T x, r, s; };
    -
    89  union { T y, g, t; };
    -
    90  union { T z, b, p; };
    -
    91 
    -
    92 # ifdef GLM_SWIZZLE
    -
    93  GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4)
    -
    94 # endif
    -
    95 # endif//GLM_LANG
    -
    96 
    -
    98  // Accesses
    -
    99 
    -
    100  GLM_FUNC_DECL T & operator[](length_t i);
    -
    101  GLM_FUNC_DECL T const & operator[](length_t i) const;
    -
    102 
    -
    104  // Implicit basic constructors
    -
    105 
    -
    106  GLM_FUNC_DECL tvec3();
    -
    107  GLM_FUNC_DECL tvec3(tvec3<T, P> const & v);
    -
    108  template <precision Q>
    -
    109  GLM_FUNC_DECL tvec3(tvec3<T, Q> const & v);
    -
    110 
    -
    111 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    112  template <typename U>
    -
    113  GLM_FUNC_DECL tvec3(std::initializer_list<U> const & v);
    -
    114 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    115 
    -
    117  // Explicit basic constructors
    -
    118 
    -
    119  GLM_FUNC_DECL explicit tvec3(
    -
    120  ctor);
    -
    121  GLM_FUNC_DECL explicit tvec3(
    -
    122  T const & s);
    -
    123  GLM_FUNC_DECL explicit tvec3(
    -
    124  T const & s1,
    -
    125  T const & s2,
    -
    126  T const & s3);
    -
    127 
    -
    129  // Conversion scalar constructors
    -
    130 
    -
    132  template <typename U, typename V, typename W>
    -
    133  GLM_FUNC_DECL explicit tvec3(
    -
    134  U const & x,
    -
    135  V const & y,
    -
    136  W const & z);
    -
    137 
    -
    139  // Conversion vector constructors
    -
    140 
    -
    142  template <typename A, typename B, precision Q>
    -
    143  GLM_FUNC_DECL explicit tvec3(tvec2<A, Q> const & v, B const & s);
    -
    145  template <typename A, typename B, precision Q>
    -
    146  GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B, Q> const & v);
    -
    148  template <typename U, precision Q>
    -
    149  GLM_FUNC_DECL explicit tvec3(tvec3<U, Q> const & v);
    -
    151  template <typename U, precision Q>
    -
    152  GLM_FUNC_DECL explicit tvec3(tvec4<U, Q> const & v);
    -
    153 
    -
    155  // Swizzle constructors
    -
    156 
    -
    157 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    -
    158  template <int E0, int E1, int E2>
    -
    159  GLM_FUNC_DECL tvec3(_swizzle<3, T, P, tvec3<T, P>, E0, E1, E2, -1> const & that)
    -
    160  {
    -
    161  *this = that();
    -
    162  }
    -
    163 
    -
    164  template <int E0, int E1>
    -
    165  GLM_FUNC_DECL tvec3(_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v, T const & s)
    -
    166  {
    -
    167  *this = tvec3<T, P>(v(), s);
    -
    168  }
    -
    169 
    -
    170  template <int E0, int E1>
    -
    171  GLM_FUNC_DECL tvec3(T const & s, _swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v)
    -
    172  {
    -
    173  *this = tvec3<T, P>(s, v());
    -
    174  }
    -
    175 # endif//(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    -
    176 
    -
    178  // Unary arithmetic operators
    -
    179 
    -
    180  GLM_FUNC_DECL tvec3<T, P> & operator= (tvec3<T, P> const & v);
    -
    181  template <typename U>
    -
    182  GLM_FUNC_DECL tvec3<T, P> & operator= (tvec3<U, P> const & v);
    -
    183 
    -
    184  template <typename U>
    -
    185  GLM_FUNC_DECL tvec3<T, P> & operator+=(U s);
    -
    186  template <typename U>
    -
    187  GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec3<U, P> const & v);
    -
    188  template <typename U>
    -
    189  GLM_FUNC_DECL tvec3<T, P> & operator-=(U s);
    -
    190  template <typename U>
    -
    191  GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec3<U, P> const & v);
    -
    192  template <typename U>
    -
    193  GLM_FUNC_DECL tvec3<T, P> & operator*=(U s);
    -
    194  template <typename U>
    -
    195  GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec3<U, P> const & v);
    -
    196  template <typename U>
    -
    197  GLM_FUNC_DECL tvec3<T, P> & operator/=(U s);
    -
    198  template <typename U>
    -
    199  GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec3<U, P> const & v);
    -
    200 
    -
    202  // Increment and decrement operators
    -
    203 
    -
    204  GLM_FUNC_DECL tvec3<T, P> & operator++();
    -
    205  GLM_FUNC_DECL tvec3<T, P> & operator--();
    -
    206  GLM_FUNC_DECL tvec3<T, P> operator++(int);
    -
    207  GLM_FUNC_DECL tvec3<T, P> operator--(int);
    -
    208 
    -
    210  // Unary bit operators
    -
    211 
    -
    212  template <typename U>
    -
    213  GLM_FUNC_DECL tvec3<T, P> & operator%= (U s);
    -
    214  template <typename U>
    -
    215  GLM_FUNC_DECL tvec3<T, P> & operator%= (tvec3<U, P> const & v);
    -
    216  template <typename U>
    -
    217  GLM_FUNC_DECL tvec3<T, P> & operator&= (U s);
    -
    218  template <typename U>
    -
    219  GLM_FUNC_DECL tvec3<T, P> & operator&= (tvec3<U, P> const & v);
    -
    220  template <typename U>
    -
    221  GLM_FUNC_DECL tvec3<T, P> & operator|= (U s);
    -
    222  template <typename U>
    -
    223  GLM_FUNC_DECL tvec3<T, P> & operator|= (tvec3<U, P> const & v);
    -
    224  template <typename U>
    -
    225  GLM_FUNC_DECL tvec3<T, P> & operator^= (U s);
    -
    226  template <typename U>
    -
    227  GLM_FUNC_DECL tvec3<T, P> & operator^= (tvec3<U, P> const & v);
    -
    228  template <typename U>
    -
    229  GLM_FUNC_DECL tvec3<T, P> & operator<<=(U s);
    -
    230  template <typename U>
    -
    231  GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec3<U, P> const & v);
    -
    232  template <typename U>
    -
    233  GLM_FUNC_DECL tvec3<T, P> & operator>>=(U s);
    -
    234  template <typename U>
    -
    235  GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec3<U, P> const & v);
    -
    236  };
    -
    237 
    -
    238  template <typename T, precision P>
    -
    239  GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v, T const & s);
    -
    240 
    -
    241  template <typename T, precision P>
    -
    242  GLM_FUNC_DECL tvec3<T, P> operator+(T const & s, tvec3<T, P> const & v);
    -
    243 
    -
    244  template <typename T, precision P>
    -
    245  GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    246 
    -
    247  template <typename T, precision P>
    -
    248  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v, T const & s);
    -
    249 
    -
    250  template <typename T, precision P>
    -
    251  GLM_FUNC_DECL tvec3<T, P> operator-(T const & s, tvec3<T, P> const & v);
    -
    252 
    -
    253  template <typename T, precision P>
    -
    254  GLM_FUNC_DECL tvec3<T, P> operator- (tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    255 
    -
    256  template <typename T, precision P>
    -
    257  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, T const & s);
    -
    258 
    -
    259  template <typename T, precision P>
    -
    260  GLM_FUNC_DECL tvec3<T, P> operator*(T const & s, tvec3<T, P> const & v);
    -
    261 
    -
    262  template <typename T, precision P>
    -
    263  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    264 
    -
    265  template <typename T, precision P>
    -
    266  GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v, T const & s);
    -
    267 
    -
    268  template <typename T, precision P>
    -
    269  GLM_FUNC_DECL tvec3<T, P> operator/(T const & s, tvec3<T, P> const & v);
    -
    270 
    -
    271  template <typename T, precision P>
    -
    272  GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    273 
    -
    274  template <typename T, precision P>
    -
    275  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v);
    -
    276 
    -
    277  template <typename T, precision P>
    -
    278  GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v, T const & s);
    -
    279 
    -
    280  template <typename T, precision P>
    -
    281  GLM_FUNC_DECL tvec3<T, P> operator%(T const & s, tvec3<T, P> const & v);
    -
    282 
    -
    283  template <typename T, precision P>
    -
    284  GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    285 
    -
    286  template <typename T, precision P>
    -
    287  GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v, T const & s);
    -
    288 
    -
    289  template <typename T, precision P>
    -
    290  GLM_FUNC_DECL tvec3<T, P> operator&(T const & s, tvec3<T, P> const & v);
    -
    291 
    -
    292  template <typename T, precision P>
    -
    293  GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    294 
    -
    295  template <typename T, precision P>
    -
    296  GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v, T const & s);
    -
    297 
    -
    298  template <typename T, precision P>
    -
    299  GLM_FUNC_DECL tvec3<T, P> operator|(T const & s, tvec3<T, P> const & v);
    -
    300 
    -
    301  template <typename T, precision P>
    -
    302  GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    303 
    -
    304  template <typename T, precision P>
    -
    305  GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v, T const & s);
    -
    306 
    -
    307  template <typename T, precision P>
    -
    308  GLM_FUNC_DECL tvec3<T, P> operator^(T const & s, tvec3<T, P> const & v);
    -
    309 
    -
    310  template <typename T, precision P>
    -
    311  GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    312 
    -
    313  template <typename T, precision P>
    -
    314  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v, T const & s);
    -
    315 
    -
    316  template <typename T, precision P>
    -
    317  GLM_FUNC_DECL tvec3<T, P> operator<<(T const & s, tvec3<T, P> const & v);
    -
    318 
    -
    319  template <typename T, precision P>
    -
    320  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    321 
    -
    322  template <typename T, precision P>
    -
    323  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v, T const & s);
    -
    324 
    -
    325  template <typename T, precision P>
    -
    326  GLM_FUNC_DECL tvec3<T, P> operator>>(T const & s, tvec3<T, P> const & v);
    -
    327 
    -
    328  template <typename T, precision P>
    -
    329  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
    -
    330 
    -
    331  template <typename T, precision P>
    -
    332  GLM_FUNC_DECL tvec3<T, P> operator~(tvec3<T, P> const & v);
    -
    333 
    -
    334 }//namespace detail
    -
    335 }//namespace glm
    -
    336 
    -
    337 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    338 #include "type_vec3.inl"
    -
    339 #endif//GLM_EXTERNAL_TEMPLATE
    -
    340 
    -
    341 #endif//glm_core_type_gentype3
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    72  template <typename genType>
    +
    73  GLM_FUNC_DECL genType prev_float(genType const & x, uint const & Distance);
    +
    74 
    +
    77  template <typename T>
    +
    78  GLM_FUNC_DECL uint float_distance(T const & x, T const & y);
    +
    79 
    +
    82  template<typename T, template<typename> class vecType>
    +
    83  GLM_FUNC_DECL vecType<uint> float_distance(vecType<T> const & x, vecType<T> const & y);
    +
    84 
    +
    86 }// namespace glm
    +
    87 
    +
    88 #include "ulp.inl"
    +
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:302
    +
    GLM_FUNC_DECL genType next_float(genType const &x, uint const &Distance)
    Return the value(s) ULP distance after the input value(s).
    +
    GLM_FUNC_DECL vecType< uint > float_distance(vecType< T > const &x, vecType< T > const &y)
    Return the distance in the number of ULP between 2 vectors.
    +
    GLM_FUNC_DECL genType prev_float(genType const &x, uint const &Distance)
    Return the value(s) ULP distance before the input value(s).
    +
    Definition: _noise.hpp:31
    diff --git a/doc/api/a00138.html b/doc/api/a00138.html new file mode 100644 index 00000000..86c3b4fc --- /dev/null +++ b/doc/api/a00138.html @@ -0,0 +1,113 @@ + + + + + + +0.9.6: vec1.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    + +
    +
    vec1.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef highp_bvec1 bvec1
     
    typedef highp_dvec1 dvec1
     
    typedef highp_bvec1_t highp_bvec1
     
    typedef highp_dvec1_t highp_dvec1
     
    typedef highp_ivec1_t highp_ivec1
     
    typedef highp_uvec1_t highp_uvec1
     
    typedef highp_ivec1 ivec1
     
    typedef lowp_bvec1_t lowp_bvec1
     
    typedef lowp_dvec1_t lowp_dvec1
     
    typedef lowp_ivec1_t lowp_ivec1
     
    typedef lowp_uvec1_t lowp_uvec1
     
    typedef mediump_bvec1_t mediump_bvec1
     
    typedef mediump_dvec1_t mediump_dvec1
     
    typedef mediump_ivec1_t mediump_ivec1
     
    typedef mediump_uvec1_t mediump_uvec1
     
    typedef highp_uvec1 uvec1
     
    typedef highp_vec1 vec1
     
    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM_GTC_vec1

    +
    Date
    2010-02-08 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    + +

    Definition in file vec1.hpp.

    +
    + + + + diff --git a/doc/api/a00138_source.html b/doc/api/a00138_source.html index b962dc52..28559272 100644 --- a/doc/api/a00138_source.html +++ b/doc/api/a00138_source.html @@ -3,8 +3,8 @@ - -GLM: type_vec4.hpp Source File + +0.9.6: vec1.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,358 +41,122 @@
    -
    type_vec4.hpp
    +
    vec1.hpp
    -
    1 
    -
    29 #ifndef glm_core_type_gentype4
    -
    30 #define glm_core_type_gentype4
    -
    31 
    -
    32 //#include "../fwd.hpp"
    -
    33 #include "setup.hpp"
    -
    34 #include "type_vec.hpp"
    -
    35 #ifdef GLM_SWIZZLE
    -
    36 # if GLM_HAS_ANONYMOUS_UNION
    -
    37 # include "_swizzle.hpp"
    -
    38 # else
    -
    39 # include "_swizzle_func.hpp"
    -
    40 # endif
    -
    41 #endif //GLM_SWIZZLE
    -
    42 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    43 # include <initializer_list>
    -
    44 #endif //GLM_HAS_INITIALIZER_LISTS
    -
    45 #include <cstddef>
    +Go to the documentation of this file.
    1 
    +
    37 #pragma once
    +
    38 
    +
    39 // Dependency:
    +
    40 #include "../glm.hpp"
    +
    41 #include "../detail/type_vec1.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTC_vec1 extension included")
    +
    45 #endif
    46 
    -
    47 namespace glm{
    -
    48 namespace detail
    -
    49 {
    -
    50  template <typename T, precision P>
    -
    51  struct tvec4
    -
    52  {
    -
    54  // Implementation detail
    -
    55 
    -
    56  enum ctor{_null};
    -
    57 
    -
    58  typedef tvec4<T, P> type;
    -
    59  typedef tvec4<bool, P> bool_type;
    -
    60  typedef T value_type;
    -
    61  typedef int size_type;
    -
    62 
    -
    64  // Helper
    -
    65 
    -
    66  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
    -
    67 
    -
    69  // Data
    -
    70 
    -
    71 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    -
    72  union
    -
    73  {
    -
    74  struct { T r, g, b, a; };
    -
    75  struct { T s, t, p, q; };
    -
    76  struct { T x, y, z, w;};
    -
    77 
    -
    78  _GLM_SWIZZLE4_2_MEMBERS(T, P, tvec2, x, y, z, w)
    -
    79  _GLM_SWIZZLE4_2_MEMBERS(T, P, tvec2, r, g, b, a)
    -
    80  _GLM_SWIZZLE4_2_MEMBERS(T, P, tvec2, s, t, p, q)
    -
    81  _GLM_SWIZZLE4_3_MEMBERS(T, P, tvec3, x, y, z, w)
    -
    82  _GLM_SWIZZLE4_3_MEMBERS(T, P, tvec3, r, g, b, a)
    -
    83  _GLM_SWIZZLE4_3_MEMBERS(T, P, tvec3, s, t, p, q)
    -
    84  _GLM_SWIZZLE4_4_MEMBERS(T, P, tvec4, x, y, z, w)
    -
    85  _GLM_SWIZZLE4_4_MEMBERS(T, P, tvec4, r, g, b, a)
    -
    86  _GLM_SWIZZLE4_4_MEMBERS(T, P, tvec4, s, t, p, q)
    -
    87  };
    -
    88 # else
    -
    89  union { T x, r, s; };
    -
    90  union { T y, g, t; };
    -
    91  union { T z, b, p; };
    -
    92  union { T w, a, q; };
    +
    47 namespace glm
    +
    48 {
    +
    52  typedef highp_vec1_t highp_vec1;
    +
    53 
    +
    57  typedef mediump_vec1_t mediump_vec1;
    +
    58 
    +
    62  typedef lowp_vec1_t lowp_vec1;
    +
    63 
    +
    67  typedef highp_dvec1_t highp_dvec1;
    +
    68 
    +
    72  typedef mediump_dvec1_t mediump_dvec1;
    +
    73 
    +
    77  typedef lowp_dvec1_t lowp_dvec1;
    +
    78 
    +
    82  typedef highp_ivec1_t highp_ivec1;
    +
    83 
    +
    87  typedef mediump_ivec1_t mediump_ivec1;
    +
    88 
    +
    92  typedef lowp_ivec1_t lowp_ivec1;
    93 
    -
    94 # ifdef GLM_SWIZZLE
    -
    95  GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4)
    -
    96 # endif
    -
    97 # endif//GLM_LANG
    -
    98 
    -
    100  // Accesses
    -
    101 
    -
    102  GLM_FUNC_DECL T & operator[](length_t i);
    -
    103  GLM_FUNC_DECL T const & operator[](length_t i) const;
    -
    104 
    -
    106  // Implicit basic constructors
    -
    107 
    -
    108  GLM_FUNC_DECL tvec4();
    -
    109  GLM_FUNC_DECL tvec4(type const & v);
    -
    110  template <precision Q>
    -
    111  GLM_FUNC_DECL tvec4(tvec4<T, Q> const & v);
    -
    112 
    -
    113 #if(GLM_HAS_INITIALIZER_LISTS)
    -
    114  template <typename U>
    -
    115  GLM_FUNC_DECL tvec4(std::initializer_list<U> l);
    -
    116 #endif//GLM_HAS_INITIALIZER_LISTS
    -
    117 
    -
    119  // Explicit basic constructors
    -
    120 
    -
    121  GLM_FUNC_DECL explicit tvec4(
    -
    122  ctor);
    -
    123  GLM_FUNC_DECL explicit tvec4(
    -
    124  T const & s);
    -
    125  GLM_FUNC_DECL explicit tvec4(
    -
    126  T const & s0,
    -
    127  T const & s1,
    -
    128  T const & s2,
    -
    129  T const & s3);
    -
    130 
    -
    132  // Conversion scalar constructors
    -
    133 
    -
    135  template <typename A, typename B, typename C, typename D>
    -
    136  GLM_FUNC_DECL explicit tvec4(
    -
    137  A const & x,
    -
    138  B const & y,
    -
    139  C const & z,
    -
    140  D const & w);
    -
    141 
    -
    143  // Conversion vector constructors
    -
    144 
    -
    146  template <typename A, typename B, typename C, precision Q>
    -
    147  GLM_FUNC_DECL explicit tvec4(tvec2<A, Q> const & v, B const & s1, C const & s2);
    -
    149  template <typename A, typename B, typename C, precision Q>
    -
    150  GLM_FUNC_DECL explicit tvec4(A const & s1, tvec2<B, Q> const & v, C const & s2);
    -
    152  template <typename A, typename B, typename C, precision Q>
    -
    153  GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tvec2<C, Q> const & v);
    -
    155  template <typename A, typename B, precision Q>
    -
    156  GLM_FUNC_DECL explicit tvec4(tvec3<A, Q> const & v, B const & s);
    -
    158  template <typename A, typename B, precision Q>
    -
    159  GLM_FUNC_DECL explicit tvec4(A const & s, tvec3<B, Q> const & v);
    -
    161  template <typename A, typename B, precision Q>
    -
    162  GLM_FUNC_DECL explicit tvec4(tvec2<A, Q> const & v1, tvec2<B, Q> const & v2);
    -
    164  template <typename U, precision Q>
    -
    165  GLM_FUNC_DECL explicit tvec4(tvec4<U, Q> const & v);
    -
    166 
    -
    168  // Swizzle constructors
    -
    169 
    -
    170 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    -
    171  template <int E0, int E1, int E2, int E3>
    -
    172  GLM_FUNC_DECL tvec4(_swizzle<4, T, P, tvec4<T, P>, E0, E1, E2, E3> const & that)
    -
    173  {
    -
    174  *this = that();
    -
    175  }
    -
    176 
    -
    177  template <int E0, int E1, int F0, int F1>
    -
    178  GLM_FUNC_DECL tvec4(_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v, _swizzle<2, T, P, tvec2<T, P>, F0, F1, -1, -2> const & u)
    -
    179  {
    -
    180  *this = tvec4<T, P>(v(), u());
    -
    181  }
    -
    182 
    -
    183  template <int E0, int E1>
    -
    184  GLM_FUNC_DECL tvec4(T const & x, T const & y, _swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v)
    -
    185  {
    -
    186  *this = tvec4<T, P>(x, y, v());
    -
    187  }
    +
    97  typedef highp_uvec1_t highp_uvec1;
    +
    98 
    +
    102  typedef mediump_uvec1_t mediump_uvec1;
    +
    103 
    +
    107  typedef lowp_uvec1_t lowp_uvec1;
    +
    108 
    +
    112  typedef highp_bvec1_t highp_bvec1;
    +
    113 
    +
    117  typedef mediump_bvec1_t mediump_bvec1;
    +
    118 
    +
    122  typedef lowp_bvec1_t lowp_bvec1;
    +
    123 
    +
    125  // vec1 definition
    +
    126 
    +
    127 #if(defined(GLM_PRECISION_HIGHP_BOOL))
    +
    128  typedef highp_bvec1 bvec1;
    +
    129 #elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
    +
    130  typedef mediump_bvec1 bvec1;
    +
    131 #elif(defined(GLM_PRECISION_LOWP_BOOL))
    +
    132  typedef lowp_bvec1 bvec1;
    +
    133 #else
    +
    134  typedef highp_bvec1 bvec1;
    +
    137 #endif//GLM_PRECISION
    +
    138 
    +
    139 #if(defined(GLM_PRECISION_HIGHP_FLOAT))
    +
    140  typedef highp_vec1 vec1;
    +
    141 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    +
    142  typedef mediump_vec1 vec1;
    +
    143 #elif(defined(GLM_PRECISION_LOWP_FLOAT))
    +
    144  typedef lowp_vec1 vec1;
    +
    145 #else
    +
    146  typedef highp_vec1 vec1;
    +
    149 #endif//GLM_PRECISION
    +
    150 
    +
    151 #if(defined(GLM_PRECISION_HIGHP_DOUBLE))
    +
    152  typedef highp_dvec1 dvec1;
    +
    153 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
    +
    154  typedef mediump_dvec1 dvec1;
    +
    155 #elif(defined(GLM_PRECISION_LOWP_DOUBLE))
    +
    156  typedef lowp_dvec1 dvec1;
    +
    157 #else
    +
    158  typedef highp_dvec1 dvec1;
    +
    161 #endif//GLM_PRECISION
    +
    162 
    +
    163 #if(defined(GLM_PRECISION_HIGHP_INT))
    +
    164  typedef highp_ivec1 ivec1;
    +
    165 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    +
    166  typedef mediump_ivec1 ivec1;
    +
    167 #elif(defined(GLM_PRECISION_LOWP_INT))
    +
    168  typedef lowp_ivec1 ivec1;
    +
    169 #else
    +
    170  typedef highp_ivec1 ivec1;
    +
    173 #endif//GLM_PRECISION
    +
    174 
    +
    175 #if(defined(GLM_PRECISION_HIGHP_UINT))
    +
    176  typedef highp_uvec1 uvec1;
    +
    177 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    +
    178  typedef mediump_uvec1 uvec1;
    +
    179 #elif(defined(GLM_PRECISION_LOWP_UINT))
    +
    180  typedef lowp_uvec1 uvec1;
    +
    181 #else
    +
    182  typedef highp_uvec1 uvec1;
    +
    185 #endif//GLM_PRECISION
    +
    186 
    +
    187 }// namespace glm
    188 
    -
    189  template <int E0, int E1>
    -
    190  GLM_FUNC_DECL tvec4(T const & x, _swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v, T const & w)
    -
    191  {
    -
    192  *this = tvec4<T, P>(x, v(), w);
    -
    193  }
    -
    194 
    -
    195  template <int E0, int E1>
    -
    196  GLM_FUNC_DECL tvec4(_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2> const & v, T const & z, T const & w)
    -
    197  {
    -
    198  *this = tvec4<T, P>(v(), z, w);
    -
    199  }
    -
    200 
    -
    201  template <int E0, int E1, int E2>
    -
    202  GLM_FUNC_DECL tvec4(_swizzle<3, T, P, tvec3<T, P>, E0, E1, E2, -1> const & v, T const & w)
    -
    203  {
    -
    204  *this = tvec4<T, P>(v(), w);
    -
    205  }
    -
    206 
    -
    207  template <int E0, int E1, int E2>
    -
    208  GLM_FUNC_DECL tvec4(T const & x, _swizzle<3, T, P, tvec3<T, P>, E0, E1, E2, -1> const & v)
    -
    209  {
    -
    210  *this = tvec4<T, P>(x, v());
    -
    211  }
    -
    212 # endif//(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
    -
    213 
    -
    215  // Unary arithmetic operators
    -
    216 
    -
    217  GLM_FUNC_DECL tvec4<T, P> & operator= (tvec4<T, P> const & v);
    -
    218  template <typename U, precision Q>
    -
    219  GLM_FUNC_DECL tvec4<T, P> & operator= (tvec4<U, Q> const & v);
    -
    220 
    -
    221  template <typename U>
    -
    222  GLM_FUNC_DECL tvec4<T, P> & operator+=(U s);
    -
    223  template <typename U>
    -
    224  GLM_FUNC_DECL tvec4<T, P> & operator+=(tvec4<U, P> const & v);
    -
    225  template <typename U>
    -
    226  GLM_FUNC_DECL tvec4<T, P> & operator-=(U s);
    -
    227  template <typename U>
    -
    228  GLM_FUNC_DECL tvec4<T, P> & operator-=(tvec4<U, P> const & v);
    -
    229  template <typename U>
    -
    230  GLM_FUNC_DECL tvec4<T, P> & operator*=(U s);
    -
    231  template <typename U>
    -
    232  GLM_FUNC_DECL tvec4<T, P> & operator*=(tvec4<U, P> const & v);
    -
    233  template <typename U>
    -
    234  GLM_FUNC_DECL tvec4<T, P> & operator/=(U s);
    -
    235  template <typename U>
    -
    236  GLM_FUNC_DECL tvec4<T, P> & operator/=(tvec4<U, P> const & v);
    -
    237 
    -
    239  // Increment and decrement operators
    -
    240 
    -
    241  GLM_FUNC_DECL tvec4<T, P> & operator++();
    -
    242  GLM_FUNC_DECL tvec4<T, P> & operator--();
    -
    243  GLM_FUNC_DECL tvec4<T, P> operator++(int);
    -
    244  GLM_FUNC_DECL tvec4<T, P> operator--(int);
    -
    245 
    -
    247  // Unary bit operators
    -
    248 
    -
    249  template <typename U>
    -
    250  GLM_FUNC_DECL tvec4<T, P> & operator%= (U s);
    -
    251  template <typename U>
    -
    252  GLM_FUNC_DECL tvec4<T, P> & operator%= (tvec4<U, P> const & v);
    -
    253  template <typename U>
    -
    254  GLM_FUNC_DECL tvec4<T, P> & operator&= (U s);
    -
    255  template <typename U>
    -
    256  GLM_FUNC_DECL tvec4<T, P> & operator&= (tvec4<U, P> const & v);
    -
    257  template <typename U>
    -
    258  GLM_FUNC_DECL tvec4<T, P> & operator|= (U s);
    -
    259  template <typename U>
    -
    260  GLM_FUNC_DECL tvec4<T, P> & operator|= (tvec4<U, P> const & v);
    -
    261  template <typename U>
    -
    262  GLM_FUNC_DECL tvec4<T, P> & operator^= (U s);
    -
    263  template <typename U>
    -
    264  GLM_FUNC_DECL tvec4<T, P> & operator^= (tvec4<U, P> const & v);
    -
    265  template <typename U>
    -
    266  GLM_FUNC_DECL tvec4<T, P> & operator<<=(U s);
    -
    267  template <typename U>
    -
    268  GLM_FUNC_DECL tvec4<T, P> & operator<<=(tvec4<U, P> const & v);
    -
    269  template <typename U>
    -
    270  GLM_FUNC_DECL tvec4<T, P> & operator>>=(U s);
    -
    271  template <typename U>
    -
    272  GLM_FUNC_DECL tvec4<T, P> & operator>>=(tvec4<U, P> const & v);
    -
    273  };
    -
    274 
    -
    275  template <typename T, precision P>
    -
    276  GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v, T const & s);
    -
    277 
    -
    278  template <typename T, precision P>
    -
    279  GLM_FUNC_DECL tvec4<T, P> operator+(T const & s, tvec4<T, P> const & v);
    -
    280 
    -
    281  template <typename T, precision P>
    -
    282  GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    283 
    -
    284  template <typename T, precision P>
    -
    285  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v, T const & s);
    -
    286 
    -
    287  template <typename T, precision P>
    -
    288  GLM_FUNC_DECL tvec4<T, P> operator-(T const & s, tvec4<T, P> const & v);
    -
    289 
    -
    290  template <typename T, precision P>
    -
    291  GLM_FUNC_DECL tvec4<T, P> operator- (tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    292 
    -
    293  template <typename T, precision P>
    -
    294  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, T const & s);
    -
    295 
    -
    296  template <typename T, precision P>
    -
    297  GLM_FUNC_DECL tvec4<T, P> operator*(T const & s, tvec4<T, P> const & v);
    -
    298 
    -
    299  template <typename T, precision P>
    -
    300  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    301 
    -
    302  template <typename T, precision P>
    -
    303  GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v, T const & s);
    -
    304 
    -
    305  template <typename T, precision P>
    -
    306  GLM_FUNC_DECL tvec4<T, P> operator/(T const & s, tvec4<T, P> const & v);
    -
    307 
    -
    308  template <typename T, precision P>
    -
    309  GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    310 
    -
    311  template <typename T, precision P>
    -
    312  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v);
    -
    313 
    -
    314  template <typename T, precision P>
    -
    315  GLM_FUNC_DECL bool operator==(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    316 
    -
    317  template <typename T, precision P>
    -
    318  GLM_FUNC_DECL bool operator!=(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    319 
    -
    320  template <typename T, precision P>
    -
    321  GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v, T const & s);
    -
    322 
    -
    323  template <typename T, precision P>
    -
    324  GLM_FUNC_DECL tvec4<T, P> operator%(T const & s, tvec4<T, P> const & v);
    -
    325 
    -
    326  template <typename T, precision P>
    -
    327  GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    328 
    -
    329  template <typename T, precision P>
    -
    330  GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v, T const & s);
    -
    331 
    -
    332  template <typename T, precision P>
    -
    333  GLM_FUNC_DECL tvec4<T, P> operator&(T const & s, tvec4<T, P> const & v);
    -
    334 
    -
    335  template <typename T, precision P>
    -
    336  GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    337 
    -
    338  template <typename T, precision P>
    -
    339  GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v, T const & s);
    -
    340 
    -
    341  template <typename T, precision P>
    -
    342  GLM_FUNC_DECL tvec4<T, P> operator|(T const & s, tvec4<T, P> const & v);
    -
    343 
    -
    344  template <typename T, precision P>
    -
    345  GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    346 
    -
    347  template <typename T, precision P>
    -
    348  GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v, T const & s);
    -
    349 
    -
    350  template <typename T, precision P>
    -
    351  GLM_FUNC_DECL tvec4<T, P> operator^(T const & s, tvec4<T, P> const & v);
    -
    352 
    -
    353  template <typename T, precision P>
    -
    354  GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    355 
    -
    356  template <typename T, precision P>
    -
    357  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v, T const & s);
    -
    358 
    -
    359  template <typename T, precision P>
    -
    360  GLM_FUNC_DECL tvec4<T, P> operator<<(T const & s, tvec4<T, P> const & v);
    -
    361 
    -
    362  template <typename T, precision P>
    -
    363  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    364 
    -
    365  template <typename T, precision P>
    -
    366  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v, T const & s);
    -
    367 
    -
    368  template <typename T, precision P>
    -
    369  GLM_FUNC_DECL tvec4<T, P> operator>>(T const & s, tvec4<T, P> const & v);
    -
    370 
    -
    371  template <typename T, precision P>
    -
    372  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
    -
    373 
    -
    374  template <typename T, precision P>
    -
    375  GLM_FUNC_DECL tvec4<T, P> operator~(tvec4<T, P> const & v);
    -
    376 
    -
    377 }//namespace detail
    -
    378 }//namespace glm
    -
    379 
    -
    380 #ifndef GLM_EXTERNAL_TEMPLATE
    -
    381 #include "type_vec4.inl"
    -
    382 #endif//GLM_EXTERNAL_TEMPLATE
    -
    383 
    -
    384 #endif//glm_core_type_gentype4
    -
    GLM_FUNC_DECL genType::value_type length(genType const &x)
    Returns the length of x, i.e., sqrt(x * x).
    +
    189 #include "vec1.inl"
    +
    tvec1< float, lowp > lowp_vec1
    Low single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1543
    +
    tvec1< float, mediump > mediump_vec1
    Medium single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1576
    +
    Definition: _noise.hpp:31
    +
    tvec1< float, highp > highp_vec1
    High single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1609
    diff --git a/doc/api/a00139.html b/doc/api/a00139.html index e317811f..52c71251 100644 --- a/doc/api/a00139.html +++ b/doc/api/a00139.html @@ -3,8 +3,8 @@ - -GLM: ulp.hpp File Reference + +0.9.6: vec2.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,63 +41,32 @@
    -
    -
    gtc/ulp.hpp File Reference
    +
    vec2.hpp File Reference

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename T >
    GLM_FUNC_DECL uint float_distance (T const &x, T const &y)
     
    template<typename T , template< typename > class vecType>
    GLM_FUNC_DECL vecType< uint > float_distance (vecType< T > const &x, vecType< T > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x, uint const &Distance)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x, uint const &Distance)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTC_ulp

    -
    Date
    2011-02-21 / 2011-12-12
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    -

    Definition in file gtc/ulp.hpp.

    +

    Definition in file vec2.hpp.

    diff --git a/doc/api/a00139_source.html b/doc/api/a00139_source.html index 26229656..6a405cd1 100644 --- a/doc/api/a00139_source.html +++ b/doc/api/a00139_source.html @@ -3,8 +3,8 @@ - -GLM: ulp.hpp Source File + +0.9.6: vec2.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,64 +41,25 @@
    -
    gtc/ulp.hpp
    +
    vec2.hpp
    Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_GTC_ulp
    -
    40 #define GLM_GTC_ulp
    -
    41 
    -
    42 // Dependencies
    -
    43 #include "../detail/setup.hpp"
    -
    44 #include "../detail/precision.hpp"
    -
    45 #include "../detail/type_int.hpp"
    -
    46 
    -
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    48 # pragma message("GLM: GLM_GTC_ulp extension included")
    -
    49 #endif
    -
    50 
    -
    51 namespace glm
    -
    52 {
    -
    55 
    -
    58  template <typename genType>
    -
    59  GLM_FUNC_DECL genType next_float(genType const & x);
    -
    60 
    -
    63  template <typename genType>
    -
    64  GLM_FUNC_DECL genType prev_float(genType const & x);
    -
    65 
    -
    68  template <typename genType>
    -
    69  GLM_FUNC_DECL genType next_float(genType const & x, uint const & Distance);
    -
    70 
    -
    73  template <typename genType>
    -
    74  GLM_FUNC_DECL genType prev_float(genType const & x, uint const & Distance);
    -
    75 
    -
    78  template <typename T>
    -
    79  GLM_FUNC_DECL uint float_distance(T const & x, T const & y);
    -
    80 
    -
    83  template<typename T, template<typename> class vecType>
    -
    84  GLM_FUNC_DECL vecType<uint> float_distance(vecType<T> const & x, vecType<T> const & y);
    -
    85 
    -
    87 }// namespace glm
    -
    88 
    -
    89 #include "ulp.inl"
    -
    90 
    -
    91 #endif//GLM_GTC_ulp
    -
    92 
    -
    GLM_FUNC_DECL genType next_float(genType const &x)
    Return the next ULP value(s) after the input value(s).
    -
    unsigned int uint
    Unsigned integer type.
    Definition: type_int.hpp:171
    -
    GLM_FUNC_DECL uint float_distance(T const &x, T const &y)
    Return the distance in the number of ULP between 2 scalars.
    -
    GLM_FUNC_DECL genType prev_float(genType const &x)
    Return the previous ULP value(s) before the input value(s).
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_vec2.hpp"
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00140.html b/doc/api/a00140.html new file mode 100644 index 00000000..396624a4 --- /dev/null +++ b/doc/api/a00140.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: vec3.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    vec3.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    + +

    Definition in file vec3.hpp.

    +
    + + + + diff --git a/doc/api/a00140_source.html b/doc/api/a00140_source.html index 8fa1ec2b..2f32f92c 100644 --- a/doc/api/a00140_source.html +++ b/doc/api/a00140_source.html @@ -3,8 +3,8 @@ - -GLM: ulp.hpp Source File + +0.9.6: vec3.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,25 @@
    -
    gtx/ulp.hpp
    +
    vec3.hpp
    -
    1 
    -
    24 #if(defined(GLM_MESSAGES))
    -
    25 # pragma message("GLM: GLM_GTX_ulp extension is deprecated, include GLM_GTC_ulp (glm/gtc/ulp.hpp) instead")
    -
    26 #endif
    -
    27 
    -
    28 // Promoted:
    -
    29 #include "../gtc/ulp.hpp"
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_vec3.hpp"
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00141.html b/doc/api/a00141.html new file mode 100644 index 00000000..fd652635 --- /dev/null +++ b/doc/api/a00141.html @@ -0,0 +1,72 @@ + + + + + + +0.9.6: vec4.hpp File Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + + +
    +
    +
    +
    vec4.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    OpenGL Mathematics (glm.g-truc.net)

    +

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    +

    GLM Core

    +
    Date
    2013-12-24 / 2013-12-24
    +
    Author
    Christophe Riccio
    + +

    Definition in file vec4.hpp.

    +
    + + + + diff --git a/doc/api/a00141_source.html b/doc/api/a00141_source.html index b12c34ce..266507bf 100644 --- a/doc/api/a00141_source.html +++ b/doc/api/a00141_source.html @@ -3,8 +3,8 @@ - -GLM: unsigned_int.hpp Source File + +0.9.6: vec4.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,24 +41,25 @@
    -
    unsigned_int.hpp
    +
    vec4.hpp
    -
    1 
    -
    24 #if(defined(GLM_MESSAGES))
    -
    25 # pragma message("GLM: GLM_GTX_unsigned_int extension is deprecated, include GLM_GTX_integer instead")
    -
    26 #endif
    +Go to the documentation of this file.
    1 
    +
    29 #pragma once
    +
    30 
    +
    31 #include "detail/type_vec4.hpp"
    +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00142.html b/doc/api/a00142.html index d9bf4109..f5946dbe 100644 --- a/doc/api/a00142.html +++ b/doc/api/a00142.html @@ -3,8 +3,8 @@ - -GLM: vec1.hpp File Reference + +0.9.6: vector_angle.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,71 +41,52 @@
    -
    vec1.hpp File Reference
    +
    vector_angle.hpp File Reference

    Go to the source code of this file.

    - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + +

    -Typedefs

    typedef highp_bvec1 bvec1
     
    typedef highp_bvec1_t highp_bvec1
     
    typedef highp_ivec1_t highp_ivec1
     
    typedef highp_uvec1_t highp_uvec1
     
    typedef highp_ivec1 ivec1
     
    typedef lowp_bvec1_t lowp_bvec1
     
    typedef lowp_ivec1_t lowp_ivec1
     
    typedef lowp_uvec1_t lowp_uvec1
     
    typedef mediump_bvec1_t mediump_bvec1
     
    typedef mediump_ivec1_t mediump_ivec1
     
    typedef mediump_uvec1_t mediump_uvec1
     
    typedef highp_uvec1 uvec1
     
    typedef highp_vec1 vec1
     

    +Functions

    template<typename vecType >
    GLM_FUNC_DECL vecType::value_type angle (vecType const &x, vecType const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T orientedAngle (tvec2< T, P > const &x, tvec2< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T orientedAngle (tvec3< T, P > const &x, tvec3< T, P > const &y, tvec3< T, P > const &ref)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_vec1

    -
    Date
    2010-02-08 / 2011-06-07
    +

    GLM_GTX_vector_angle

    +
    Date
    2005-12-30 / 2011-06-07
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    +
    See also
    GLM Core (dependence)
    +
    +GLM_GTX_quaternion (dependence)
    +
    +gtx_epsilon (dependence)
    -

    Definition in file vec1.hpp.

    +

    Definition in file vector_angle.hpp.

    diff --git a/doc/api/a00142_source.html b/doc/api/a00142_source.html index 0f6b8955..42c05146 100644 --- a/doc/api/a00142_source.html +++ b/doc/api/a00142_source.html @@ -3,8 +3,8 @@ - -GLM: vec1.hpp Source File + +0.9.6: vector_angle.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,122 +41,58 @@
    -
    vec1.hpp
    +
    vector_angle.hpp
    Go to the documentation of this file.
    1 
    -
    37 #ifndef GLM_GTX_vec1
    -
    38 #define GLM_GTX_vec1
    -
    39 
    -
    40 // Dependency:
    -
    41 #include "../glm.hpp"
    -
    42 #include "../detail/type_vec1.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_vec1 extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    53  typedef highp_vec1_t highp_vec1;
    -
    54 
    -
    58  typedef mediump_vec1_t mediump_vec1;
    -
    59 
    -
    63  typedef lowp_vec1_t lowp_vec1;
    +
    40 #pragma once
    +
    41 
    +
    42 // Dependency:
    +
    43 #include "../glm.hpp"
    +
    44 #include "../gtc/epsilon.hpp"
    +
    45 #include "../gtx/quaternion.hpp"
    +
    46 #include "../gtx/rotate_vector.hpp"
    +
    47 
    +
    48 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    49 # pragma message("GLM: GLM_GTX_vector_angle extension included")
    +
    50 #endif
    +
    51 
    +
    52 namespace glm
    +
    53 {
    +
    56 
    +
    60  template <typename vecType>
    +
    61  GLM_FUNC_DECL typename vecType::value_type angle(
    +
    62  vecType const & x,
    +
    63  vecType const & y);
    64 
    -
    68  typedef highp_ivec1_t highp_ivec1;
    -
    69 
    -
    73  typedef mediump_ivec1_t mediump_ivec1;
    -
    74 
    -
    78  typedef lowp_ivec1_t lowp_ivec1;
    -
    79 
    -
    83  typedef highp_uvec1_t highp_uvec1;
    +
    68  template <typename T, precision P>
    +
    69  GLM_FUNC_DECL T orientedAngle(
    +
    70  tvec2<T, P> const & x,
    +
    71  tvec2<T, P> const & y);
    +
    72 
    +
    76  template <typename T, precision P>
    +
    77  GLM_FUNC_DECL T orientedAngle(
    +
    78  tvec3<T, P> const & x,
    +
    79  tvec3<T, P> const & y,
    +
    80  tvec3<T, P> const & ref);
    +
    81 
    +
    83 }// namespace glm
    84 
    -
    88  typedef mediump_uvec1_t mediump_uvec1;
    -
    89 
    -
    93  typedef lowp_uvec1_t lowp_uvec1;
    -
    94 
    -
    98  typedef highp_bvec1_t highp_bvec1;
    -
    99 
    -
    103  typedef mediump_bvec1_t mediump_bvec1;
    -
    104 
    -
    108  typedef lowp_bvec1_t lowp_bvec1;
    -
    109 
    -
    111  // vec1 definition
    -
    112 
    -
    113 #if(defined(GLM_PRECISION_HIGHP_BOOL))
    -
    114  typedef highp_bvec1 bvec1;
    -
    115 #elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
    -
    116  typedef mediump_bvec1 bvec1;
    -
    117 #elif(defined(GLM_PRECISION_LOWP_BOOL))
    -
    118  typedef lowp_bvec1 bvec1;
    -
    119 #else
    -
    120  typedef highp_bvec1 bvec1;
    -
    123 #endif//GLM_PRECISION
    -
    124 
    -
    125 #if(defined(GLM_PRECISION_HIGHP_FLOAT))
    -
    126  typedef highp_vec1 vec1;
    -
    127 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
    -
    128  typedef mediump_vec1 vec1;
    -
    129 #elif(defined(GLM_PRECISION_LOWP_FLOAT))
    -
    130  typedef lowp_vec1 vec1;
    -
    131 #else
    -
    132  typedef highp_vec1 vec1;
    -
    135 #endif//GLM_PRECISION
    -
    136 
    -
    137 #if(defined(GLM_PRECISION_HIGHP_INT))
    -
    138  typedef highp_ivec1 ivec1;
    -
    139 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
    -
    140  typedef mediump_ivec1 ivec1;
    -
    141 #elif(defined(GLM_PRECISION_LOWP_INT))
    -
    142  typedef lowp_ivec1 ivec1;
    -
    143 #else
    -
    144  typedef highp_ivec1 ivec1;
    -
    147 #endif//GLM_PRECISION
    -
    148 
    -
    149 #if(defined(GLM_PRECISION_HIGHP_UINT))
    -
    150  typedef highp_uvec1 uvec1;
    -
    151 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
    -
    152  typedef mediump_uvec1 uvec1;
    -
    153 #elif(defined(GLM_PRECISION_LOWP_UINT))
    -
    154  typedef lowp_uvec1 uvec1;
    -
    155 #else
    -
    156  typedef highp_uvec1 uvec1;
    -
    159 #endif//GLM_PRECISION
    -
    160 
    -
    161 }// namespace glm
    -
    162 
    -
    163 #include "vec1.inl"
    -
    164 
    -
    165 #endif//GLM_GTX_vec1
    -
    166 
    -
    lowp_uvec1_t lowp_uvec1
    1 component vector of low precision unsigned integer numbers.
    Definition: vec1.hpp:93
    -
    mediump_uvec1_t mediump_uvec1
    1 component vector of medium precision unsigned integer numbers.
    Definition: vec1.hpp:88
    -
    detail::tvec1< float, highp > highp_vec1
    High single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1601
    -
    highp_ivec1 ivec1
    1 component vector of signed integer numbers.
    Definition: vec1.hpp:146
    -
    highp_ivec1_t highp_ivec1
    1 component vector of high precision signed integer numbers.
    Definition: vec1.hpp:68
    -
    detail::tvec1< float, mediump > mediump_vec1
    Medium single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1567
    -
    detail::tvec1< float, lowp > lowp_vec1
    Low single-precision floating-point vector of 1 component.
    Definition: fwd.hpp:1533
    -
    highp_uvec1_t highp_uvec1
    1 component vector of high precision unsigned integer numbers.
    Definition: vec1.hpp:83
    -
    highp_vec1 vec1
    1 component vector of floating-point numbers.
    Definition: vec1.hpp:134
    -
    highp_bvec1 bvec1
    1 component vector of boolean.
    Definition: vec1.hpp:122
    -
    mediump_bvec1_t mediump_bvec1
    1 component vector of medium precision boolean.
    Definition: vec1.hpp:103
    -
    mediump_ivec1_t mediump_ivec1
    1 component vector of medium precision signed integer numbers.
    Definition: vec1.hpp:73
    -
    highp_uvec1 uvec1
    1 component vector of unsigned integer numbers.
    Definition: vec1.hpp:158
    -
    lowp_ivec1_t lowp_ivec1
    1 component vector of low precision signed integer numbers.
    Definition: vec1.hpp:78
    -
    highp_bvec1_t highp_bvec1
    1 component vector of high precision boolean.
    Definition: vec1.hpp:98
    -
    lowp_bvec1_t lowp_bvec1
    1 component vector of low precision boolean.
    Definition: vec1.hpp:108
    +
    85 #include "vector_angle.inl"
    +
    GLM_FUNC_DECL vecType::value_type angle(vecType const &x, vecType const &y)
    Returns the absolute angle between two vectors Parameters need to be normalized.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL T orientedAngle(tvec3< T, P > const &x, tvec3< T, P > const &y, tvec3< T, P > const &ref)
    Returns the oriented angle between two 3d vectors based from a reference axis.
    diff --git a/doc/api/a00143.html b/doc/api/a00143.html index 30b11efa..4b2287ad 100644 --- a/doc/api/a00143.html +++ b/doc/api/a00143.html @@ -3,8 +3,8 @@ - -GLM: vec2.hpp File Reference + +0.9.6: vector_query.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,32 +41,57 @@
    +
    -
    vec2.hpp File Reference
    +
    vector_query.hpp File Reference

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool areCollinear (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool areOrthogonal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool areOrthonormal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isCompNull (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool isNormalized (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool isNull (vecType< T, P > const &v, T const &epsilon)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTX_vector_query

    +
    Date
    2008-03-10 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    -

    Definition in file vec2.hpp.

    +

    Definition in file vector_query.hpp.

    diff --git a/doc/api/a00143_source.html b/doc/api/a00143_source.html index df9fa722..68ca38ff 100644 --- a/doc/api/a00143_source.html +++ b/doc/api/a00143_source.html @@ -3,8 +3,8 @@ - -GLM: vec2.hpp Source File + +0.9.6: vector_query.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,64 @@
    -
    vec2.hpp
    +
    vector_query.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_VEC2_INCLUDED
    -
    30 #define GLM_VEC2_INCLUDED
    -
    31 
    -
    32 #include "detail/type_vec2.hpp"
    -
    33 
    -
    34 #endif//GLM_VEC2_INCLUDED
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 #include <cfloat>
    +
    43 #include <limits>
    +
    44 
    +
    45 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    46 # pragma message("GLM: GLM_GTX_vector_query extension included")
    +
    47 #endif
    +
    48 
    +
    49 namespace glm
    +
    50 {
    +
    53 
    +
    56  template <typename T, precision P, template <typename, precision> class vecType>
    +
    57  GLM_FUNC_DECL bool areCollinear(vecType<T, P> const & v0, vecType<T, P> const & v1, T const & epsilon);
    +
    58 
    +
    61  template <typename T, precision P, template <typename, precision> class vecType>
    +
    62  GLM_FUNC_DECL bool areOrthogonal(vecType<T, P> const & v0, vecType<T, P> const & v1, T const & epsilon);
    +
    63 
    +
    66  template <typename T, precision P, template <typename, precision> class vecType>
    +
    67  GLM_FUNC_DECL bool isNormalized(vecType<T, P> const & v, T const & epsilon);
    +
    68 
    +
    71  template <typename T, precision P, template <typename, precision> class vecType>
    +
    72  GLM_FUNC_DECL bool isNull(vecType<T, P> const & v, T const & epsilon);
    +
    73 
    +
    76  template <typename T, precision P, template <typename, precision> class vecType>
    +
    77  GLM_FUNC_DECL vecType<bool, P> isCompNull(vecType<T, P> const & v, T const & epsilon);
    +
    78 
    +
    81  template <typename T, precision P, template <typename, precision> class vecType>
    +
    82  GLM_FUNC_DECL bool areOrthonormal(vecType<T, P> const & v0, vecType<T, P> const & v1, T const & epsilon);
    +
    83 
    +
    85 }// namespace glm
    +
    86 
    +
    87 #include "vector_query.inl"
    +
    GLM_FUNC_DECL bool isNormalized(vecType< T, P > const &v, T const &epsilon)
    Check whether a vector is normalized.
    +
    GLM_FUNC_DECL genType epsilon()
    Return the epsilon constant for floating point types.
    +
    GLM_FUNC_DECL bool areOrthonormal(vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
    Check whether two vectors are orthonormal.
    +
    GLM_FUNC_DECL vecType< bool, P > isCompNull(vecType< T, P > const &v, T const &epsilon)
    Check whether a each component of a vector is null.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL bool areOrthogonal(vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
    Check whether two vectors are orthogonals.
    +
    GLM_FUNC_DECL bool areCollinear(vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
    Check whether two vectors are collinears.
    +
    GLM_FUNC_DECL bool isNull(vecType< T, P > const &v, T const &epsilon)
    Check whether a vector is null.
    diff --git a/doc/api/a00144.html b/doc/api/a00144.html index f745ada8..50b559fa 100644 --- a/doc/api/a00144.html +++ b/doc/api/a00144.html @@ -3,8 +3,8 @@ - -GLM: vec3.hpp File Reference + +0.9.6: vector_relational.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,12 +41,12 @@
    -
    vec3.hpp File Reference
    +
    vector_relational.hpp File Reference
    @@ -58,17 +56,17 @@

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    +

    GLM Core

    Date
    2013-12-24 / 2013-12-24
    Author
    Christophe Riccio
    -

    Definition in file vec3.hpp.

    +

    Definition in file vector_relational.hpp.

    diff --git a/doc/api/a00144_source.html b/doc/api/a00144_source.html index 0f2cb4c5..95af8f1a 100644 --- a/doc/api/a00144_source.html +++ b/doc/api/a00144_source.html @@ -3,8 +3,8 @@ - -GLM: vec3.hpp Source File + +0.9.6: vector_relational.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,25 @@
    -
    vec3.hpp
    +
    vector_relational.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_VEC3_INCLUDED
    -
    30 #define GLM_VEC3_INCLUDED
    -
    31 
    -
    32 #include "detail/type_vec3.hpp"
    -
    33 
    -
    34 #endif//GLM_VEC3_INCLUDED
    +
    29 #pragma once
    +
    30 
    + +
    OpenGL Mathematics (glm.g-truc.net)
    diff --git a/doc/api/a00145.html b/doc/api/a00145.html index dab97b44..a8a4e636 100644 --- a/doc/api/a00145.html +++ b/doc/api/a00145.html @@ -3,8 +3,8 @@ - -GLM: vec4.hpp File Reference + +0.9.6: wrap.hpp File Reference @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,32 +41,48 @@
    +
    -
    vec4.hpp File Reference
    +
    wrap.hpp File Reference

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType clamp (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType mirrorRepeat (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType repeat (genType const &Texcoord)
     

    Detailed Description

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    -
    Date
    2013-12-24 / 2013-12-24
    -
    Author
    Christophe Riccio
    +

    GLM_GTX_wrap

    +
    Date
    2009-11-25 / 2011-06-07
    +
    Author
    Christophe Riccio
    +
    See also
    GLM Core (dependence)
    -

    Definition in file vec4.hpp.

    +

    Definition in file wrap.hpp.

    diff --git a/doc/api/a00145_source.html b/doc/api/a00145_source.html index 797aebb1..7517949b 100644 --- a/doc/api/a00145_source.html +++ b/doc/api/a00145_source.html @@ -3,8 +3,8 @@ - -GLM: vec4.hpp Source File + +0.9.6: wrap.hpp Source File @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -43,27 +41,49 @@
    -
    vec4.hpp
    +
    wrap.hpp
    Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_VEC4_INCLUDED
    -
    30 #define GLM_VEC4_INCLUDED
    -
    31 
    -
    32 #include "detail/type_vec4.hpp"
    -
    33 
    -
    34 #endif//GLM_VEC4_INCLUDED
    +
    38 #pragma once
    +
    39 
    +
    40 // Dependency:
    +
    41 #include "../glm.hpp"
    +
    42 
    +
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    44 # pragma message("GLM: GLM_GTX_wrap extension included")
    +
    45 #endif
    +
    46 
    +
    47 namespace glm
    +
    48 {
    +
    51 
    +
    54  template <typename genType>
    +
    55  GLM_FUNC_DECL genType clamp(genType const & Texcoord);
    +
    56 
    +
    59  template <typename genType>
    +
    60  GLM_FUNC_DECL genType repeat(genType const & Texcoord);
    +
    61 
    +
    64  template <typename genType>
    +
    65  GLM_FUNC_DECL genType mirrorRepeat(genType const & Texcoord);
    +
    66 
    +
    68 }// namespace glm
    +
    69 
    +
    70 #include "wrap.inl"
    +
    GLM_FUNC_DECL genType mirrorRepeat(genType const &Texcoord)
    Simulate GL_MIRROR_REPEAT OpenGL wrap mode.
    +
    Definition: _noise.hpp:31
    +
    GLM_FUNC_DECL genType repeat(genType const &Texcoord)
    Simulate GL_REPEAT OpenGL wrap mode.
    +
    GLM_FUNC_DECL genType clamp(genType const &Texcoord)
    Simulate GL_CLAMP OpenGL wrap mode.
    diff --git a/doc/api/a00146.html b/doc/api/a00146.html deleted file mode 100644 index bdaac867..00000000 --- a/doc/api/a00146.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - -GLM: vector_angle.hpp File Reference - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    - -
    -
    vector_angle.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - -

    -Functions

    template<typename vecType >
    GLM_FUNC_QUALIFIER
    -vecType::value_type 
    angle (vecType const &x, vecType const &y)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec2< T, P > const &x, detail::tvec2< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y, detail::tvec3< T, P > const &ref)
     
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_vector_angle

    -
    Date
    2005-12-30 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTX_quaternion (dependence)
    -
    -gtx_epsilon (dependence)
    - -

    Definition in file vector_angle.hpp.

    -
    - - - - diff --git a/doc/api/a00146_source.html b/doc/api/a00146_source.html deleted file mode 100644 index 44fd9bf4..00000000 --- a/doc/api/a00146_source.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - -GLM: vector_angle.hpp Source File - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    -
    -
    vector_angle.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    -
    40 #ifndef GLM_GTX_vector_angle
    -
    41 #define GLM_GTX_vector_angle
    -
    42 
    -
    43 // Dependency:
    -
    44 #include "../glm.hpp"
    -
    45 #include "../gtc/epsilon.hpp"
    -
    46 #include "../gtx/quaternion.hpp"
    -
    47 #include "../gtx/rotate_vector.hpp"
    -
    48 
    -
    49 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    50 # pragma message("GLM: GLM_GTX_vector_angle extension included")
    -
    51 #endif
    -
    52 
    -
    53 namespace glm
    -
    54 {
    -
    57 
    -
    61  template <typename vecType>
    -
    62  GLM_FUNC_QUALIFIER typename vecType::value_type angle(
    -
    63  vecType const & x,
    -
    64  vecType const & y);
    -
    65 
    -
    69  template <typename T, precision P>
    -
    70  GLM_FUNC_QUALIFIER T orientedAngle(
    -
    71  detail::tvec2<T, P> const & x,
    -
    72  detail::tvec2<T, P> const & y);
    -
    73 
    -
    77  template <typename T, precision P>
    -
    78  GLM_FUNC_QUALIFIER T orientedAngle(
    -
    79  detail::tvec3<T, P> const & x,
    -
    80  detail::tvec3<T, P> const & y,
    -
    81  detail::tvec3<T, P> const & ref);
    -
    82 
    -
    84 }// namespace glm
    -
    85 
    -
    86 #include "vector_angle.inl"
    -
    87 
    -
    88 #endif//GLM_GTX_vector_angle
    -
    GLM_FUNC_QUALIFIER T orientedAngle(detail::tvec2< T, P > const &x, detail::tvec2< T, P > const &y)
    Returns the oriented angle between two 2d vectors Parameters need to be normalized.
    -
    GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
    Returns the quaternion rotation angle.
    -
    - - - - diff --git a/doc/api/a00147.html b/doc/api/a00147.html deleted file mode 100644 index 3ec552e5..00000000 --- a/doc/api/a00147.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - -GLM: vector_query.hpp File Reference - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    - -
    -
    vector_query.hpp File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     glm
     
    - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    bool areCollinear (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool areOrthogonal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool areOrthonormal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    vecType< bool, P > isCompNull (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool isNormalized (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool isNull (vecType< T, P > const &v, T const &epsilon)
     
    -

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_GTX_vector_query

    -
    Date
    2008-03-10 / 2011-06-07
    -
    Author
    Christophe Riccio
    -
    See Also
    GLM Core (dependence)
    - -

    Definition in file vector_query.hpp.

    -
    - - - - diff --git a/doc/api/a00147_source.html b/doc/api/a00147_source.html deleted file mode 100644 index 7e38f1da..00000000 --- a/doc/api/a00147_source.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -GLM: vector_query.hpp Source File - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    -
    -
    vector_query.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_vector_query
    -
    39 #define GLM_GTX_vector_query
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 #include <cfloat>
    -
    44 #include <limits>
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    47 # pragma message("GLM: GLM_GTX_vector_query extension included")
    -
    48 #endif
    -
    49 
    -
    50 namespace glm
    -
    51 {
    -
    54 
    -
    57  template <typename T, precision P, template <typename, precision> class vecType>
    -
    58  bool areCollinear(vecType<T, P> const & v0, vecType<T, P> const & v1, T const & epsilon);
    -
    59 
    -
    62  template <typename T, precision P, template <typename, precision> class vecType>
    -
    63  bool areOrthogonal(vecType<T, P> const & v0, vecType<T, P> const & v1, T const & epsilon);
    -
    64 
    -
    67  template <typename T, precision P, template <typename, precision> class vecType>
    -
    68  bool isNormalized(vecType<T, P> const & v, T const & epsilon);
    -
    69 
    -
    72  template <typename T, precision P, template <typename, precision> class vecType>
    -
    73  bool isNull(vecType<T, P> const & v, T const & epsilon);
    -
    74 
    -
    77  template <typename T, precision P, template <typename, precision> class vecType>
    -
    78  vecType<bool, P> isCompNull(vecType<T, P> const & v, T const & epsilon);
    -
    79 
    -
    82  template <typename T, precision P, template <typename, precision> class vecType>
    -
    83  bool areOrthonormal(vecType<T, P> const & v0, vecType<T, P> const & v1, T const & epsilon);
    -
    84 
    -
    86 }// namespace glm
    -
    87 
    -
    88 #include "vector_query.inl"
    -
    89 
    -
    90 #endif//GLM_GTX_vector_query
    -
    GLM_FUNC_DECL genType epsilon()
    Return the epsilon constant for floating point types.
    -
    bool areOrthonormal(vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
    Check whether two vectors are orthonormal.
    -
    bool areOrthogonal(vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
    Check whether two vectors are orthogonals.
    -
    bool areCollinear(vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
    Check whether two vectors are collinears.
    -
    bool isNormalized(detail::tmat2x2< T, P > const &m, T const &epsilon)
    Return whether a matrix is a normalized matrix.
    -
    bool isNull(detail::tmat2x2< T, P > const &m, T const &epsilon)
    Return whether a matrix a null matrix.
    -
    vecType< bool, P > isCompNull(vecType< T, P > const &v, T const &epsilon)
    Check whether a each component of a vector is null.
    -
    - - - - diff --git a/doc/api/a00148_source.html b/doc/api/a00148_source.html deleted file mode 100644 index fb2aa460..00000000 --- a/doc/api/a00148_source.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - -GLM: vector_relational.hpp Source File - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    -
    -
    vector_relational.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    -
    29 #ifndef GLM_VECTOR_RELATIONAL_INCLUDED
    -
    30 #define GLM_VECTOR_RELATIONAL_INCLUDED
    -
    31 
    -
    32 #include "detail/func_vector_relational.hpp"
    -
    33 
    -
    34 #endif//GLM_VECTOR_RELATIONAL_INCLUDED
    -
    - - - - diff --git a/doc/api/a00149_source.html b/doc/api/a00149_source.html deleted file mode 100644 index 24b76161..00000000 --- a/doc/api/a00149_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - -GLM: wrap.hpp Source File - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    -
    -
    wrap.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    -
    38 #ifndef GLM_GTX_wrap
    -
    39 #define GLM_GTX_wrap
    -
    40 
    -
    41 // Dependency:
    -
    42 #include "../glm.hpp"
    -
    43 
    -
    44 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    45 # pragma message("GLM: GLM_GTX_wrap extension included")
    -
    46 #endif
    -
    47 
    -
    48 namespace glm
    -
    49 {
    -
    52 
    -
    55  template <typename genType>
    -
    56  GLM_FUNC_DECL genType clamp(genType const & Texcoord);
    -
    57 
    -
    60  template <typename genType>
    -
    61  GLM_FUNC_DECL genType repeat(genType const & Texcoord);
    -
    62 
    -
    65  template <typename genType>
    -
    66  GLM_FUNC_DECL genType mirrorRepeat(genType const & Texcoord);
    -
    67 
    -
    69 }// namespace glm
    -
    70 
    -
    71 #include "wrap.inl"
    -
    72 
    -
    73 #endif//GLM_GTX_wrap
    -
    GLM_FUNC_DECL genType mirrorRepeat(genType const &Texcoord)
    Simulate GL_MIRROR_REPEAT OpenGL wrap mode.
    -
    GLM_FUNC_DECL genType clamp(genType const &x, genType const &minVal, genType const &maxVal)
    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...
    -
    GLM_FUNC_DECL genType repeat(genType const &Texcoord)
    Simulate GL_REPEAT OpenGL wrap mode.
    -
    - - - - diff --git a/doc/api/a00150.html b/doc/api/a00150.html index ef4163f8..92bae6c8 100644 --- a/doc/api/a00150.html +++ b/doc/api/a00150.html @@ -3,8 +3,8 @@ - -GLM: xstream.hpp File Reference + +0.9.6: Common functions @@ -16,9 +16,9 @@ + @@ -26,52 +26,1098 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + - -
    +
    -
    xstream.hpp File Reference
    +
    Common functions
    - -

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType abs (genType x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > ceil (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType clamp (genType x, genType minVal, genType maxVal)
     
    GLM_FUNC_DECL int floatBitsToInt (float const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< int, P > floatBitsToInt (vecType< float, P > const &v)
     
    GLM_FUNC_DECL uint floatBitsToUint (float const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< uint, P > floatBitsToUint (vecType< float, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > floor (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fma (genType const &a, genType const &b, genType const &c)
     
    template<typename genType >
    GLM_FUNC_DECL genType fract (genType x)
     
    template<typename genType , typename genIType >
    GLM_FUNC_DECL genType frexp (genType const &x, genIType &exp)
     
    GLM_FUNC_DECL float intBitsToFloat (int const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< float, P > intBitsToFloat (vecType< int, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isinf (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isnan (vecType< T, P > const &x)
     
    template<typename genType , typename genIType >
    GLM_FUNC_DECL genType ldexp (genType const &x, genIType const &exp)
     
    template<typename genType >
    GLM_FUNC_DECL genType max (genType x, genType y)
     
    template<typename genType >
    GLM_FUNC_DECL genType min (genType x, genType y)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > mix (vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)
     
    template<typename genType >
    GLM_FUNC_DECL genType mod (genType x, genType y)
     
    template<typename genType >
    GLM_FUNC_DECL genType modf (genType x, genType &i)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > round (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > roundEven (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sign (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType smoothstep (genType edge0, genType edge1, genType x)
     
    template<typename genType >
    GLM_FUNC_DECL genType step (genType edge, genType x)
     
    template<template< typename, precision > class vecType, typename T , precision P>
    GLM_FUNC_DECL vecType< T, P > step (T edge, vecType< T, P > const &x)
     
    template<template< typename, precision > class vecType, typename T , precision P>
    GLM_FUNC_DECL vecType< T, P > step (vecType< T, P > const &edge, vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > trunc (vecType< T, P > const &x)
     
    GLM_FUNC_DECL float uintBitsToFloat (uint const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< float, P > uintBitsToFloat (vecType< uint, P > const &v)
     

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM_VIRTREV_xstream: xml like output

    -
    Date
    2008-05-24 / 2008-05-26
    -
    Author
    Mathieu Roumillac (matrem84.free.fr)
    -
    See Also
    GLM Core (dependence)
    -
    -GLM_GTC_matrix_access (dependence)
    +

    These all operate component-wise.

    +

    The description is per component.

    +

    Function Documentation

    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::abs (genType x)
    +
    -

    Definition in file xstream.hpp.

    -
    +

    Returns x if x >= 0; otherwise, it returns -x.

    +
    Template Parameters
    + + +
    genTypefloating-point or signed integer; scalar or vector types.
    +
    +
    +
    See also
    GLSL abs man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::ceil (vecType< T, P > const & x)
    +
    + +

    Returns a value equal to the nearest integer that is greater than or equal to x.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL ceil man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::clamp (genType x,
    genType minVal,
    genType maxVal 
    )
    +
    + +

    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer; scalar or vector types.
    +
    +
    +
    See also
    GLSL clamp man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +

    Referenced by glm::saturate().

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL int glm::floatBitsToInt (float const & v)
    +
    + +

    Returns a signed integer value representing the encoding of a floating-point value.

    +

    The floating-point value's bit-level representation is preserved.

    +
    See also
    GLSL floatBitsToInt man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<int, P> glm::floatBitsToInt (vecType< float, P > const & v)
    +
    + +

    Returns a signed integer value representing the encoding of a floating-point value.

    +

    The floatingpoint value's bit-level representation is preserved.

    +
    See also
    GLSL floatBitsToInt man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL uint glm::floatBitsToUint (float const & v)
    +
    + +

    Returns a unsigned integer value representing the encoding of a floating-point value.

    +

    The floatingpoint value's bit-level representation is preserved.

    +
    See also
    GLSL floatBitsToUint man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<uint, P> glm::floatBitsToUint (vecType< float, P > const & v)
    +
    + +

    Returns a unsigned integer value representing the encoding of a floating-point value.

    +

    The floatingpoint value's bit-level representation is preserved.

    +
    See also
    GLSL floatBitsToUint man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::floor (vecType< T, P > const & x)
    +
    + +

    Returns a value equal to the nearest integer that is less then or equal to x.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL floor man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::fma (genType const & a,
    genType const & b,
    genType const & c 
    )
    +
    + +

    Computes and returns a * b + c.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL fma man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::fract (genType x)
    +
    + +

    Return x - floor(x).

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL fract man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::frexp (genType const & x,
    genIType & exp 
    )
    +
    + +

    Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent)

    +

    The significand is returned by the function and the exponent is returned in the parameter exp. For a floating-point value of zero, the significant and exponent are both zero. For a floating-point value that is an infinity or is not a number, the results are undefined.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL frexp man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL float glm::intBitsToFloat (int const & v)
    +
    + +

    Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.

    +

    If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

    +
    See also
    GLSL intBitsToFloat man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<float, P> glm::intBitsToFloat (vecType< int, P > const & v)
    +
    + +

    Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.

    +

    If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

    +
    See also
    GLSL intBitsToFloat man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<bool, P> glm::isinf (vecType< T, P > const & x)
    +
    + +

    Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.

    +

    Returns false otherwise, including for implementations with no infinity representations.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL isinf man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<bool, P> glm::isnan (vecType< T, P > const & x)
    +
    + +

    Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.

    +

    Returns false otherwise, including for implementations with no NaN representations.

    +

    /!\ When using compiler fast math, this function may fail.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL isnan man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::ldexp (genType const & x,
    genIType const & exp 
    )
    +
    + +

    Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent)

    +

    If this product is too large to be represented in the floating-point type, the result is undefined.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL ldexp man page;
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::max (genType x,
    genType y 
    )
    +
    + +

    Returns y if x < y; otherwise, it returns x.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer; scalar or vector types.
    +
    +
    +
    See also
    GLSL max man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::min (genType x,
    genType y 
    )
    +
    + +

    Returns y if y < x; otherwise, it returns x.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer; scalar or vector types.
    +
    +
    +
    See also
    GLSL min man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::mix (vecType< T, P > const & x,
    vecType< T, P > const & y,
    vecType< U, P > const & a 
    )
    +
    + +

    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a.

    +

    The value for a is not restricted to the range [0, 1].

    +

    If genTypeU is a boolean scalar or vector: Selects which vector each returned component comes from. For a component of that is false, the corresponding component of x is returned. For a component of a that is true, the corresponding component of y is returned. Components of x and y that are not selected are allowed to be invalid floating point values and will have no effect on the results. Thus, this provides different functionality than genType mix(genType x, genType y, genType(a)) where a is a Boolean vector.

    +
    See also
    GLSL mix man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    +
    Parameters
    + + + + +
    [in]xValue to interpolate.
    [in]yValue to interpolate.
    [in]aInterpolant.
    +
    +
    +
    Template Parameters
    + + + +
    genTypeTFloating point scalar or vector.
    genTypeUFloating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
    +
    +
    +
    #include <glm/glm.hpp>
    +
    ...
    +
    float a;
    +
    bool b;
    + + + + +
    ...
    +
    glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.
    +
    glm::vec4 s = glm::mix(g, h, b); // Teturns g or h;
    +
    glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
    +
    glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
    +
    +

    Referenced by glm::lerp(), and glm::slerp().

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::mod (genType x,
    genType y 
    )
    +
    + +

    Modulus.

    +

    Returns x - y * floor(x / y) for each component in x using the floating point value y.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL mod man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::modf (genType x,
    genType & i 
    )
    +
    + +

    Returns the fractional part of x and sets i to the integer part (as a whole number floating point value).

    +

    Both the return value and the output parameter will have the same sign as x.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL modf man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::round (vecType< T, P > const & x)
    +
    + +

    Returns a value equal to the nearest integer to x.

    +

    The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest. This includes the possibility that round(x) returns the same value as roundEven(x) for all values of x.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL round man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::roundEven (vecType< T, P > const & x)
    +
    + +

    Returns a value equal to the nearest integer to x.

    +

    A fractional part of 0.5 will round toward the nearest even integer. (Both 3.5 and 4.5 for x will return 4.0.)

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL roundEven man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    +
    +New round to even technique
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::sign (vecType< T, P > const & x)
    +
    + +

    Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.

    +
    Template Parameters
    + + +
    genTypeFloating-point or signed integer; scalar or vector types.
    +
    +
    +
    See also
    GLSL sign man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::smoothstep (genType edge0,
    genType edge1,
    genType x 
    )
    +
    + +

    Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 < x < edge1.

    +

    This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to: genType t; t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); return t * t * (3 - 2 * t); Results are undefined if edge0 >= edge1.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL smoothstep man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::step (genType edge,
    genType x 
    )
    +
    + +

    Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.

    +
    See also
    GLSL step man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::step (edge,
    vecType< T, P > const & x 
    )
    +
    + +

    Returns 0.0 if x < edge, otherwise it returns 1.0.

    +
    See also
    GLSL step man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::step (vecType< T, P > const & edge,
    vecType< T, P > const & x 
    )
    +
    + +

    Returns 0.0 if x < edge, otherwise it returns 1.0.

    +
    See also
    GLSL step man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::trunc (vecType< T, P > const & x)
    +
    + +

    Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL trunc man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL float glm::uintBitsToFloat (uint const & v)
    +
    + +

    Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.

    +

    If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

    +
    See also
    GLSL uintBitsToFloat man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<float, P> glm::uintBitsToFloat (vecType< uint, P > const & v)
    +
    + +

    Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.

    +

    If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

    +
    See also
    GLSL uintBitsToFloat man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    + +
    +
    + diff --git a/doc/api/a00150_source.html b/doc/api/a00150_source.html deleted file mode 100644 index 18172ea2..00000000 --- a/doc/api/a00150_source.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - -GLM: xstream.hpp Source File - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - -
    -
    -
    -
    xstream.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    -
    39 #ifndef GLM_VIRTREV_xstream
    -
    40 #define GLM_VIRTREV_xstream GLM_VERSION
    -
    41 
    -
    42 #include "../glm.hpp"
    -
    43 #include "../gtc/matrix_access.hpp"
    -
    44 #include <iostream>
    -
    45 
    -
    46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    -
    47 # pragma message("GLM: GLM_VIRTREV_xstream extension included")
    -
    48 #endif
    -
    49 /*
    -
    50 namespace glm{
    -
    51 namespace detail
    -
    52 {
    -
    53  template<typename T>
    -
    54  std::ostream & operator << (std::ostream & stream, glm::detail::tvec2<T, P> const & vec)
    -
    55  {
    -
    56  stream << "<glm_vec2 ";
    -
    57  stream << "x=\"" << vec.x << "\" ";
    -
    58  stream << "y=\"" << vec.y << "\" ";
    -
    59  stream << "/>";
    -
    60 
    -
    61  return stream;
    -
    62  }
    -
    63 
    -
    64  template<typename T>
    -
    65  std::ostream & operator << (std::ostream & stream, glm::detail::tvec3<T, P> const & vec)
    -
    66  {
    -
    67  stream << "<glm_vec3 ";
    -
    68  stream << "x=\"" << vec.x << "\" ";
    -
    69  stream << "y=\"" << vec.y << "\" ";
    -
    70  stream << "z=\"" << vec.z << "\" ";
    -
    71  stream << "/>";
    -
    72 
    -
    73  return stream;
    -
    74  }
    -
    75 
    -
    76  template<typename T>
    -
    77  std::ostream & operator << (std::ostream & stream, glm::detail::tvec4<T, P> const & vec)
    -
    78  {
    -
    79  stream << "<glm_vec4 ";
    -
    80  stream << "x=\"" << vec.x << "\" ";
    -
    81  stream << "y=\"" << vec.y << "\" ";
    -
    82  stream << "z=\"" << vec.z << "\" ";
    -
    83  stream << "w=\"" << vec.w << "\" ";
    -
    84  stream << "/>";
    -
    85 
    -
    86  return stream;
    -
    87  }
    -
    88 
    -
    89  template<typename T>
    -
    90  std::ostream & operator << (std::ostream & stream, glm::detail::tmat2x2<T, P> const & mat)
    -
    91  {
    -
    92  stream << "<glm_mat2>" << std::endl;
    -
    93  stream << "<row ";
    -
    94  stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
    -
    95  stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
    -
    96  stream << "/>" << std::endl;
    -
    97  stream << "<row ";
    -
    98  stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
    -
    99  stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
    -
    100  stream << "/>" << std::endl;
    -
    101  stream << "</glm_mat2>";
    -
    102 
    -
    103  return stream;
    -
    104  }
    -
    105 
    -
    106  template<typename T>
    -
    107  std::ostream & operator << (std::ostream & stream, glm::detail::tmat3x3<T, P> const & mat)
    -
    108  {
    -
    109  stream << "<glm_mat3>" << std::endl;
    -
    110  stream << "<row ";
    -
    111  stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
    -
    112  stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
    -
    113  stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
    -
    114  stream << "/>" << std::endl;
    -
    115  stream << "<row ";
    -
    116  stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
    -
    117  stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
    -
    118  stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
    -
    119  stream << "/>" << std::endl;
    -
    120  stream << "<row ";
    -
    121  stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
    -
    122  stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
    -
    123  stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
    -
    124  stream << "/>" << std::endl;
    -
    125  stream << "</glm_mat3>";
    -
    126 
    -
    127  return stream;
    -
    128  }
    -
    129 
    -
    130  template<typename T>
    -
    131  std::ostream & operator << (std::ostream & stream, glm::detail::tmat4x4<T, P> const & mat)
    -
    132  {
    -
    133  stream << "<glm_mat4>" << std::endl;
    -
    134  stream << "<row ";
    -
    135  stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
    -
    136  stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
    -
    137  stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
    -
    138  stream << "w=\"" << glm::row(mat, 0)[3] << "\" ";
    -
    139  stream << "/>" << std::endl;
    -
    140  stream << "<row ";
    -
    141  stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
    -
    142  stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
    -
    143  stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
    -
    144  stream << "w=\"" << glm::row(mat, 1)[3] << "\" ";
    -
    145  stream << "/>" << std::endl;
    -
    146  stream << "<row ";
    -
    147  stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
    -
    148  stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
    -
    149  stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
    -
    150  stream << "w=\"" << glm::row(mat, 2)[3] << "\" ";
    -
    151  stream << "/>" << std::endl;
    -
    152  stream << "<row ";
    -
    153  stream << "x=\"" << glm::row(mat, 3)[0] << "\" ";
    -
    154  stream << "y=\"" << glm::row(mat, 3)[1] << "\" ";
    -
    155  stream << "z=\"" << glm::row(mat, 3)[2] << "\" ";
    -
    156  stream << "w=\"" << glm::row(mat, 3)[3] << "\" ";
    -
    157  stream << "/>" << std::endl;
    -
    158  stream << "</glm_mat4>";
    -
    159 
    -
    160  return stream;
    -
    161  }
    -
    162 
    -
    163 }//namespace detail
    -
    164 }//namespace glm
    -
    165 */
    -
    166 #endif//GLM_VIRTREV_xstream
    -
    - - - - diff --git a/doc/api/a00151.html b/doc/api/a00151.html index 8e25d13f..a2bbaf9f 100644 --- a/doc/api/a00151.html +++ b/doc/api/a00151.html @@ -3,8 +3,8 @@ - -GLM: glm Namespace Reference + +0.9.6: Exponential functions @@ -16,9 +16,9 @@ + @@ -26,4041 +26,291 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + -
    -
    glm Namespace Reference
    +
    Exponential functions
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    -typedef bool bool1
     
    -typedef bool bool1x1
     
    -typedef detail::tvec2< bool,
    -highp > 
    bool2
     
    -typedef detail::tmat2x2< bool,
    -highp > 
    bool2x2
     
    -typedef detail::tmat2x3< bool,
    -highp > 
    bool2x3
     
    -typedef detail::tmat2x4< bool,
    -highp > 
    bool2x4
     
    -typedef detail::tvec3< bool,
    -highp > 
    bool3
     
    -typedef detail::tmat3x2< bool,
    -highp > 
    bool3x2
     
    -typedef detail::tmat3x3< bool,
    -highp > 
    bool3x3
     
    -typedef detail::tmat3x4< bool,
    -highp > 
    bool3x4
     
    -typedef detail::tvec4< bool,
    -highp > 
    bool4
     
    -typedef detail::tmat4x2< bool,
    -highp > 
    bool4x2
     
    -typedef detail::tmat4x3< bool,
    -highp > 
    bool4x3
     
    -typedef detail::tmat4x4< bool,
    -highp > 
    bool4x4
     
    typedef highp_bvec1 bvec1
     
    typedef highp_bvec2 bvec2
     
    typedef highp_bvec3 bvec3
     
    typedef highp_bvec4 bvec4
     
    typedef detail::uint8 byte
     
    typedef highp_ddualquat ddualquat
     
    typedef highp_dmat2x2 dmat2
     
    typedef highp_dmat2x2 dmat2x2
     
    typedef highp_dmat2x3 dmat2x3
     
    typedef highp_dmat2x4 dmat2x4
     
    typedef highp_dmat3x3 dmat3
     
    typedef highp_dmat3x2 dmat3x2
     
    typedef highp_dmat3x3 dmat3x3
     
    typedef highp_dmat3x4 dmat3x4
     
    typedef highp_dmat4x4 dmat4
     
    typedef highp_dmat4x2 dmat4x2
     
    typedef highp_dmat4x3 dmat4x3
     
    typedef highp_dmat4x4 dmat4x4
     
    -typedef double double1
     
    -typedef double double1x1
     
    -typedef detail::tvec2< double,
    -highp > 
    double2
     
    -typedef detail::tmat2x2
    -< double, highp > 
    double2x2
     
    -typedef detail::tmat2x3
    -< double, highp > 
    double2x3
     
    -typedef detail::tmat2x4
    -< double, highp > 
    double2x4
     
    -typedef detail::tvec3< double,
    -highp > 
    double3
     
    -typedef detail::tmat3x2
    -< double, highp > 
    double3x2
     
    -typedef detail::tmat3x3
    -< double, highp > 
    double3x3
     
    -typedef detail::tmat3x4
    -< double, highp > 
    double3x4
     
    -typedef detail::tvec4< double,
    -highp > 
    double4
     
    -typedef detail::tmat4x2
    -< double, highp > 
    double4x2
     
    -typedef detail::tmat4x3
    -< double, highp > 
    double4x3
     
    -typedef detail::tmat4x4
    -< double, highp > 
    double4x4
     
    typedef highp_dquat dquat
     
    typedef highp_fdualquat dualquat
     
    typedef highp_dvec2 dvec2
     
    typedef highp_dvec3 dvec3
     
    typedef highp_dvec4 dvec4
     
    typedef detail::uint32 dword
     
    typedef highp_float32_t f32
     
    typedef f32mat2x2 f32mat2
     
    typedef highp_f32mat2x2 f32mat2x2
     
    typedef highp_f32mat2x3 f32mat2x3
     
    typedef highp_f32mat2x4 f32mat2x4
     
    typedef f32mat3x3 f32mat3
     
    typedef highp_f32mat3x2 f32mat3x2
     
    typedef highp_f32mat3x3 f32mat3x3
     
    typedef highp_f32mat3x4 f32mat3x4
     
    typedef f32mat4x4 f32mat4
     
    typedef highp_f32mat4x2 f32mat4x2
     
    typedef highp_f32mat4x3 f32mat4x3
     
    typedef highp_f32mat4x4 f32mat4x4
     
    typedef highp_f32quat f32quat
     
    typedef highp_f32vec1 f32vec1
     
    typedef highp_f32vec2 f32vec2
     
    typedef highp_f32vec3 f32vec3
     
    typedef highp_f32vec4 f32vec4
     
    typedef highp_float64_t f64
     
    typedef f64mat2x2 f64mat2
     
    typedef highp_f64mat2x2 f64mat2x2
     
    typedef highp_f64mat2x3 f64mat2x3
     
    typedef highp_f64mat2x4 f64mat2x4
     
    typedef f64mat3x3 f64mat3
     
    typedef highp_f64mat3x2 f64mat3x2
     
    typedef highp_f64mat3x3 f64mat3x3
     
    typedef highp_f64mat3x4 f64mat3x4
     
    typedef f64mat4x4 f64mat4
     
    typedef highp_f64mat4x2 f64mat4x2
     
    typedef highp_f64mat4x3 f64mat4x3
     
    typedef highp_f64mat4x4 f64mat4x4
     
    typedef highp_f64quat f64quat
     
    typedef highp_f64vec1 f64vec1
     
    typedef highp_f64vec2 f64vec2
     
    typedef highp_f64vec3 f64vec3
     
    typedef highp_f64vec4 f64vec4
     
    typedef highp_fdualquat fdualquat
     
    -typedef float float1
     
    -typedef float float1x1
     
    -typedef detail::tvec2< float,
    -highp > 
    float2
     
    -typedef detail::tmat2x2< float,
    -highp > 
    float2x2
     
    -typedef detail::tmat2x3< float,
    -highp > 
    float2x3
     
    -typedef detail::tmat2x4< float,
    -highp > 
    float2x4
     
    -typedef detail::tvec3< float,
    -highp > 
    float3
     
    typedef float float32
     
    typedef highp_float32_t float32_t
     
    -typedef detail::tmat3x2< float,
    -highp > 
    float3x2
     
    -typedef detail::tmat3x3< float,
    -highp > 
    float3x3
     
    -typedef detail::tmat3x4< float,
    -highp > 
    float3x4
     
    -typedef detail::tvec4< float,
    -highp > 
    float4
     
    -typedef detail::tmat4x2< float,
    -highp > 
    float4x2
     
    -typedef detail::tmat4x3< float,
    -highp > 
    float4x3
     
    -typedef detail::tmat4x4< float,
    -highp > 
    float4x4
     
    typedef double float64
     
    typedef highp_float64_t float64_t
     
    typedef fmat2x2 fmat2
     
    typedef highp_f32mat2x2 fmat2x2
     
    typedef highp_f32mat2x3 fmat2x3
     
    typedef highp_f32mat2x4 fmat2x4
     
    typedef fmat3x3 fmat3
     
    typedef highp_f32mat3x2 fmat3x2
     
    typedef highp_f32mat3x3 fmat3x3
     
    typedef highp_f32mat3x4 fmat3x4
     
    typedef fmat4x4 fmat4
     
    typedef highp_f32mat4x2 fmat4x2
     
    typedef highp_f32mat4x3 fmat4x3
     
    typedef highp_f32mat4x4 fmat4x4
     
    typedef quat fquat
     
    typedef highp_f32vec1 fvec1
     
    typedef highp_f32vec2 fvec2
     
    typedef highp_f32vec3 fvec3
     
    typedef highp_f32vec4 fvec4
     
    typedef highp_bvec1_t highp_bvec1
     
    typedef detail::tvec2< bool,
    -highp > 
    highp_bvec2
     
    typedef detail::tvec3< bool,
    -highp > 
    highp_bvec3
     
    typedef detail::tvec4< bool,
    -highp > 
    highp_bvec4
     
    typedef detail::tdualquat
    -< double, highp > 
    highp_ddualquat
     
    typedef detail::tmat2x2
    -< double, highp > 
    highp_dmat2
     
    typedef detail::tmat2x2
    -< double, highp > 
    highp_dmat2x2
     
    typedef detail::tmat2x3
    -< double, highp > 
    highp_dmat2x3
     
    typedef detail::tmat2x4
    -< double, highp > 
    highp_dmat2x4
     
    typedef detail::tmat3x3
    -< double, highp > 
    highp_dmat3
     
    typedef detail::tmat3x2
    -< double, highp > 
    highp_dmat3x2
     
    typedef detail::tmat3x3
    -< double, highp > 
    highp_dmat3x3
     
    typedef detail::tmat3x4
    -< double, highp > 
    highp_dmat3x4
     
    typedef detail::tmat4x4
    -< double, highp > 
    highp_dmat4
     
    typedef detail::tmat4x2
    -< double, highp > 
    highp_dmat4x2
     
    typedef detail::tmat4x3
    -< double, highp > 
    highp_dmat4x3
     
    typedef detail::tmat4x4
    -< double, highp > 
    highp_dmat4x4
     
    typedef detail::tquat< double,
    -highp > 
    highp_dquat
     
    typedef detail::tdualquat
    -< float, highp > 
    highp_dualquat
     
    typedef detail::tvec2< double,
    -highp > 
    highp_dvec2
     
    typedef detail::tvec3< double,
    -highp > 
    highp_dvec3
     
    typedef detail::tvec4< double,
    -highp > 
    highp_dvec4
     
    typedef float32 highp_f32
     
    typedef highp_f32mat2x2 highp_f32mat2
     
    typedef detail::tmat2x2< f32,
    -highp > 
    highp_f32mat2x2
     
    typedef detail::tmat2x3< f32,
    -highp > 
    highp_f32mat2x3
     
    typedef detail::tmat2x4< f32,
    -highp > 
    highp_f32mat2x4
     
    typedef highp_f32mat3x3 highp_f32mat3
     
    typedef detail::tmat3x2< f32,
    -highp > 
    highp_f32mat3x2
     
    typedef detail::tmat3x3< f32,
    -highp > 
    highp_f32mat3x3
     
    typedef detail::tmat3x4< f32,
    -highp > 
    highp_f32mat3x4
     
    typedef highp_f32mat4x4 highp_f32mat4
     
    typedef detail::tmat4x2< f32,
    -highp > 
    highp_f32mat4x2
     
    typedef detail::tmat4x3< f32,
    -highp > 
    highp_f32mat4x3
     
    typedef detail::tmat4x4< f32,
    -highp > 
    highp_f32mat4x4
     
    typedef detail::tquat< f32, highp > highp_f32quat
     
    typedef detail::tvec1< f32, highp > highp_f32vec1
     
    typedef detail::tvec2< f32, highp > highp_f32vec2
     
    typedef detail::tvec3< f32, highp > highp_f32vec3
     
    typedef detail::tvec4< f32, highp > highp_f32vec4
     
    typedef float64 highp_f64
     
    typedef highp_f64mat2x2 highp_f64mat2
     
    typedef detail::tmat2x2< f64,
    -highp > 
    highp_f64mat2x2
     
    typedef detail::tmat2x3< f64,
    -highp > 
    highp_f64mat2x3
     
    typedef detail::tmat2x4< f64,
    -highp > 
    highp_f64mat2x4
     
    typedef highp_f64mat3x3 highp_f64mat3
     
    typedef detail::tmat3x2< f64,
    -highp > 
    highp_f64mat3x2
     
    typedef detail::tmat3x3< f64,
    -highp > 
    highp_f64mat3x3
     
    typedef detail::tmat3x4< f64,
    -highp > 
    highp_f64mat3x4
     
    typedef highp_f64mat4x4 highp_f64mat4
     
    typedef detail::tmat4x2< f64,
    -highp > 
    highp_f64mat4x2
     
    typedef detail::tmat4x3< f64,
    -highp > 
    highp_f64mat4x3
     
    typedef detail::tmat4x4< f64,
    -highp > 
    highp_f64mat4x4
     
    typedef detail::tquat< f64, highp > highp_f64quat
     
    typedef detail::tvec1< f64, highp > highp_f64vec1
     
    typedef detail::tvec2< f64, highp > highp_f64vec2
     
    typedef detail::tvec3< f64, highp > highp_f64vec3
     
    typedef detail::tvec4< f64, highp > highp_f64vec4
     
    typedef detail::tdualquat
    -< float, highp > 
    highp_fdualquat
     
    typedef highp_float_t highp_float
     
    typedef detail::float32 highp_float32
     
    typedef detail::float32 highp_float32_t
     
    typedef detail::float64 highp_float64
     
    typedef detail::float64 highp_float64_t
     
    typedef highp_fmat2x2 highp_fmat2
     
    typedef detail::tmat2x2< f32,
    -highp > 
    highp_fmat2x2
     
    typedef detail::tmat2x3< f32,
    -highp > 
    highp_fmat2x3
     
    typedef detail::tmat2x4< f32,
    -highp > 
    highp_fmat2x4
     
    typedef highp_fmat3x3 highp_fmat3
     
    typedef detail::tmat3x2< f32,
    -highp > 
    highp_fmat3x2
     
    typedef detail::tmat3x3< f32,
    -highp > 
    highp_fmat3x3
     
    typedef detail::tmat3x4< f32,
    -highp > 
    highp_fmat3x4
     
    typedef highp_fmat4x4 highp_fmat4
     
    typedef detail::tmat4x2< f32,
    -highp > 
    highp_fmat4x2
     
    typedef detail::tmat4x3< f32,
    -highp > 
    highp_fmat4x3
     
    typedef detail::tmat4x4< f32,
    -highp > 
    highp_fmat4x4
     
    typedef highp_quat highp_fquat
     
    typedef detail::tvec1< float,
    -highp > 
    highp_fvec1
     
    typedef detail::tvec2< float,
    -highp > 
    highp_fvec2
     
    typedef detail::tvec3< float,
    -highp > 
    highp_fvec3
     
    typedef detail::tvec4< float,
    -highp > 
    highp_fvec4
     
    typedef detail::int16 highp_i16
     
    typedef detail::tvec1< i16, highp > highp_i16vec1
     
    typedef detail::tvec2< i16, highp > highp_i16vec2
     
    typedef detail::tvec3< i16, highp > highp_i16vec3
     
    typedef detail::tvec4< i16, highp > highp_i16vec4
     
    typedef detail::int32 highp_i32
     
    typedef detail::tvec1< i32, highp > highp_i32vec1
     
    typedef detail::tvec2< i32, highp > highp_i32vec2
     
    typedef detail::tvec3< i32, highp > highp_i32vec3
     
    typedef detail::tvec4< i32, highp > highp_i32vec4
     
    typedef detail::int64 highp_i64
     
    typedef detail::tvec1< i64, highp > highp_i64vec1
     
    typedef detail::tvec2< i64, highp > highp_i64vec2
     
    typedef detail::tvec3< i64, highp > highp_i64vec3
     
    typedef detail::tvec4< i64, highp > highp_i64vec4
     
    typedef detail::int8 highp_i8
     
    typedef detail::tvec1< i8, highp > highp_i8vec1
     
    typedef detail::tvec2< i8, highp > highp_i8vec2
     
    typedef detail::tvec3< i8, highp > highp_i8vec3
     
    typedef detail::tvec4< i8, highp > highp_i8vec4
     
    typedef detail::tmat2x2< int,
    -highp > 
    highp_imat2
     
    typedef detail::tmat2x2< int,
    -highp > 
    highp_imat2x2
     
    typedef detail::tmat2x3< int,
    -highp > 
    highp_imat2x3
     
    typedef detail::tmat2x4< int,
    -highp > 
    highp_imat2x4
     
    typedef detail::tmat3x3< int,
    -highp > 
    highp_imat3
     
    typedef detail::tmat3x2< int,
    -highp > 
    highp_imat3x2
     
    typedef detail::tmat3x3< int,
    -highp > 
    highp_imat3x3
     
    typedef detail::tmat3x4< int,
    -highp > 
    highp_imat3x4
     
    typedef detail::tmat4x4< int,
    -highp > 
    highp_imat4
     
    typedef detail::tmat4x2< int,
    -highp > 
    highp_imat4x2
     
    typedef detail::tmat4x3< int,
    -highp > 
    highp_imat4x3
     
    typedef detail::tmat4x4< int,
    -highp > 
    highp_imat4x4
     
    typedef detail::highp_int_t highp_int
     
    typedef detail::int16 highp_int16
     
    typedef detail::int16 highp_int16_t
     
    typedef detail::int32 highp_int32
     
    typedef detail::int32 highp_int32_t
     
    typedef detail::int64 highp_int64
     
    typedef detail::int64 highp_int64_t
     
    typedef detail::int8 highp_int8
     
    typedef detail::int8 highp_int8_t
     
    typedef highp_ivec1_t highp_ivec1
     
    typedef detail::tvec2< int, highp > highp_ivec2
     
    typedef detail::tvec3< int, highp > highp_ivec3
     
    typedef detail::tvec4< int, highp > highp_ivec4
     
    typedef detail::tmat2x2< float,
    -highp > 
    highp_mat2
     
    typedef detail::tmat2x2< float,
    -highp > 
    highp_mat2x2
     
    typedef detail::tmat2x3< float,
    -highp > 
    highp_mat2x3
     
    typedef detail::tmat2x4< float,
    -highp > 
    highp_mat2x4
     
    typedef detail::tmat3x3< float,
    -highp > 
    highp_mat3
     
    typedef detail::tmat3x2< float,
    -highp > 
    highp_mat3x2
     
    typedef detail::tmat3x3< float,
    -highp > 
    highp_mat3x3
     
    typedef detail::tmat3x4< float,
    -highp > 
    highp_mat3x4
     
    typedef detail::tmat4x4< float,
    -highp > 
    highp_mat4
     
    typedef detail::tmat4x2< float,
    -highp > 
    highp_mat4x2
     
    typedef detail::tmat4x3< float,
    -highp > 
    highp_mat4x3
     
    typedef detail::tmat4x4< float,
    -highp > 
    highp_mat4x4
     
    typedef detail::tquat< float,
    -highp > 
    highp_quat
     
    typedef detail::uint16 highp_u16
     
    typedef detail::tvec1< u16, highp > highp_u16vec1
     
    typedef detail::tvec2< u16, highp > highp_u16vec2
     
    typedef detail::tvec3< u16, highp > highp_u16vec3
     
    typedef detail::tvec4< u16, highp > highp_u16vec4
     
    typedef detail::uint32 highp_u32
     
    typedef detail::tvec1< u32, highp > highp_u32vec1
     
    typedef detail::tvec2< u32, highp > highp_u32vec2
     
    typedef detail::tvec3< u32, highp > highp_u32vec3
     
    typedef detail::tvec4< u32, highp > highp_u32vec4
     
    typedef detail::uint64 highp_u64
     
    typedef detail::tvec1< u64, highp > highp_u64vec1
     
    typedef detail::tvec2< u64, highp > highp_u64vec2
     
    typedef detail::tvec3< u64, highp > highp_u64vec3
     
    typedef detail::tvec4< u64, highp > highp_u64vec4
     
    typedef detail::uint8 highp_u8
     
    typedef detail::tvec1< u8, highp > highp_u8vec1
     
    typedef detail::tvec2< u8, highp > highp_u8vec2
     
    typedef detail::tvec3< u8, highp > highp_u8vec3
     
    typedef detail::tvec4< u8, highp > highp_u8vec4
     
    typedef detail::highp_uint_t highp_uint
     
    typedef detail::uint16 highp_uint16
     
    typedef detail::uint16 highp_uint16_t
     
    typedef detail::uint32 highp_uint32
     
    typedef detail::uint32 highp_uint32_t
     
    typedef detail::uint64 highp_uint64
     
    typedef detail::uint64 highp_uint64_t
     
    typedef detail::uint8 highp_uint8
     
    typedef detail::uint8 highp_uint8_t
     
    typedef detail::tmat2x2< uint,
    -highp > 
    highp_umat2
     
    typedef detail::tmat2x2< uint,
    -highp > 
    highp_umat2x2
     
    typedef detail::tmat2x3< uint,
    -highp > 
    highp_umat2x3
     
    typedef detail::tmat2x4< uint,
    -highp > 
    highp_umat2x4
     
    typedef detail::tmat3x3< uint,
    -highp > 
    highp_umat3
     
    typedef detail::tmat3x2< uint,
    -highp > 
    highp_umat3x2
     
    typedef detail::tmat3x3< uint,
    -highp > 
    highp_umat3x3
     
    typedef detail::tmat3x4< uint,
    -highp > 
    highp_umat3x4
     
    typedef detail::tmat4x4< uint,
    -highp > 
    highp_umat4
     
    typedef detail::tmat4x2< uint,
    -highp > 
    highp_umat4x2
     
    typedef detail::tmat4x3< uint,
    -highp > 
    highp_umat4x3
     
    typedef detail::tmat4x4< uint,
    -highp > 
    highp_umat4x4
     
    typedef highp_uvec1_t highp_uvec1
     
    typedef detail::tvec2< uint,
    -highp > 
    highp_uvec2
     
    typedef detail::tvec3< uint,
    -highp > 
    highp_uvec3
     
    typedef detail::tvec4< uint,
    -highp > 
    highp_uvec4
     
    typedef detail::tvec1< float,
    -highp > 
    highp_vec1
     
    typedef detail::tvec2< float,
    -highp > 
    highp_vec2
     
    typedef detail::tvec3< float,
    -highp > 
    highp_vec3
     
    typedef detail::tvec4< float,
    -highp > 
    highp_vec4
     
    typedef detail::int16 i16
     
    typedef highp_i16vec1 i16vec1
     
    typedef highp_i16vec2 i16vec2
     
    typedef highp_i16vec3 i16vec3
     
    typedef highp_i16vec4 i16vec4
     
    typedef detail::int32 i32
     
    typedef highp_i32vec1 i32vec1
     
    typedef highp_i32vec2 i32vec2
     
    typedef highp_i32vec3 i32vec3
     
    typedef highp_i32vec4 i32vec4
     
    typedef detail::int64 i64
     
    typedef highp_i64vec1 i64vec1
     
    typedef highp_i64vec2 i64vec2
     
    typedef highp_i64vec3 i64vec3
     
    typedef highp_i64vec4 i64vec4
     
    typedef detail::int8 i8
     
    typedef highp_i8vec1 i8vec1
     
    typedef highp_i8vec2 i8vec2
     
    typedef highp_i8vec3 i8vec3
     
    typedef highp_i8vec4 i8vec4
     
    typedef mediump_imat2 imat2
     
    typedef mediump_imat2x2 imat2x2
     
    typedef mediump_imat2x3 imat2x3
     
    typedef mediump_imat2x4 imat2x4
     
    typedef mediump_imat3 imat3
     
    typedef mediump_imat3x2 imat3x2
     
    typedef mediump_imat3x3 imat3x3
     
    typedef mediump_imat3x4 imat3x4
     
    typedef mediump_imat4 imat4
     
    typedef mediump_imat4x2 imat4x2
     
    typedef mediump_imat4x3 imat4x3
     
    typedef mediump_imat4x4 imat4x4
     
    -typedef int int1
     
    typedef detail::int16 int16
     
    typedef detail::int16 int16_t
     
    -typedef int int1x1
     
    -typedef detail::tvec2< int, highp > int2
     
    -typedef detail::tmat2x2< int,
    -highp > 
    int2x2
     
    -typedef detail::tmat2x3< int,
    -highp > 
    int2x3
     
    -typedef detail::tmat2x4< int,
    -highp > 
    int2x4
     
    -typedef detail::tvec3< int, highp > int3
     
    typedef detail::int32 int32
     
    typedef detail::int32 int32_t
     
    -typedef detail::tmat3x2< int,
    -highp > 
    int3x2
     
    -typedef detail::tmat3x3< int,
    -highp > 
    int3x3
     
    -typedef detail::tmat3x4< int,
    -highp > 
    int3x4
     
    -typedef detail::tvec4< int, highp > int4
     
    -typedef detail::tmat4x2< int,
    -highp > 
    int4x2
     
    -typedef detail::tmat4x3< int,
    -highp > 
    int4x3
     
    -typedef detail::tmat4x4< int,
    -highp > 
    int4x4
     
    typedef detail::int64 int64
     
    typedef detail::int64 int64_t
     
    typedef detail::int8 int8
     
    typedef detail::int8 int8_t
     
    typedef highp_ivec1 ivec1
     
    typedef highp_ivec2 ivec2
     
    typedef highp_ivec3 ivec3
     
    typedef highp_ivec4 ivec4
     
    typedef lowp_bvec1_t lowp_bvec1
     
    typedef detail::tvec2< bool, lowp > lowp_bvec2
     
    typedef detail::tvec3< bool, lowp > lowp_bvec3
     
    typedef detail::tvec4< bool, lowp > lowp_bvec4
     
    typedef detail::tdualquat
    -< double, lowp > 
    lowp_ddualquat
     
    typedef detail::tmat2x2
    -< double, lowp > 
    lowp_dmat2
     
    typedef detail::tmat2x2
    -< double, lowp > 
    lowp_dmat2x2
     
    typedef detail::tmat2x3
    -< double, lowp > 
    lowp_dmat2x3
     
    typedef detail::tmat2x4
    -< double, lowp > 
    lowp_dmat2x4
     
    typedef detail::tmat3x3< float,
    -lowp > 
    lowp_dmat3
     
    typedef detail::tmat3x2
    -< double, lowp > 
    lowp_dmat3x2
     
    typedef detail::tmat3x3
    -< double, lowp > 
    lowp_dmat3x3
     
    typedef detail::tmat3x4
    -< double, lowp > 
    lowp_dmat3x4
     
    typedef detail::tmat4x4
    -< double, lowp > 
    lowp_dmat4
     
    typedef detail::tmat4x2
    -< double, lowp > 
    lowp_dmat4x2
     
    typedef detail::tmat4x3
    -< double, lowp > 
    lowp_dmat4x3
     
    typedef detail::tmat4x4
    -< double, lowp > 
    lowp_dmat4x4
     
    typedef detail::tquat< double,
    -lowp > 
    lowp_dquat
     
    typedef detail::tdualquat
    -< float, lowp > 
    lowp_dualquat
     
    typedef detail::tvec2< double,
    -lowp > 
    lowp_dvec2
     
    typedef detail::tvec3< double,
    -lowp > 
    lowp_dvec3
     
    typedef detail::tvec4< double,
    -lowp > 
    lowp_dvec4
     
    typedef float32 lowp_f32
     
    typedef lowp_f32mat2x2 lowp_f32mat2
     
    typedef detail::tmat2x2< f32,
    -lowp > 
    lowp_f32mat2x2
     
    typedef detail::tmat2x3< f32,
    -lowp > 
    lowp_f32mat2x3
     
    typedef detail::tmat2x4< f32,
    -lowp > 
    lowp_f32mat2x4
     
    typedef lowp_f32mat3x3 lowp_f32mat3
     
    typedef detail::tmat3x2< f32,
    -lowp > 
    lowp_f32mat3x2
     
    typedef detail::tmat3x3< f32,
    -lowp > 
    lowp_f32mat3x3
     
    typedef detail::tmat3x4< f32,
    -lowp > 
    lowp_f32mat3x4
     
    typedef lowp_f32mat4x4 lowp_f32mat4
     
    typedef detail::tmat4x2< f32,
    -lowp > 
    lowp_f32mat4x2
     
    typedef detail::tmat4x3< f32,
    -lowp > 
    lowp_f32mat4x3
     
    typedef detail::tmat4x4< f32,
    -lowp > 
    lowp_f32mat4x4
     
    typedef detail::tquat< f32, lowp > lowp_f32quat
     
    typedef detail::tvec1< f32, lowp > lowp_f32vec1
     
    typedef detail::tvec2< f32, lowp > lowp_f32vec2
     
    typedef detail::tvec3< f32, lowp > lowp_f32vec3
     
    typedef detail::tvec4< f32, lowp > lowp_f32vec4
     
    typedef float64 lowp_f64
     
    typedef lowp_f64mat2x2 lowp_f64mat2
     
    typedef detail::tmat2x2< f64,
    -lowp > 
    lowp_f64mat2x2
     
    typedef detail::tmat2x3< f64,
    -lowp > 
    lowp_f64mat2x3
     
    typedef detail::tmat2x4< f64,
    -lowp > 
    lowp_f64mat2x4
     
    typedef lowp_f64mat3x3 lowp_f64mat3
     
    typedef detail::tmat3x2< f64,
    -lowp > 
    lowp_f64mat3x2
     
    typedef detail::tmat3x3< f64,
    -lowp > 
    lowp_f64mat3x3
     
    typedef detail::tmat3x4< f64,
    -lowp > 
    lowp_f64mat3x4
     
    typedef lowp_f64mat4x4 lowp_f64mat4
     
    typedef detail::tmat4x2< f64,
    -lowp > 
    lowp_f64mat4x2
     
    typedef detail::tmat4x3< f64,
    -lowp > 
    lowp_f64mat4x3
     
    typedef detail::tmat4x4< f64,
    -lowp > 
    lowp_f64mat4x4
     
    typedef detail::tquat< f64, lowp > lowp_f64quat
     
    typedef detail::tvec1< f64, lowp > lowp_f64vec1
     
    typedef detail::tvec2< f64, lowp > lowp_f64vec2
     
    typedef detail::tvec3< f64, lowp > lowp_f64vec3
     
    typedef detail::tvec4< f64, lowp > lowp_f64vec4
     
    typedef detail::tdualquat
    -< float, lowp > 
    lowp_fdualquat
     
    typedef lowp_float_t lowp_float
     
    typedef detail::float32 lowp_float32
     
    typedef detail::float32 lowp_float32_t
     
    typedef detail::float64 lowp_float64
     
    typedef detail::float64 lowp_float64_t
     
    typedef lowp_fmat2x2 lowp_fmat2
     
    typedef detail::tmat2x2< f32,
    -lowp > 
    lowp_fmat2x2
     
    typedef detail::tmat2x3< f32,
    -lowp > 
    lowp_fmat2x3
     
    typedef detail::tmat2x4< f32,
    -lowp > 
    lowp_fmat2x4
     
    typedef lowp_fmat3x3 lowp_fmat3
     
    typedef detail::tmat3x2< f32,
    -lowp > 
    lowp_fmat3x2
     
    typedef detail::tmat3x3< f32,
    -lowp > 
    lowp_fmat3x3
     
    typedef detail::tmat3x4< f32,
    -lowp > 
    lowp_fmat3x4
     
    typedef lowp_fmat4x4 lowp_fmat4
     
    typedef detail::tmat4x2< f32,
    -lowp > 
    lowp_fmat4x2
     
    typedef detail::tmat4x3< f32,
    -lowp > 
    lowp_fmat4x3
     
    typedef detail::tmat4x4< f32,
    -lowp > 
    lowp_fmat4x4
     
    typedef lowp_quat lowp_fquat
     
    typedef detail::tvec1< float,
    -lowp > 
    lowp_fvec1
     
    typedef detail::tvec2< float,
    -lowp > 
    lowp_fvec2
     
    typedef detail::tvec3< float,
    -lowp > 
    lowp_fvec3
     
    typedef detail::tvec4< float,
    -lowp > 
    lowp_fvec4
     
    typedef detail::int16 lowp_i16
     
    typedef detail::tvec1< i16, lowp > lowp_i16vec1
     
    typedef detail::tvec2< i16, lowp > lowp_i16vec2
     
    typedef detail::tvec3< i16, lowp > lowp_i16vec3
     
    typedef detail::tvec4< i16, lowp > lowp_i16vec4
     
    typedef detail::int32 lowp_i32
     
    typedef detail::tvec1< i32, lowp > lowp_i32vec1
     
    typedef detail::tvec2< i32, lowp > lowp_i32vec2
     
    typedef detail::tvec3< i32, lowp > lowp_i32vec3
     
    typedef detail::tvec4< i32, lowp > lowp_i32vec4
     
    typedef detail::int64 lowp_i64
     
    typedef detail::tvec1< i64, lowp > lowp_i64vec1
     
    typedef detail::tvec2< i64, lowp > lowp_i64vec2
     
    typedef detail::tvec3< i64, lowp > lowp_i64vec3
     
    typedef detail::tvec4< i64, lowp > lowp_i64vec4
     
    typedef detail::int8 lowp_i8
     
    typedef detail::tvec1< i8, lowp > lowp_i8vec1
     
    typedef detail::tvec2< i8, lowp > lowp_i8vec2
     
    typedef detail::tvec3< i8, lowp > lowp_i8vec3
     
    typedef detail::tvec4< i8, lowp > lowp_i8vec4
     
    typedef detail::tmat2x2< int,
    -lowp > 
    lowp_imat2
     
    typedef detail::tmat2x2< int,
    -lowp > 
    lowp_imat2x2
     
    typedef detail::tmat2x3< int,
    -lowp > 
    lowp_imat2x3
     
    typedef detail::tmat2x4< int,
    -lowp > 
    lowp_imat2x4
     
    typedef detail::tmat3x3< int,
    -lowp > 
    lowp_imat3
     
    typedef detail::tmat3x2< int,
    -lowp > 
    lowp_imat3x2
     
    typedef detail::tmat3x3< int,
    -lowp > 
    lowp_imat3x3
     
    typedef detail::tmat3x4< int,
    -lowp > 
    lowp_imat3x4
     
    typedef detail::tmat4x4< int,
    -lowp > 
    lowp_imat4
     
    typedef detail::tmat4x2< int,
    -lowp > 
    lowp_imat4x2
     
    typedef detail::tmat4x3< int,
    -lowp > 
    lowp_imat4x3
     
    typedef detail::tmat4x4< int,
    -lowp > 
    lowp_imat4x4
     
    typedef detail::lowp_int_t lowp_int
     
    typedef detail::int16 lowp_int16
     
    typedef detail::int16 lowp_int16_t
     
    typedef detail::int32 lowp_int32
     
    typedef detail::int32 lowp_int32_t
     
    typedef detail::int64 lowp_int64
     
    typedef detail::int64 lowp_int64_t
     
    typedef detail::int8 lowp_int8
     
    typedef detail::int8 lowp_int8_t
     
    typedef lowp_ivec1_t lowp_ivec1
     
    typedef detail::tvec2< int, lowp > lowp_ivec2
     
    typedef detail::tvec3< int, lowp > lowp_ivec3
     
    typedef detail::tvec4< int, lowp > lowp_ivec4
     
    typedef detail::tmat2x2< float,
    -lowp > 
    lowp_mat2
     
    typedef detail::tmat2x2< float,
    -lowp > 
    lowp_mat2x2
     
    typedef detail::tmat2x3< float,
    -lowp > 
    lowp_mat2x3
     
    typedef detail::tmat2x4< float,
    -lowp > 
    lowp_mat2x4
     
    typedef detail::tmat3x3< float,
    -lowp > 
    lowp_mat3
     
    typedef detail::tmat3x2< float,
    -lowp > 
    lowp_mat3x2
     
    typedef detail::tmat3x3< float,
    -lowp > 
    lowp_mat3x3
     
    typedef detail::tmat3x4< float,
    -lowp > 
    lowp_mat3x4
     
    typedef detail::tmat4x4< float,
    -lowp > 
    lowp_mat4
     
    typedef detail::tmat4x2< float,
    -lowp > 
    lowp_mat4x2
     
    typedef detail::tmat4x3< float,
    -lowp > 
    lowp_mat4x3
     
    typedef detail::tmat4x4< float,
    -lowp > 
    lowp_mat4x4
     
    typedef detail::tquat< float,
    -lowp > 
    lowp_quat
     
    typedef detail::uint16 lowp_u16
     
    typedef detail::tvec1< u16, lowp > lowp_u16vec1
     
    typedef detail::tvec2< u16, lowp > lowp_u16vec2
     
    typedef detail::tvec3< u16, lowp > lowp_u16vec3
     
    typedef detail::tvec4< u16, lowp > lowp_u16vec4
     
    typedef detail::uint32 lowp_u32
     
    typedef detail::tvec1< u32, lowp > lowp_u32vec1
     
    typedef detail::tvec2< u32, lowp > lowp_u32vec2
     
    typedef detail::tvec3< u32, lowp > lowp_u32vec3
     
    typedef detail::tvec4< u32, lowp > lowp_u32vec4
     
    typedef detail::uint64 lowp_u64
     
    typedef detail::tvec1< u64, lowp > lowp_u64vec1
     
    typedef detail::tvec2< u64, lowp > lowp_u64vec2
     
    typedef detail::tvec3< u64, lowp > lowp_u64vec3
     
    typedef detail::tvec4< u64, lowp > lowp_u64vec4
     
    typedef detail::uint8 lowp_u8
     
    typedef detail::tvec1< u8, lowp > lowp_u8vec1
     
    typedef detail::tvec2< u8, lowp > lowp_u8vec2
     
    typedef detail::tvec3< u8, lowp > lowp_u8vec3
     
    typedef detail::tvec4< u8, lowp > lowp_u8vec4
     
    typedef detail::lowp_uint_t lowp_uint
     
    typedef detail::uint16 lowp_uint16
     
    typedef detail::uint16 lowp_uint16_t
     
    typedef detail::uint32 lowp_uint32
     
    typedef detail::uint32 lowp_uint32_t
     
    typedef detail::uint64 lowp_uint64
     
    typedef detail::uint64 lowp_uint64_t
     
    typedef detail::uint8 lowp_uint8
     
    typedef detail::uint8 lowp_uint8_t
     
    typedef detail::tmat2x2< uint,
    -lowp > 
    lowp_umat2
     
    typedef detail::tmat2x2< uint,
    -lowp > 
    lowp_umat2x2
     
    typedef detail::tmat2x3< uint,
    -lowp > 
    lowp_umat2x3
     
    typedef detail::tmat2x4< uint,
    -lowp > 
    lowp_umat2x4
     
    typedef detail::tmat3x3< uint,
    -lowp > 
    lowp_umat3
     
    typedef detail::tmat3x2< uint,
    -lowp > 
    lowp_umat3x2
     
    typedef detail::tmat3x3< uint,
    -lowp > 
    lowp_umat3x3
     
    typedef detail::tmat3x4< uint,
    -lowp > 
    lowp_umat3x4
     
    typedef detail::tmat4x4< uint,
    -lowp > 
    lowp_umat4
     
    typedef detail::tmat4x2< uint,
    -lowp > 
    lowp_umat4x2
     
    typedef detail::tmat4x3< uint,
    -lowp > 
    lowp_umat4x3
     
    typedef detail::tmat4x4< uint,
    -lowp > 
    lowp_umat4x4
     
    typedef lowp_uvec1_t lowp_uvec1
     
    typedef detail::tvec2< uint, lowp > lowp_uvec2
     
    typedef detail::tvec3< uint, lowp > lowp_uvec3
     
    typedef detail::tvec4< uint, lowp > lowp_uvec4
     
    typedef detail::tvec1< float,
    -lowp > 
    lowp_vec1
     
    typedef detail::tvec2< float,
    -lowp > 
    lowp_vec2
     
    typedef detail::tvec3< float,
    -lowp > 
    lowp_vec3
     
    typedef detail::tvec4< float,
    -lowp > 
    lowp_vec4
     
    typedef mat2x2 mat2
     
    typedef highp_mat2x2 mat2x2
     
    typedef highp_mat2x3 mat2x3
     
    typedef highp_mat2x4 mat2x4
     
    typedef mat3x3 mat3
     
    typedef highp_mat3x2 mat3x2
     
    typedef highp_mat3x3 mat3x3
     
    typedef highp_mat3x4 mat3x4
     
    typedef mat4x4 mat4
     
    typedef highp_mat4x2 mat4x2
     
    typedef highp_mat4x3 mat4x3
     
    typedef highp_mat4x4 mat4x4
     
    typedef mediump_bvec1_t mediump_bvec1
     
    typedef detail::tvec2< bool,
    -mediump > 
    mediump_bvec2
     
    typedef detail::tvec3< bool,
    -mediump > 
    mediump_bvec3
     
    typedef detail::tvec4< bool,
    -mediump > 
    mediump_bvec4
     
    typedef detail::tdualquat
    -< double, mediump > 
    mediump_ddualquat
     
    typedef detail::tmat2x2
    -< double, mediump > 
    mediump_dmat2
     
    typedef detail::tmat2x2
    -< double, mediump > 
    mediump_dmat2x2
     
    typedef detail::tmat2x3
    -< double, mediump > 
    mediump_dmat2x3
     
    typedef detail::tmat2x4
    -< double, mediump > 
    mediump_dmat2x4
     
    typedef detail::tmat3x3
    -< double, mediump > 
    mediump_dmat3
     
    typedef detail::tmat3x2
    -< double, mediump > 
    mediump_dmat3x2
     
    typedef detail::tmat3x3
    -< double, mediump > 
    mediump_dmat3x3
     
    typedef detail::tmat3x4
    -< double, mediump > 
    mediump_dmat3x4
     
    typedef detail::tmat4x4
    -< double, mediump > 
    mediump_dmat4
     
    typedef detail::tmat4x2
    -< double, mediump > 
    mediump_dmat4x2
     
    typedef detail::tmat4x3
    -< double, mediump > 
    mediump_dmat4x3
     
    typedef detail::tmat4x4
    -< double, mediump > 
    mediump_dmat4x4
     
    typedef detail::tquat< double,
    -mediump > 
    mediump_dquat
     
    typedef detail::tdualquat
    -< float, mediump > 
    mediump_dualquat
     
    typedef detail::tvec2< double,
    -mediump > 
    mediump_dvec2
     
    typedef detail::tvec3< double,
    -mediump > 
    mediump_dvec3
     
    typedef detail::tvec4< double,
    -mediump > 
    mediump_dvec4
     
    typedef float32 mediump_f32
     
    typedef mediump_f32mat2x2 mediump_f32mat2
     
    typedef detail::tmat2x2< f32,
    -mediump > 
    mediump_f32mat2x2
     
    typedef detail::tmat2x3< f32,
    -mediump > 
    mediump_f32mat2x3
     
    typedef detail::tmat2x4< f32,
    -mediump > 
    mediump_f32mat2x4
     
    typedef mediump_f32mat3x3 mediump_f32mat3
     
    typedef detail::tmat3x2< f32,
    -mediump > 
    mediump_f32mat3x2
     
    typedef detail::tmat3x3< f32,
    -mediump > 
    mediump_f32mat3x3
     
    typedef detail::tmat3x4< f32,
    -mediump > 
    mediump_f32mat3x4
     
    typedef mediump_f32mat4x4 mediump_f32mat4
     
    typedef detail::tmat4x2< f32,
    -mediump > 
    mediump_f32mat4x2
     
    typedef detail::tmat4x3< f32,
    -mediump > 
    mediump_f32mat4x3
     
    typedef detail::tmat4x4< f32,
    -mediump > 
    mediump_f32mat4x4
     
    typedef detail::tquat< f32,
    -mediump > 
    mediump_f32quat
     
    typedef detail::tvec1< f32,
    -mediump > 
    mediump_f32vec1
     
    typedef detail::tvec2< f32,
    -mediump > 
    mediump_f32vec2
     
    typedef detail::tvec3< f32,
    -mediump > 
    mediump_f32vec3
     
    typedef detail::tvec4< f32,
    -mediump > 
    mediump_f32vec4
     
    typedef float64 mediump_f64
     
    typedef mediump_f64mat2x2 mediump_f64mat2
     
    typedef detail::tmat2x2< f64,
    -mediump > 
    mediump_f64mat2x2
     
    typedef detail::tmat2x3< f64,
    -mediump > 
    mediump_f64mat2x3
     
    typedef detail::tmat2x4< f64,
    -mediump > 
    mediump_f64mat2x4
     
    typedef mediump_f64mat3x3 mediump_f64mat3
     
    typedef detail::tmat3x2< f64,
    -mediump > 
    mediump_f64mat3x2
     
    typedef detail::tmat3x3< f64,
    -mediump > 
    mediump_f64mat3x3
     
    typedef detail::tmat3x4< f64,
    -mediump > 
    mediump_f64mat3x4
     
    typedef mediump_f64mat4x4 mediump_f64mat4
     
    typedef detail::tmat4x2< f64,
    -mediump > 
    mediump_f64mat4x2
     
    typedef detail::tmat4x3< f64,
    -mediump > 
    mediump_f64mat4x3
     
    typedef detail::tmat4x4< f64,
    -mediump > 
    mediump_f64mat4x4
     
    typedef detail::tquat< f64,
    -mediump > 
    mediump_f64quat
     
    typedef detail::tvec1< f64,
    -mediump > 
    mediump_f64vec1
     
    typedef detail::tvec2< f64,
    -mediump > 
    mediump_f64vec2
     
    typedef detail::tvec3< f64,
    -mediump > 
    mediump_f64vec3
     
    typedef detail::tvec4< f64,
    -mediump > 
    mediump_f64vec4
     
    typedef detail::tdualquat
    -< float, mediump > 
    mediump_fdualquat
     
    typedef mediump_float_t mediump_float
     
    typedef detail::float32 mediump_float32
     
    typedef detail::float32 mediump_float32_t
     
    typedef detail::float64 mediump_float64
     
    typedef detail::float64 mediump_float64_t
     
    typedef mediump_fmat2x2 mediump_fmat2
     
    typedef detail::tmat2x2< f32,
    -mediump > 
    mediump_fmat2x2
     
    typedef detail::tmat2x3< f32,
    -mediump > 
    mediump_fmat2x3
     
    typedef detail::tmat2x4< f32,
    -mediump > 
    mediump_fmat2x4
     
    typedef mediump_fmat3x3 mediump_fmat3
     
    typedef detail::tmat3x2< f32,
    -mediump > 
    mediump_fmat3x2
     
    typedef detail::tmat3x3< f32,
    -mediump > 
    mediump_fmat3x3
     
    typedef detail::tmat3x4< f32,
    -mediump > 
    mediump_fmat3x4
     
    typedef mediump_fmat4x4 mediump_fmat4
     
    typedef detail::tmat4x2< f32,
    -mediump > 
    mediump_fmat4x2
     
    typedef detail::tmat4x3< f32,
    -mediump > 
    mediump_fmat4x3
     
    typedef detail::tmat4x4< f32,
    -mediump > 
    mediump_fmat4x4
     
    typedef mediump_quat mediump_fquat
     
    typedef detail::tvec1< float,
    -mediump > 
    mediump_fvec1
     
    typedef detail::tvec2< float,
    -mediump > 
    mediump_fvec2
     
    typedef detail::tvec3< float,
    -mediump > 
    mediump_fvec3
     
    typedef detail::tvec4< float,
    -mediump > 
    mediump_fvec4
     
    typedef detail::int16 mediump_i16
     
    typedef detail::tvec1< i16,
    -mediump > 
    mediump_i16vec1
     
    typedef detail::tvec2< i16,
    -mediump > 
    mediump_i16vec2
     
    typedef detail::tvec3< i16,
    -mediump > 
    mediump_i16vec3
     
    typedef detail::tvec4< i16,
    -mediump > 
    mediump_i16vec4
     
    typedef detail::int32 mediump_i32
     
    typedef detail::tvec1< i32,
    -mediump > 
    mediump_i32vec1
     
    typedef detail::tvec2< i32,
    -mediump > 
    mediump_i32vec2
     
    typedef detail::tvec3< i32,
    -mediump > 
    mediump_i32vec3
     
    typedef detail::tvec4< i32,
    -mediump > 
    mediump_i32vec4
     
    typedef detail::int64 mediump_i64
     
    typedef detail::tvec1< i64,
    -mediump > 
    mediump_i64vec1
     
    typedef detail::tvec2< i64,
    -mediump > 
    mediump_i64vec2
     
    typedef detail::tvec3< i64,
    -mediump > 
    mediump_i64vec3
     
    typedef detail::tvec4< i64,
    -mediump > 
    mediump_i64vec4
     
    typedef detail::int8 mediump_i8
     
    typedef detail::tvec1< i8,
    -mediump > 
    mediump_i8vec1
     
    typedef detail::tvec2< i8,
    -mediump > 
    mediump_i8vec2
     
    typedef detail::tvec3< i8,
    -mediump > 
    mediump_i8vec3
     
    typedef detail::tvec4< i8,
    -mediump > 
    mediump_i8vec4
     
    typedef detail::tmat2x2< int,
    -mediump > 
    mediump_imat2
     
    typedef detail::tmat2x2< int,
    -mediump > 
    mediump_imat2x2
     
    typedef detail::tmat2x3< int,
    -mediump > 
    mediump_imat2x3
     
    typedef detail::tmat2x4< int,
    -mediump > 
    mediump_imat2x4
     
    typedef detail::tmat3x3< int,
    -mediump > 
    mediump_imat3
     
    typedef detail::tmat3x2< int,
    -mediump > 
    mediump_imat3x2
     
    typedef detail::tmat3x3< int,
    -mediump > 
    mediump_imat3x3
     
    typedef detail::tmat3x4< int,
    -mediump > 
    mediump_imat3x4
     
    typedef detail::tmat4x4< int,
    -mediump > 
    mediump_imat4
     
    typedef detail::tmat4x2< int,
    -mediump > 
    mediump_imat4x2
     
    typedef detail::tmat4x3< int,
    -mediump > 
    mediump_imat4x3
     
    typedef detail::tmat4x4< int,
    -mediump > 
    mediump_imat4x4
     
    typedef detail::mediump_int_t mediump_int
     
    typedef detail::int16 mediump_int16
     
    typedef detail::int16 mediump_int16_t
     
    typedef detail::int32 mediump_int32
     
    typedef detail::int32 mediump_int32_t
     
    typedef detail::int64 mediump_int64
     
    typedef detail::int64 mediump_int64_t
     
    typedef detail::int8 mediump_int8
     
    typedef detail::int8 mediump_int8_t
     
    typedef mediump_ivec1_t mediump_ivec1
     
    typedef detail::tvec2< int,
    -mediump > 
    mediump_ivec2
     
    typedef detail::tvec3< int,
    -mediump > 
    mediump_ivec3
     
    typedef detail::tvec4< int,
    -mediump > 
    mediump_ivec4
     
    typedef detail::tmat2x2< float,
    -mediump > 
    mediump_mat2
     
    typedef detail::tmat2x2< float,
    -mediump > 
    mediump_mat2x2
     
    typedef detail::tmat2x3< float,
    -mediump > 
    mediump_mat2x3
     
    typedef detail::tmat2x4< float,
    -mediump > 
    mediump_mat2x4
     
    typedef detail::tmat3x3< float,
    -mediump > 
    mediump_mat3
     
    typedef detail::tmat3x2< float,
    -mediump > 
    mediump_mat3x2
     
    typedef detail::tmat3x3< float,
    -mediump > 
    mediump_mat3x3
     
    typedef detail::tmat3x4< float,
    -mediump > 
    mediump_mat3x4
     
    typedef detail::tmat4x4< float,
    -mediump > 
    mediump_mat4
     
    typedef detail::tmat4x2< float,
    -mediump > 
    mediump_mat4x2
     
    typedef detail::tmat4x3< float,
    -mediump > 
    mediump_mat4x3
     
    typedef detail::tmat4x4< float,
    -mediump > 
    mediump_mat4x4
     
    typedef detail::tquat< float,
    -mediump > 
    mediump_quat
     
    typedef detail::uint16 mediump_u16
     
    typedef detail::tvec1< u16,
    -mediump > 
    mediump_u16vec1
     
    typedef detail::tvec2< u16,
    -mediump > 
    mediump_u16vec2
     
    typedef detail::tvec3< u16,
    -mediump > 
    mediump_u16vec3
     
    typedef detail::tvec4< u16,
    -mediump > 
    mediump_u16vec4
     
    typedef detail::uint32 mediump_u32
     
    typedef detail::tvec1< u32,
    -mediump > 
    mediump_u32vec1
     
    typedef detail::tvec2< u32,
    -mediump > 
    mediump_u32vec2
     
    typedef detail::tvec3< u32,
    -mediump > 
    mediump_u32vec3
     
    typedef detail::tvec4< u32,
    -mediump > 
    mediump_u32vec4
     
    typedef detail::uint64 mediump_u64
     
    typedef detail::tvec1< u64,
    -mediump > 
    mediump_u64vec1
     
    typedef detail::tvec2< u64,
    -mediump > 
    mediump_u64vec2
     
    typedef detail::tvec3< u64,
    -mediump > 
    mediump_u64vec3
     
    typedef detail::tvec4< u64,
    -mediump > 
    mediump_u64vec4
     
    typedef detail::uint8 mediump_u8
     
    typedef detail::tvec1< u8,
    -mediump > 
    mediump_u8vec1
     
    typedef detail::tvec2< u8,
    -mediump > 
    mediump_u8vec2
     
    typedef detail::tvec3< u8,
    -mediump > 
    mediump_u8vec3
     
    typedef detail::tvec4< u8,
    -mediump > 
    mediump_u8vec4
     
    typedef detail::mediump_uint_t mediump_uint
     
    typedef detail::uint16 mediump_uint16
     
    typedef detail::uint16 mediump_uint16_t
     
    typedef detail::uint32 mediump_uint32
     
    typedef detail::uint32 mediump_uint32_t
     
    typedef detail::uint64 mediump_uint64
     
    typedef detail::uint64 mediump_uint64_t
     
    typedef detail::uint8 mediump_uint8
     
    typedef detail::uint8 mediump_uint8_t
     
    typedef detail::tmat2x2< uint,
    -mediump > 
    mediump_umat2
     
    typedef detail::tmat2x2< uint,
    -mediump > 
    mediump_umat2x2
     
    typedef detail::tmat2x3< uint,
    -mediump > 
    mediump_umat2x3
     
    typedef detail::tmat2x4< uint,
    -mediump > 
    mediump_umat2x4
     
    typedef detail::tmat3x3< uint,
    -mediump > 
    mediump_umat3
     
    typedef detail::tmat3x2< uint,
    -mediump > 
    mediump_umat3x2
     
    typedef detail::tmat3x3< uint,
    -mediump > 
    mediump_umat3x3
     
    typedef detail::tmat3x4< uint,
    -mediump > 
    mediump_umat3x4
     
    typedef detail::tmat4x4< uint,
    -mediump > 
    mediump_umat4
     
    typedef detail::tmat4x2< uint,
    -mediump > 
    mediump_umat4x2
     
    typedef detail::tmat4x3< uint,
    -mediump > 
    mediump_umat4x3
     
    typedef detail::tmat4x4< uint,
    -mediump > 
    mediump_umat4x4
     
    typedef mediump_uvec1_t mediump_uvec1
     
    typedef detail::tvec2< uint,
    -mediump > 
    mediump_uvec2
     
    typedef detail::tvec3< uint,
    -mediump > 
    mediump_uvec3
     
    typedef detail::tvec4< uint,
    -mediump > 
    mediump_uvec4
     
    typedef detail::tvec1< float,
    -mediump > 
    mediump_vec1
     
    typedef detail::tvec2< float,
    -mediump > 
    mediump_vec2
     
    typedef detail::tvec3< float,
    -mediump > 
    mediump_vec3
     
    typedef detail::tvec4< float,
    -mediump > 
    mediump_vec4
     
    -typedef highp_quat quat
     
    typedef detail::uint64 qword
     
    typedef signed int sint
     
    typedef detail::tvec2
    -< std::size_t, defaultp > 
    size2
     
    typedef detail::tvec2
    -< std::size_t, defaultp > 
    size2_t
     
    typedef detail::tvec3
    -< std::size_t, defaultp > 
    size3
     
    typedef detail::tvec3
    -< std::size_t, defaultp > 
    size3_t
     
    typedef detail::tvec4
    -< std::size_t, defaultp > 
    size4
     
    typedef detail::tvec4
    -< std::size_t, defaultp > 
    size4_t
     
    typedef detail::uint16 u16
     
    typedef highp_u16vec1 u16vec1
     
    typedef highp_u16vec2 u16vec2
     
    typedef highp_u16vec3 u16vec3
     
    typedef highp_u16vec4 u16vec4
     
    typedef detail::uint32 u32
     
    typedef highp_u32vec1 u32vec1
     
    typedef highp_u32vec2 u32vec2
     
    typedef highp_u32vec3 u32vec3
     
    typedef highp_u32vec4 u32vec4
     
    typedef detail::uint64 u64
     
    typedef highp_u64vec1 u64vec1
     
    typedef highp_u64vec2 u64vec2
     
    typedef highp_u64vec3 u64vec3
     
    typedef highp_u64vec4 u64vec4
     
    typedef detail::uint8 u8
     
    typedef highp_u8vec1 u8vec1
     
    typedef highp_u8vec2 u8vec2
     
    typedef highp_u8vec3 u8vec3
     
    typedef highp_u8vec4 u8vec4
     
    typedef unsigned int uint
     
    typedef detail::uint16 uint16
     
    typedef detail::uint16 uint16_t
     
    typedef detail::uint32 uint32
     
    typedef detail::uint32 uint32_t
     
    typedef detail::uint64 uint64
     
    typedef detail::uint64 uint64_t
     
    typedef detail::uint8 uint8
     
    typedef detail::uint8 uint8_t
     
    typedef mediump_umat2 umat2
     
    typedef mediump_umat2x2 umat2x2
     
    typedef mediump_umat2x3 umat2x3
     
    typedef mediump_umat2x4 umat2x4
     
    typedef mediump_umat3 umat3
     
    typedef mediump_umat3x2 umat3x2
     
    typedef mediump_umat3x3 umat3x3
     
    typedef mediump_umat3x4 umat3x4
     
    typedef mediump_umat4 umat4
     
    typedef mediump_umat4x2 umat4x2
     
    typedef mediump_umat4x3 umat4x3
     
    typedef mediump_umat4x4 umat4x4
     
    typedef highp_uvec1 uvec1
     
    typedef highp_uvec2 uvec2
     
    typedef highp_uvec3 uvec3
     
    typedef highp_uvec4 uvec4
     
    typedef highp_vec1 vec1
     
    typedef highp_vec2 vec2
     
    typedef highp_vec3 vec3
     
    typedef highp_vec4 vec4
     
    typedef detail::uint16 word
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType abs (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acos (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acosh (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acot (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acoth (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsc (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsch (genType const &x)
     
    template<typename genType >
    GLM_FUNC_QUALIFIER genType affineInverse (genType const &m)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool all (vecType< bool, P > const &v)
     
    template<typename vecType >
    GLM_FUNC_QUALIFIER
    -vecType::value_type 
    angle (vecType const &x, vecType const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T angle (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > angleAxis (T const &angle, detail::tvec3< T, P > const &axis)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool any (vecType< bool, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool areCollinear (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool areOrthogonal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool areOrthonormal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL genType asec (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asech (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asin (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asinh (genType const &x)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    template<typename genType >
    GLM_FUNC_DECL genType atan (genType const &y, genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType atan (genType const &y_over_x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER T atan2 (T x, T y)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    atan2 (const detail::tvec2< T, P > &x, const detail::tvec2< T, P > &y)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    atan2 (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    atan2 (const detail::tvec4< T, P > &x, const detail::tvec4< T, P > &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType atanh (genType const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > axis (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    void axisAngle (detail::tmat4x4< T, P > const &mat, detail::tvec3< T, P > &axis, T &angle)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > axisAngleMatrix (detail::tvec3< T, P > const &axis, T const angle)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec3< T,
    -defaultp > 
    ballRand (T const &Radius)
     
    template<typename T , template< typename > class genIUType>
    GLM_FUNC_DECL genIUType< T >
    -::signed_type 
    bitCount (genIUType< T > const &Value)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldExtract (genIUType const &Value, int const &Offset, int const &Bits)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldInsert (genIUType const &Base, genIUType const &Insert, int const &Offset, int const &Bits)
     
    GLM_FUNC_DECL int16 bitfieldInterleave (int8 x, int8 y)
     
    GLM_FUNC_DECL uint16 bitfieldInterleave (uint8 x, uint8 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int16 x, int16 y)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint16 x, uint16 y)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y, int32 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y, uint32 z)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z, int8 w)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z, uint8 w)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z, int16 w)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z, uint16 w)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldReverse (genIUType const &Value)
     
    template<typename genType >
    GLM_DEPRECATED GLM_FUNC_DECL
    -genType 
    bitRevert (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType bitRotateLeft (genType const &In, std::size_t Shift)
     
    template<typename genType >
    GLM_FUNC_DECL genType bitRotateRight (genType const &In, std::size_t Shift)
     
    template<typename genType >
    GLM_FUNC_DECL genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType ceil (genType const &x)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec2< T,
    -defaultp > 
    circularRand (T const &Radius)
     
    template<typename genType >
    GLM_FUNC_DECL genType clamp (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType clamp (genType const &x, genType const &minVal, genType const &maxVal)
     
    template<typename T , precision P>
    detail::tvec3< T, P > closestPointOnLine (detail::tvec3< T, P > const &point, detail::tvec3< T, P > const &a, detail::tvec3< T, P > const &b)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > colMajor2 (detail::tvec2< T, P > const &v1, detail::tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > colMajor2 (detail::tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > colMajor3 (detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > colMajor3 (detail::tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > colMajor4 (detail::tvec4< T, P > const &v1, detail::tvec4< T, P > const &v2, detail::tvec4< T, P > const &v3, detail::tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > colMajor4 (detail::tmat4x4< T, P > const &m)
     
    template<typename genType >
    genType::col_type column (genType const &m, length_t const &index)
     
    template<typename genType >
    genType column (genType const &m, length_t const &index, typename genType::col_type const &x)
     
    template<typename genType >
    genType::value_type compAdd (genType const &v)
     
    template<typename genType >
    genType::value_type compMax (genType const &v)
     
    template<typename genType >
    genType::value_type compMin (genType const &v)
     
    template<typename genType >
    genType::value_type compMul (genType const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > conjugate (detail::tquat< T, P > const &q)
     
    template<typename genType >
    GLM_FUNC_DECL genType cos (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType cosh (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType cot (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType coth (genType const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > cross (detail::tquat< T, P > const &q, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tvec3< T, P > cross (detail::tvec3< T, P > const &v, detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > cross (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType csc (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType csch (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType degrees (genType const &radians)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > diagonal2x2 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat2x3< T, P > diagonal2x3 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat2x4< T, P > diagonal2x4 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat3x2< T, P > diagonal3x2 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > diagonal3x3 (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat3x4< T, P > diagonal3x4 (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x2< T, P > diagonal4x2 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x3< T, P > diagonal4x3 (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > diagonal4x4 (detail::tvec4< T, P > const &v)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec2< T,
    -defaultp > 
    diskRand (T const &Radius)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type distance (genType const &p0, genType const &p1)
     
    template<typename T >
    distance2 (T const &p0, T const &p1)
     
    template<typename genType >
    genType::value_type distance2 (genType const &p0, genType const &p1)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T dot (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType dot (genType const &x, genType const &y)
     
    template<typename T , precision P, template< typename, precision > class quatType>
    GLM_FUNC_DECL T dot (quatType< T, P > const &x, quatType< T, P > const &y)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > dualquat_cast (detail::tmat2x4< T, P > const &x)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > dualquat_cast (detail::tmat3x4< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType e ()
     
    template<typename genType >
    GLM_FUNC_DECL genType epsilon ()
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > epsilonEqual (vecType< T, P > const &x, vecType< T, P > const &y, T const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonEqual (genType const &x, genType const &y, genType const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL genType::boolType epsilonNotEqual (genType const &x, genType const &y, typename genType::value_type const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonNotEqual (genType const &x, genType const &y, genType const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    equal (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    detail::tvec3< T, P > euclidean (detail::tvec2< T, P > const &polar)
     
    template<typename genType >
    GLM_FUNC_DECL genType euler ()
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > eulerAngles (detail::tquat< T, P > const &x)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleX (T const &angleX)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleXY (T const &angleX, T const &angleY)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleXZ (T const &angleX, T const &angleZ)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleY (T const &angleY)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleYX (T const &angleY, T const &angleX)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleYXZ (T const &yaw, T const &pitch, T const &roll)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleYZ (T const &angleY, T const &angleZ)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleZ (T const &angleZ)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleZX (T const &angle, T const &angleX)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleZY (T const &angleZ, T const &angleY)
     
    template<typename genType >
    GLM_FUNC_DECL genType exp (genType const &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > exp (detail::tquat< T, P > const &q)
     
    template<typename genType >
    GLM_FUNC_DECL genType exp2 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > extractMatrixRotation (detail::tmat4x4< T, P > const &mat)
     
    template<typename T , precision P>
    extractRealComponent (detail::tquat< T, P > const &q)
     
    template<typename genType >
    GLM_FUNC_DECL genType faceforward (genType const &N, genType const &I, genType const &Nref)
     
    template<typename genType >
    genType factorial (genType const &x)
     
    template<typename T >
    fastAcos (const T &angle)
     
    template<typename T >
    fastAsin (const T &angle)
     
    template<typename T >
    fastAtan (const T &y, const T &x)
     
    template<typename T >
    fastAtan (const T &angle)
     
    template<typename T >
    fastCos (const T &angle)
     
    template<typename genType >
    genType::value_type fastDistance (genType const &x, genType const &y)
     
    template<typename T >
    fastExp (const T &x)
     
    template<typename T >
    fastExp2 (const T &x)
     
    template<typename genType >
    genType fastInverseSqrt (genType const &x)
     
    template<typename genType >
    genType::value_type fastLength (genType const &x)
     
    template<typename T >
    fastLn (const T &x)
     
    template<typename T >
    fastLog (const T &x)
     
    template<typename T >
    fastLog2 (const T &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > fastMix (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename genType >
    genType fastNormalize (genType const &x)
     
    template<typename genType >
    genType::value_type fastNormalizeDot (genType const &x, genType const &y)
     
    template<typename genType >
    genType fastPow (genType const &x, genType const &y)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT fastPow (genTypeT const &x, genTypeU const &y)
     
    template<typename T >
    fastSin (const T &angle)
     
    template<typename genType >
    genType fastSqrt (genType const &x)
     
    template<typename T >
    fastTan (const T &angle)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType fillBitfieldWithOne (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType fillBitfieldWithZero (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename T , template< typename > class genIUType>
    GLM_FUNC_DECL genIUType< T >
    -::signed_type 
    findLSB (genIUType< T > const &Value)
     
    template<typename T , template< typename > class genIUType>
    GLM_FUNC_DECL genIUType< T >
    -::signed_type 
    findMSB (genIUType< T > const &Value)
     
    template<typename T >
    GLM_FUNC_DECL uint float_distance (T const &x, T const &y)
     
    template<typename T , template< typename > class vecType>
    GLM_FUNC_DECL vecType< uintfloat_distance (vecType< T > const &x, vecType< T > const &y)
     
    GLM_FUNC_DECL int floatBitsToInt (float const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< int, P > floatBitsToInt (vecType< float, P > const &v)
     
    GLM_FUNC_DECL uint floatBitsToUint (float const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< uint, P > floatBitsToUint (vecType< float, P > const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType floor (genType const &x)
     
    unsigned int floor_log2 (unsigned int x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fma (genType const &a, genType const &b, genType const &c)
     
    template<typename genType >
    GLM_FUNC_DECL genType fract (genType const &x)
     
    template<typename genType , typename genIType >
    GLM_FUNC_DECL genType frexp (genType const &x, genIType &exp)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    frustum (T const &left, T const &right, T const &bottom, T const &top, T const &near, T const &far)
     
    template<typename genType >
    GLM_FUNC_DECL genType gaussRand (genType const &Mean, genType const &Deviation)
     
    template<typename genType >
    GLM_FUNC_DECL genType golden_ratio ()
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P >
    -::bool_type 
    greaterThan (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    greaterThan (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P >
    -::bool_type 
    greaterThanEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    greaterThanEqual (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
     
    template<typename genType >
    genType higherMultiple (genType const &Source, genType const &Multiple)
     
    template<typename genType >
    GLM_FUNC_DECL genType highestBitValue (genType const &value)
     
    template<typename T , precision P>
    detail::tvec3< T, P > hsvColor (detail::tvec3< T, P > const &rgbValue)
     
    template<typename genIType >
    GLM_FUNC_DECL void imulExtended (genIType const &x, genIType const &y, genIType &msb, genIType &lsb)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    infinitePerspective (T fovy, T aspect, T near)
     
    GLM_FUNC_DECL float intBitsToFloat (int const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< float, P > intBitsToFloat (vecType< int, P > const &v)
     
    template<typename T , precision P>
    detail::tquat< T, P > intermediate (detail::tquat< T, P > const &prev, detail::tquat< T, P > const &curr, detail::tquat< T, P > const &next)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > interpolate (detail::tmat4x4< T, P > const &m1, detail::tmat4x4< T, P > const &m2, T const delta)
     
    template<typename genType >
    bool intersectLineSphere (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
     
    template<typename genType >
    bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
     
    template<typename genType >
    bool intersectRayPlane (genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
     
    template<typename genType >
    bool intersectRayTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > inverse (detail::tdualquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > inverse (detail::tquat< T, P > const &q)
     
    template<typename genType >
    GLM_FUNC_DECL genType inversesqrt (genType const &x)
     
    template<typename genType >
    GLM_FUNC_QUALIFIER
    -genType::value_type 
    inverseTranspose (genType const &m)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    vecType< bool, P > isCompNull (vecType< T, P > const &v, T const &epsilon)
     
    -template<typename genType >
    bool isfinite (genType const &x)
     
    -template<typename T , precision P>
    detail::tvec2< bool, P > isfinite (const detail::tvec2< T, P > &x)
     
    -template<typename T , precision P>
    detail::tvec3< bool, P > isfinite (const detail::tvec3< T, P > &x)
     
    -template<typename T , precision P>
    detail::tvec4< bool, P > isfinite (const detail::tvec4< T, P > &x)
     
    template<typename T , precision P, template< typename, precision > class matType>
    bool isIdentity (matType< T, P > const &m, T const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL genType::bool_type isinf (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType::bool_type isnan (genType const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool isNormalized (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P>
    bool isNormalized (detail::tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNormalized (detail::tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNormalized (detail::tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNull (detail::tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNull (detail::tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNull (detail::tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool isNull (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class matType>
    bool isOrthogonal (matType< T, P > const &m, T const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool isPowerOfTwo (genType const &value)
     
    template<typename T , precision P>
    l1Norm (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
     
    template<typename T , precision P>
    l1Norm (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    l2Norm (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
     
    template<typename T , precision P>
    l2Norm (detail::tvec3< T, P > const &x)
     
    template<typename genType , typename genIType >
    GLM_FUNC_DECL genType ldexp (genType const &x, genIType const &exp)
     
    template<typename T , precision P>
    bool leftHanded (detail::tvec3< T, P > const &tangent, detail::tvec3< T, P > const &binormal, detail::tvec3< T, P > const &normal)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type length (genType const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T length (detail::tquat< T, P > const &q)
     
    template<typename T >
    length2 (T const &x)
     
    template<typename genType >
    genType::value_type length2 (genType const &x)
     
    template<typename T , precision P>
    length2 (detail::tquat< T, P > const &q)
     
    -template<typename T >
    GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    lerp (const detail::tvec2< T, P > &x, const detail::tvec2< T, P > &y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    lerp (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    lerp (const detail::tvec4< T, P > &x, const detail::tvec4< T, P > &y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    lerp (const detail::tvec2< T, P > &x, const detail::tvec2< T, P > &y, const detail::tvec2< T, P > &a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    lerp (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y, const detail::tvec3< T, P > &a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    lerp (const detail::tvec4< T, P > &x, const detail::tvec4< T, P > &y, const detail::tvec4< T, P > &a)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > lerp (detail::tdualquat< T, P > const &x, detail::tdualquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > lerp (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    lessThan (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P >
    -::bool_type 
    lessThanEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    lessThanEqual (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    linearGradient (detail::tvec2< T, P > const &Point0, detail::tvec2< T, P > const &Point1, detail::tvec2< T, P > const &Position)
     
    template<typename genType >
    GLM_FUNC_DECL genType linearRand (genType const &Min, genType const &Max)
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ln_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ten ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_two ()
     
    template<typename genType >
    genType log (genType const &x, genType const &base)
     
    template<typename genType >
    GLM_FUNC_DECL genType log (genType const &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > log (detail::tquat< T, P > const &q)
     
    template<typename genIUType >
    genIUType log2 (genIUType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType log2 (genType const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    lookAt (detail::tvec3< T, P > const &eye, detail::tvec3< T, P > const &center, detail::tvec3< T, P > const &up)
     
    template<typename genType >
    genType lowerMultiple (genType const &Source, genType const &Multiple)
     
    template<typename T , precision P>
    luminosity (detail::tvec3< T, P > const &color)
     
    template<typename T , precision P>
    lxNorm (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y, unsigned int Depth)
     
    template<typename T , precision P>
    lxNorm (detail::tvec3< T, P > const &x, unsigned int Depth)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x2
    -< T, defaultp > 
    make_mat2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x2
    -< T, defaultp > 
    make_mat2x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x3
    -< T, defaultp > 
    make_mat2x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x4
    -< T, defaultp > 
    make_mat2x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x3
    -< T, defaultp > 
    make_mat3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x2
    -< T, defaultp > 
    make_mat3x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x3
    -< T, defaultp > 
    make_mat3x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x4
    -< T, defaultp > 
    make_mat3x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    make_mat4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x2
    -< T, defaultp > 
    make_mat4x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x3
    -< T, defaultp > 
    make_mat4x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    make_mat4x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tquat< T,
    -defaultp > 
    make_quat (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec2< T,
    -defaultp > 
    make_vec2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec3< T,
    -defaultp > 
    make_vec3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec4< T,
    -defaultp > 
    make_vec4 (T const *const ptr)
     
    template<typename genIType >
    GLM_FUNC_DECL genIType mask (genIType const &count)
     
    template<typename T , precision P>
    detail::tmat2x4< T, P > mat2x4_cast (detail::tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat3x3
    -< T, P > 
    mat3_cast (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat3x4< T, P > mat3x4_cast (detail::tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    mat4_cast (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > matrixCross3 (detail::tvec3< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > matrixCross4 (detail::tvec3< T, P > const &x)
     
    template<typename T >
    max (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    max (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename genType >
    GLM_FUNC_DECL genType max (genType const &x, genType const &y)
     
    template<typename T >
    min (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    min (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename genType >
    GLM_FUNC_DECL genType min (genType const &x, genType const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType mirrorRepeat (genType const &Texcoord)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > mix (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename genTypeT , typename genTypeU >
    GLM_FUNC_DECL genTypeT mix (genTypeT const &x, genTypeT const &y, genTypeU const &a)
     
    -template<typename T , precision P>
    mixedProduct (detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
     
    int mod (int x, int y)
     
    uint mod (uint x, uint y)
     
    template<typename genType >
    GLM_FUNC_DECL genType mod (genType const &x, genType const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType mod (genType const &x, typename genType::value_type const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType modf (genType const &x, genType &i)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x, uint const &Distance)
     
    uint nlz (uint x)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type noise1 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL detail::tvec2
    -< typename genType::value_type,
    -defaultp > 
    noise2 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL detail::tvec3
    -< typename genType::value_type,
    -defaultp > 
    noise3 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL detail::tvec4
    -< typename genType::value_type,
    -defaultp > 
    noise4 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType normalize (genType const &x)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > normalize (detail::tdualquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > normalize (detail::tquat< T, P > const &q)
     
    template<typename genType >
    genType::value_type normalizeDot (genType const &x, genType const &y)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > not_ (vecType< bool, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P >
    -::bool_type 
    notEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    notEqual (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType one ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_root_two ()
     
    template<typename T >
    detail::tmat2x2< T, defaultp > orientate2 (T const &angle)
     
    template<typename T >
    detail::tmat3x3< T, defaultp > orientate3 (T const &angle)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > orientate3 (detail::tvec3< T, P > const &angles)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > orientate4 (detail::tvec3< T, P > const &angles)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > orientation (detail::tvec3< T, P > const &Normal, detail::tvec3< T, P > const &Up)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec2< T, P > const &x, detail::tvec2< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y, detail::tvec3< T, P > const &ref)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    ortho (T const &left, T const &right, T const &bottom, T const &top, T const &zNear, T const &zFar)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    ortho (T const &left, T const &right, T const &bottom, T const &top)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > orthonormalize (const detail::tmat3x3< T, P > &m)
     
    template<typename T , precision P>
    detail::tvec3< T, P > orthonormalize (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y)
     
    GLM_FUNC_DECL double packDouble2x32 (uvec2 const &v)
     
    GLM_FUNC_DECL uint32 packF2x11_1x10 (vec3 const &v)
     
    GLM_FUNC_DECL uint16 packHalf1x16 (float const &v)
     
    GLM_FUNC_DECL uint packHalf2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint64 packHalf4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packI3x10_1x2 (ivec4 const &v)
     
    GLM_FUNC_DECL uint16 packSnorm1x16 (float const &v)
     
    GLM_FUNC_DECL uint8 packSnorm1x8 (float const &s)
     
    GLM_FUNC_DECL uint packSnorm2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint16 packSnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packSnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packSnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint packSnorm4x8 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packU3x10_1x2 (uvec4 const &v)
     
    GLM_FUNC_DECL uint16 packUnorm1x16 (float const &v)
     
    GLM_FUNC_DECL uint8 packUnorm1x8 (float const &v)
     
    GLM_FUNC_DECL uint packUnorm2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint16 packUnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packUnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packUnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint packUnorm4x8 (vec4 const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    perlin (vecType< T, P > const &p)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    perlin (vecType< T, P > const &p, vecType< T, P > const &rep)
     
    template<typename vecType >
    vecType perp (vecType const &x, vecType const &Normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    perspective (T const &fovy, T const &aspect, T const &near, T const &far)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    perspectiveFov (T const &fov, T const &width, T const &height, T const &near, T const &far)
     
    template<typename genType >
    GLM_FUNC_DECL genType pi ()
     
    template<typename T , precision P, typename U >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    pickMatrix (detail::tvec2< T, P > const &center, detail::tvec2< T, P > const &delta, detail::tvec4< U, P > const &viewport)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T pitch (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tvec3< T, P > polar (detail::tvec3< T, P > const &euclidean)
     
    int pow (int x, int y)
     
    template<typename genType >
    GLM_FUNC_DECL genType pow (genType const &base, genType const &exponent)
     
    uint pow (uint x, uint y)
     
    template<typename T , precision P>
    detail::tquat< T, P > pow (detail::tquat< T, P > const &x, T const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType powerOfTwoAbove (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType powerOfTwoBelow (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType powerOfTwoNearest (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x, uint const &Distance)
     
    template<typename vecType >
    vecType proj (vecType const &x, vecType const &Normal)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > proj2D (const detail::tmat3x3< T, P > &m, const detail::tvec3< T, P > &normal)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > proj3D (const detail::tmat4x4< T, P > &m, const detail::tvec3< T, P > &normal)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > project (detail::tvec3< T, P > const &obj, detail::tmat4x4< T, P > const &model, detail::tmat4x4< T, P > const &proj, detail::tvec4< U, P > const &viewport)
     
    template<typename genType >
    GLM_FUNC_DECL genType quarter_pi ()
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > quat_cast (detail::tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > quat_cast (detail::tmat4x4< T, P > const &x)
     
    template<typename T , precision P>
    radialGradient (detail::tvec2< T, P > const &Center, T const &Radius, detail::tvec2< T, P > const &Focal, detail::tvec2< T, P > const &Position)
     
    template<typename genType >
    GLM_FUNC_DECL genType radians (genType const &degrees)
     
    template<typename genType >
    GLM_FUNC_DECL genType reflect (genType const &I, genType const &N)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > refract (vecType< T, P > const &I, vecType< T, P > const &N, T const &eta)
     
    template<typename genType >
    GLM_FUNC_DECL genType repeat (genType const &Texcoord)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rgb2YCoCg (detail::tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rgb2YCoCgR (detail::tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rgbColor (detail::tvec3< T, P > const &hsvValue)
     
    template<typename T , precision P>
    bool rightHanded (detail::tvec3< T, P > const &tangent, detail::tvec3< T, P > const &binormal, detail::tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T roll (detail::tquat< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType root_five ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_ln_four ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_three ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two_pi ()
     
    template<typename T , precision P>
    detail::tvec2< T, P > rotate (detail::tvec2< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotate (detail::tvec3< T, P > const &v, T const &angle, detail::tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > rotate (T angle, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotate (detail::tvec4< T, P > const &v, T const &angle, detail::tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    rotate (detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotate (detail::tquat< T, P > const &q, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotate (detail::tquat< T, P > const &q, detail::tvec4< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > rotate (detail::tquat< T, P > const &q, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > rotateNormalizedAxis (detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    detail::tquat< T, P > rotateNormalizedAxis (detail::tquat< T, P > const &q, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotateX (detail::tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotateX (detail::tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotateY (detail::tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotateY (detail::tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotateZ (detail::tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotateZ (detail::tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tquat< T, P > rotation (detail::tvec3< T, P > const &orig, detail::tvec3< T, P > const &dest)
     
    template<typename genType >
    GLM_FUNC_DECL genType round (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType roundEven (genType const &x)
     
    template<typename genType >
    genType::row_type row (genType const &m, length_t const &index)
     
    template<typename genType >
    genType row (genType const &m, length_t const &index, typename genType::row_type const &x)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > rowMajor2 (detail::tvec2< T, P > const &v1, detail::tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > rowMajor2 (detail::tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > rowMajor3 (detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > rowMajor3 (detail::tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > rowMajor4 (detail::tvec4< T, P > const &v1, detail::tvec4< T, P > const &v2, detail::tvec4< T, P > const &v3, detail::tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > rowMajor4 (detail::tmat4x4< T, P > const &m)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER T saturate (T x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    saturate (const detail::tvec2< T, P > &x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    saturate (const detail::tvec3< T, P > &x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    saturate (const detail::tvec4< T, P > &x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > saturation (T const s)
     
    template<typename T , precision P>
    detail::tvec3< T, P > saturation (T const s, detail::tvec3< T, P > const &color)
     
    template<typename T , precision P>
    detail::tvec4< T, P > saturation (T const s, detail::tvec4< T, P > const &color)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > scale (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    scale (detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
     
    template<typename valType , precision P>
    detail::tmat4x4< valType, P > scaleBias (valType scale, valType bias)
     
    template<typename valType , precision P>
    detail::tmat4x4< valType, P > scaleBias (detail::tmat4x4< valType, P > const &m, valType scale, valType bias)
     
    template<typename genType >
    GLM_FUNC_DECL genType sec (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sech (genType const &angle)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > shearX2D (detail::tmat3x3< T, P > const &m, T y)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > shearX3D (const detail::tmat4x4< T, P > &m, T y, T z)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > shearY2D (detail::tmat3x3< T, P > const &m, T x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > shearY3D (const detail::tmat4x4< T, P > &m, T x, T z)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > shearZ3D (const detail::tmat4x4< T, P > &m, T x, T y)
     
    template<typename T , precision P>
    detail::tquat< T, P > shortMix (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename genType >
    GLM_FUNC_DECL genType sign (genType const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    simplex (vecType< T, P > const &p)
     
    template<typename genType >
    GLM_FUNC_DECL genType sin (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sinh (genType const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T slerp (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > slerp (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename genType >
    GLM_FUNC_DECL genType smoothstep (genType const &edge0, genType const &edge1, genType const &x)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec3< T,
    -defaultp > 
    sphericalRand (T const &Radius)
     
    int sqrt (int x)
     
    uint sqrt (uint x)
     
    template<typename genType >
    GLM_FUNC_DECL genType sqrt (genType const &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > squad (detail::tquat< T, P > const &q1, detail::tquat< T, P > const &q2, detail::tquat< T, P > const &s1, detail::tquat< T, P > const &s2, T const &h)
     
    template<typename genType >
    GLM_FUNC_DECL genType step (genType const &edge, genType const &x)
     
    template<template< typename, precision > class vecType, typename T , precision P>
    GLM_FUNC_DECL vecType< T, P > step (T const &edge, vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType tan (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType tanh (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType third ()
     
    template<typename genType >
    std::string to_string (genType const &x)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > toMat3 (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > toMat4 (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > toQuat (detail::tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > toQuat (detail::tmat4x4< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > translate (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    translate (detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tvec3< T, P > triangleNormal (detail::tvec3< T, P > const &p1, detail::tvec3< T, P > const &p2, detail::tvec3< T, P > const &p3)
     
    template<typename genType >
    GLM_FUNC_DECL genType trunc (genType const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    tweakedInfinitePerspective (T fovy, T aspect, T near)
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_thirds ()
     
    template<typename genUType >
    GLM_FUNC_DECL genUType uaddCarry (genUType const &x, genUType const &y, genUType &carry)
     
    -GLM_DEPRECATED dword uint10_10_10_2_cast (glm::vec4 const &v)
     
    GLM_FUNC_DECL float uintBitsToFloat (uint const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< float, P > uintBitsToFloat (vecType< uint, P > const &v)
     
    template<typename genUType >
    GLM_FUNC_DECL void umulExtended (genUType const &x, genUType const &y, genUType &msb, genUType &lsb)
     
    GLM_FUNC_DECL uvec2 unpackDouble2x32 (double const &v)
     
    GLM_FUNC_DECL vec3 unpackF2x11_1x10 (uint32 const &p)
     
    GLM_FUNC_DECL float unpackHalf1x16 (uint16 const &v)
     
    GLM_FUNC_DECL vec2 unpackHalf2x16 (uint const &v)
     
    GLM_FUNC_DECL vec4 unpackHalf4x16 (uint64 const &p)
     
    GLM_FUNC_DECL ivec4 unpackI3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL float unpackSnorm1x16 (uint16 const &p)
     
    GLM_FUNC_DECL float unpackSnorm1x8 (uint8 const &p)
     
    GLM_FUNC_DECL vec2 unpackSnorm2x16 (uint const &p)
     
    GLM_FUNC_DECL vec2 unpackSnorm2x8 (uint16 const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm4x16 (uint64 const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm4x8 (uint const &p)
     
    GLM_FUNC_DECL uvec4 unpackU3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL float unpackUnorm1x16 (uint16 const &p)
     
    GLM_FUNC_DECL float unpackUnorm1x8 (uint8 const &p)
     
    GLM_FUNC_DECL vec2 unpackUnorm2x16 (uint const &p)
     
    GLM_FUNC_DECL vec2 unpackUnorm2x8 (uint16 const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm4x16 (uint64 const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm4x8 (uint const &p)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > unProject (detail::tvec3< T, P > const &win, detail::tmat4x4< T, P > const &model, detail::tmat4x4< T, P > const &proj, detail::tvec4< U, P > const &viewport)
     
    template<typename genUType >
    GLM_FUNC_DECL genUType usubBorrow (genUType const &x, genUType const &y, genUType &borrow)
     
    template<typename genType >
    GLM_FUNC_DECL
    -genType::value_type const * 
    value_ptr (genType const &vec)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T yaw (detail::tquat< T, P > const &x)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > yawPitchRoll (T const &yaw, T const &pitch, T const &roll)
     
    template<typename T , precision P>
    detail::tvec3< T, P > YCoCg2rgb (detail::tvec3< T, P > const &YCoCgColor)
     
    template<typename T , precision P>
    detail::tvec3< T, P > YCoCgR2rgb (detail::tvec3< T, P > const &YCoCgColor)
     
    template<typename genType >
    GLM_FUNC_DECL genType zero ()
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > exp (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > exp2 (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > inversesqrt (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > log (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > log2 (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > pow (vecType< T, P > const &base, vecType< T, P > const &exponent)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sqrt (vecType< T, P > const &v)
     

    Detailed Description

    -

    OpenGL Mathematics (glm.g-truc.net)

    -

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    Typedef Documentation

    - +

    These all operate component-wise.

    +

    The description is per component.

    +

    Function Documentation

    +
    - + + + + +
    typedef highp_bvec1 bvec1GLM_FUNC_DECL vecType<T, P> glm::exp (vecType< T, P > const & v)
    -

    1 component vector of boolean.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 122 of file vec1.hpp.

    +

    Returns the natural exponentiation of x, i.e., e^x.

    +
    Parameters
    + + +
    vexp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision.
    +
    +
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL exp man page
    +
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + + + + +
    typedef highp_dquat dquatGLM_FUNC_DECL vecType<T, P> glm::exp2 (vecType< T, P > const & v)
    -

    Quaternion of default double-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 118 of file fwd.hpp.

    +

    Returns 2 raised to the v power.

    +
    Parameters
    + + +
    vexp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision.
    +
    +
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL exp2 man page
    +
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + + + + +
    typedef highp_bvec1_t highp_bvec1GLM_FUNC_DECL vecType<T, P> glm::inversesqrt (vecType< T, P > const & v)
    -

    1 component vector of high precision boolean.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 98 of file vec1.hpp.

    +

    Returns the reciprocal of the positive square root of v.

    +
    Parameters
    + + +
    vinversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision.
    +
    +
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL inversesqrt man page
    +
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + + + + +
    typedef detail::tquat<double, highp> highp_dquatGLM_FUNC_DECL vecType<T, P> glm::log (vecType< T, P > const & v)
    -

    Quaternion of high double-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 106 of file fwd.hpp.

    +

    Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y.

    +

    Results are undefined if v <= 0.

    +
    Parameters
    + + +
    vlog function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision.
    +
    +
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL log man page
    +
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + + + + +
    typedef highp_quat highp_fquatGLM_FUNC_DECL vecType<T, P> glm::log2 (vecType< T, P > const & v)
    -

    Quaternion of high single-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 85 of file fwd.hpp.

    +

    Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y.

    +
    Parameters
    + + +
    vlog2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision.
    +
    +
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL log2 man page
    +
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + + + + + + + + + + + + + + +
    typedef highp_ivec1_t highp_ivec1GLM_FUNC_DECL vecType<T, P> glm::pow (vecType< T, P > const & base,
    vecType< T, P > const & exponent 
    )
    -

    1 component vector of high precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 68 of file vec1.hpp.

    +

    Returns 'base' raised to the power 'exponent'.

    +
    Parameters
    + + + +
    baseFloating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type precision.
    exponentFloating point value representing the 'exponent'.
    +
    +
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL pow man page
    +
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - +
    - + + + + +
    typedef detail::tquat<float, highp> highp_quatGLM_FUNC_DECL vecType<T, P> glm::sqrt (vecType< T, P > const & v)
    -

    Quaternion of high single-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 59 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_uvec1_t highp_uvec1
    -
    - -

    1 component vector of high precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 83 of file vec1.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_ivec1 ivec1
    -
    - -

    1 component vector of signed integer numbers.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 146 of file vec1.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_bvec1_t lowp_bvec1
    -
    - -

    1 component vector of low precision boolean.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 108 of file vec1.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<double, lowp> lowp_dquat
    -
    - -

    Quaternion of low double-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 96 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_quat lowp_fquat
    -
    - -

    Quaternion of low single-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 75 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_ivec1_t lowp_ivec1
    -
    - -

    1 component vector of low precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 78 of file vec1.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<float, lowp> lowp_quat
    -
    - -

    Quaternion of low single-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 49 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_uvec1_t lowp_uvec1
    -
    - -

    1 component vector of low precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 93 of file vec1.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_bvec1_t mediump_bvec1
    -
    - -

    1 component vector of medium precision boolean.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 103 of file vec1.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<double, mediump> mediump_dquat
    -
    - -

    Quaternion of medium double-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 101 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_quat mediump_fquat
    -
    - -

    Quaternion of medium single-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 80 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_ivec1_t mediump_ivec1
    -
    - -

    1 component vector of medium precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 73 of file vec1.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<float, mediump> mediump_quat
    -
    - -

    Quaternion of medium single-precision floating-point numbers.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Definition at line 54 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_uvec1_t mediump_uvec1
    -
    - -

    1 component vector of medium precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 88 of file vec1.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_uvec1 uvec1
    -
    - -

    1 component vector of unsigned integer numbers.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 158 of file vec1.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_vec1 vec1
    -
    - -

    1 component vector of floating-point numbers.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 134 of file vec1.hpp.

    +

    Returns the positive square root of v.

    +
    Parameters
    + + +
    vsqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision.
    +
    +
    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL sqrt man page
    +
    +GLSL 4.20.8 specification, section 8.2 Exponential Functions
    @@ -4069,7 +319,7 @@ genType::value_type const *  diff --git a/doc/api/a00152.html b/doc/api/a00152.html new file mode 100644 index 00000000..926a00a0 --- /dev/null +++ b/doc/api/a00152.html @@ -0,0 +1,367 @@ + + + + + + +0.9.6: Geometric functions + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + +
    +
    + +
    +
    Geometric functions
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > cross (tvec3< T, P > const &x, tvec3< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T distance (vecType< T, P > const &p0, vecType< T, P > const &p1)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T dot (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType faceforward (genType const &N, genType const &I, genType const &Nref)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T length (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > normalize (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType reflect (genType const &I, genType const &N)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > refract (vecType< T, P > const &I, vecType< T, P > const &N, T eta)
     
    +

    Detailed Description

    +

    These operate on vectors as vectors, not component-wise.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::cross (tvec3< T, P > const & x,
    tvec3< T, P > const & y 
    )
    +
    + +

    Returns the cross product of x and y.

    +
    Template Parameters
    + + +
    valTypeFloating-point scalar types.
    +
    +
    +
    See also
    GLSL cross man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::distance (vecType< T, P > const & p0,
    vecType< T, P > const & p1 
    )
    +
    + +

    Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See also
    GLSL distance man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::dot (vecType< T, P > const & x,
    vecType< T, P > const & y 
    )
    +
    + +

    Returns the dot product of x and y, i.e., result = x * y.

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See also
    GLSL dot man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::faceforward (genType const & N,
    genType const & I,
    genType const & Nref 
    )
    +
    + +

    If dot(Nref, I) < 0.0, return N, otherwise, return -N.

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See also
    GLSL faceforward man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::length (vecType< T, P > const & x)
    +
    + +

    Returns the length of x, i.e., sqrt(x * x).

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See also
    GLSL length man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::normalize (vecType< T, P > const & x)
    +
    + +

    Returns a vector in the same direction as x but with length of 1.

    +

    According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error.

    +
    See also
    GLSL normalize man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::reflect (genType const & I,
    genType const & N 
    )
    +
    + +

    For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N.

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See also
    GLSL reflect man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::refract (vecType< T, P > const & I,
    vecType< T, P > const & N,
    eta 
    )
    +
    + +

    For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector.

    +
    Template Parameters
    + + +
    genTypeFloating-point vector types.
    +
    +
    +
    See also
    GLSL refract man page
    +
    +GLSL 4.20.8 specification, section 8.5 Geometric Functions
    + +
    +
    +
    + + + + diff --git a/doc/api/a00153.html b/doc/api/a00153.html new file mode 100644 index 00000000..14b09521 --- /dev/null +++ b/doc/api/a00153.html @@ -0,0 +1,577 @@ + + + + + + +0.9.6: Integer functions + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + +
    +
    + +
    +
    Integer functions
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL int bitCount (genType v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< int, P > bitCount (vecType< T, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldExtract (vecType< T, P > const &Value, int Offset, int Bits)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldInsert (vecType< T, P > const &Base, vecType< T, P > const &Insert, int Offset, int Bits)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldReverse (vecType< T, P > const &v)
     
    template<typename genIUType >
    GLM_FUNC_DECL int findLSB (genIUType x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< int, P > findLSB (vecType< T, P > const &v)
     
    template<typename genIUType >
    GLM_FUNC_DECL int findMSB (genIUType x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< int, P > findMSB (vecType< T, P > const &v)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL void imulExtended (vecType< int, P > const &x, vecType< int, P > const &y, vecType< int, P > &msb, vecType< int, P > &lsb)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< uint, P > uaddCarry (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &carry)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL void umulExtended (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &msb, vecType< uint, P > &lsb)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< uint, P > usubBorrow (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &borrow)
     
    +

    Detailed Description

    +

    These all operate component-wise.

    +

    The description is per component. The notation [a, b] means the set of bits from bit-number a through bit-number b, inclusive. The lowest-order bit is bit 0.

    +

    Function Documentation

    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL int glm::bitCount (genType v)
    +
    + +

    Returns the number of bits set to 1 in the binary representation of value.

    +
    Template Parameters
    + + +
    TSigned or unsigned integer scalar or vector types.
    +
    +
    +
    See also
    GLSL bitCount man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<int, P> glm::bitCount (vecType< T, P > const & v)
    +
    + +

    Returns the number of bits set to 1 in the binary representation of value.

    +
    Template Parameters
    + + +
    TSigned or unsigned integer scalar or vector types.
    +
    +
    +
    See also
    GLSL bitCount man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::bitfieldExtract (vecType< T, P > const & Value,
    int Offset,
    int Bits 
    )
    +
    + +

    Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result.

    +

    For unsigned data types, the most significant bits of the result will be set to zero. For signed data types, the most significant bits will be set to the value of bit offset + base - 1.

    +

    If bits is zero, the result will be zero. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.

    +
    Template Parameters
    + + +
    TSigned or unsigned integer scalar or vector types.
    +
    +
    +
    See also
    GLSL bitfieldExtract man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::bitfieldInsert (vecType< T, P > const & Base,
    vecType< T, P > const & Insert,
    int Offset,
    int Bits 
    )
    +
    + +

    Returns the insertion the bits least-significant bits of insert into base.

    +

    The result will have bits [offset, offset + bits - 1] taken from bits [0, bits - 1] of insert, and all other bits taken directly from the corresponding bits of base. If bits is zero, the result will simply be base. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.

    +
    Template Parameters
    + + +
    TSigned or unsigned integer scalar or vector types.
    +
    +
    +
    See also
    GLSL bitfieldInsert man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::bitfieldReverse (vecType< T, P > const & v)
    +
    + +

    Returns the reversal of the bits of value.

    +

    The bit numbered n of the result will be taken from bit (bits - 1) - n of value, where bits is the total number of bits used to represent value.

    +
    Template Parameters
    + + +
    TSigned or unsigned integer scalar or vector types.
    +
    +
    +
    See also
    GLSL bitfieldReverse man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL int glm::findLSB (genIUType x)
    +
    + +

    Returns the bit number of the least significant bit set to 1 in the binary representation of value.

    +

    If value is zero, -1 will be returned.

    +
    Template Parameters
    + + +
    TSigned or unsigned integer scalar types.
    +
    +
    +
    See also
    GLSL findLSB man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<int, P> glm::findLSB (vecType< T, P > const & v)
    +
    + +

    Returns the bit number of the least significant bit set to 1 in the binary representation of value.

    +

    If value is zero, -1 will be returned.

    +
    Template Parameters
    + + +
    TSigned or unsigned integer scalar types.
    +
    +
    +
    See also
    GLSL findLSB man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL int glm::findMSB (genIUType x)
    +
    + +

    Returns the bit number of the most significant bit in the binary representation of value.

    +

    For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.

    +
    Template Parameters
    + + +
    TSigned or unsigned integer scalar types.
    +
    +
    +
    See also
    GLSL findMSB man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<int, P> glm::findMSB (vecType< T, P > const & v)
    +
    + +

    Returns the bit number of the most significant bit in the binary representation of value.

    +

    For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.

    +
    Template Parameters
    + + +
    TSigned or unsigned integer scalar types.
    +
    +
    +
    See also
    GLSL findMSB man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL void glm::imulExtended (vecType< int, P > const & x,
    vecType< int, P > const & y,
    vecType< int, P > & msb,
    vecType< int, P > & lsb 
    )
    +
    + +

    Multiplies 32-bit integers x and y, producing a 64-bit result.

    +

    The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.

    +
    Template Parameters
    + + +
    genITypeSigned integer scalar or vector types.
    +
    +
    +
    See also
    GLSL imulExtended man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<uint, P> glm::uaddCarry (vecType< uint, P > const & x,
    vecType< uint, P > const & y,
    vecType< uint, P > & carry 
    )
    +
    + +

    Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).

    +

    The value carry is set to 0 if the sum was less than pow(2, 32), or to 1 otherwise.

    +
    Template Parameters
    + + +
    genUTypeUnsigned integer scalar or vector types.
    +
    +
    +
    See also
    GLSL uaddCarry man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL void glm::umulExtended (vecType< uint, P > const & x,
    vecType< uint, P > const & y,
    vecType< uint, P > & msb,
    vecType< uint, P > & lsb 
    )
    +
    + +

    Multiplies 32-bit integers x and y, producing a 64-bit result.

    +

    The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.

    +
    Template Parameters
    + + +
    genUTypeUnsigned integer scalar or vector types.
    +
    +
    +
    See also
    GLSL umulExtended man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<uint, P> glm::usubBorrow (vecType< uint, P > const & x,
    vecType< uint, P > const & y,
    vecType< uint, P > & borrow 
    )
    +
    + +

    Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.

    +

    The value borrow is set to 0 if x >= y, or to 1 otherwise.

    +
    Template Parameters
    + + +
    genUTypeUnsigned integer scalar or vector types.
    +
    +
    +
    See also
    GLSL usubBorrow man page
    +
    +GLSL 4.20.8 specification, section 8.8 Integer Functions
    + +
    +
    +
    + + + + diff --git a/doc/api/a00154.html b/doc/api/a00154.html new file mode 100644 index 00000000..f6b2b7f8 --- /dev/null +++ b/doc/api/a00154.html @@ -0,0 +1,212 @@ + + + + + + +0.9.6: Matrix functions + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + +
    +
    + +
    +
    Matrix functions
    +
    +
    + + + + + + + + + + + + + + +

    +Functions

    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL T determinant (matType< T, P > const &m)
     
    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL matType< T, P > inverse (matType< T, P > const &m)
     
    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL matType< T, P > matrixCompMult (matType< T, P > const &x, matType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecTypeA, template< typename, precision > class vecTypeB>
    GLM_FUNC_DECL
    +detail::outerProduct_trait< T,
    +P, vecTypeA, vecTypeB >::type 
    outerProduct (vecTypeA< T, P > const &c, vecTypeB< T, P > const &r)
     
    +

    Detailed Description

    +

    For each of the following built-in matrix functions, there is both a single-precision floating point version, where all arguments and return values are single precision, and a double-precision floating version, where all arguments and return values are double precision.

    +

    Only the single-precision floating point version is shown.

    +

    Function Documentation

    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::determinant (matType< T, P > const & m)
    +
    + +

    Returns the transposed matrix of x.

    +
    Template Parameters
    + + +
    matTypeFloating-point matrix types.
    +
    +
    +
    See also
    GLSL transpose man page
    +
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions Return the determinant of a squared matrix.
    +
    Template Parameters
    + + +
    valTypeFloating-point scalar types.
    +
    +
    +
    See also
    GLSL determinant man page
    +
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL matType<T, P> glm::inverse (matType< T, P > const & m)
    +
    + +

    Return the inverse of a squared matrix.

    +
    Template Parameters
    + + +
    valTypeFloating-point scalar types.
    +
    +
    +
    See also
    GLSL inverse man page
    +
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL matType<T, P> glm::matrixCompMult (matType< T, P > const & x,
    matType< T, P > const & y 
    )
    +
    + +

    Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j].

    +
    Template Parameters
    + + +
    matTypeFloating-point matrix types.
    +
    +
    +
    See also
    GLSL matrixCompMult man page
    +
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type glm::outerProduct (vecTypeA< T, P > const & c,
    vecTypeB< T, P > const & r 
    )
    +
    + +

    Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r.

    +
    Template Parameters
    + + +
    matTypeFloating-point matrix types.
    +
    +
    +
    See also
    GLSL outerProduct man page
    +
    +GLSL 4.20.8 specification, section 8.6 Matrix Functions
    + +
    +
    +
    + + + + diff --git a/doc/api/a00155.html b/doc/api/a00155.html index 11a0e56b..cd9b8d9d 100644 --- a/doc/api/a00155.html +++ b/doc/api/a00155.html @@ -3,8 +3,8 @@ - -GLM: Common functions + +0.9.6: Noise functions @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,112 +39,38 @@
    -
    Common functions
    +
    Noise functions
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType abs (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType ceil (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType clamp (genType const &x, genType const &minVal, genType const &maxVal)
     
    GLM_FUNC_DECL int floatBitsToInt (float const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< int, P > floatBitsToInt (vecType< float, P > const &v)
     
    GLM_FUNC_DECL uint floatBitsToUint (float const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< uint, P > floatBitsToUint (vecType< float, P > const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType floor (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fma (genType const &a, genType const &b, genType const &c)
     
    template<typename genType >
    GLM_FUNC_DECL genType fract (genType const &x)
     
    template<typename genType , typename genIType >
    GLM_FUNC_DECL genType frexp (genType const &x, genIType &exp)
     
    GLM_FUNC_DECL float intBitsToFloat (int const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< float, P > intBitsToFloat (vecType< int, P > const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType::bool_type isinf (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType::bool_type isnan (genType const &x)
     
    template<typename genType , typename genIType >
    GLM_FUNC_DECL genType ldexp (genType const &x, genIType const &exp)
     
    template<typename genType >
    GLM_FUNC_DECL genType max (genType const &x, genType const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType min (genType const &x, genType const &y)
     
    template<typename genTypeT , typename genTypeU >
    GLM_FUNC_DECL genTypeT mix (genTypeT const &x, genTypeT const &y, genTypeU const &a)
     
    template<typename genType >
    GLM_FUNC_DECL genType mod (genType const &x, genType const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType mod (genType const &x, typename genType::value_type const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType modf (genType const &x, genType &i)
     
    template<typename genType >
    GLM_FUNC_DECL genType round (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType roundEven (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType sign (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType smoothstep (genType const &edge0, genType const &edge1, genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType step (genType const &edge, genType const &x)
     
    template<template< typename, precision > class vecType, typename T , precision P>
    GLM_FUNC_DECL vecType< T, P > step (T const &edge, vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType trunc (genType const &x)
     
    GLM_FUNC_DECL float uintBitsToFloat (uint const &v)
     
    template<template< typename, precision > class vecType, precision P>
    GLM_FUNC_DECL vecType< float, P > uintBitsToFloat (vecType< uint, P > const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type noise1 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL tvec2< typename
    +genType::value_type, defaultp > 
    noise2 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL tvec3< typename
    +genType::value_type, defaultp > 
    noise3 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL tvec4< typename
    +genType::value_type, defaultp > 
    noise4 (genType const &x)
     

    Detailed Description

    -

    These all operate component-wise.

    -

    The description is per component.

    +

    Noise functions are stochastic functions that can be used to increase visual complexity.

    +

    Values returned by the following noise functions give the appearance of randomness, but are not truly random.

    Function Documentation

    - +
    - + @@ -155,25 +79,25 @@ Functions
    GLM_FUNC_DECL genType glm::abs GLM_FUNC_DECL genType::value_type glm::noise1 ( genType const &  x)
    -

    Returns x if x >= 0; otherwise, it returns -x.

    +

    Returns a 1D noise value based on the input value x.

    Template Parameters
    - +
    genTypefloating-point or signed integer; scalar or vector types.
    genTypeFloating-point scalar or vector types.
    -
    See Also
    GLSL abs man page
    +
    See also
    GLSL noise1 man page
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    +GLSL 4.20.8 specification, section 8.13 Noise Functions
    - +
    - + @@ -182,158 +106,25 @@ Functions
    GLM_FUNC_DECL genType glm::ceil GLM_FUNC_DECL tvec2<typename genType::value_type, defaultp> glm::noise2 ( genType const &  x)
    -

    Returns a value equal to the nearest integer that is greater than or equal to x.

    +

    Returns a 2D noise value based on the input value x.

    Template Parameters
    genTypeFloating-point scalar or vector types.
    -
    See Also
    GLSL ceil man page
    +
    See also
    GLSL noise2 man page
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    +GLSL 4.20.8 specification, section 8.13 Noise Functions
    - +
    - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::clamp (genType const & x,
    genType const & minVal,
    genType const & maxVal 
    )
    -
    - -

    Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.

    -
    Template Parameters
    - - -
    genTypeFloating-point or integer; scalar or vector types.
    -
    -
    -
    See Also
    GLSL clamp man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -

    Referenced by glm::saturate().

    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL int glm::floatBitsToInt (float const & v)
    -
    - -

    Returns a signed integer value representing the encoding of a floating-point value.

    -

    The floating-point value's bit-level representation is preserved.

    -
    See Also
    GLSL floatBitsToInt man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vecType<int, P> glm::floatBitsToInt (vecType< float, P > const & v)
    -
    - -

    Returns a signed integer value representing the encoding of a floating-point value.

    -

    The floatingpoint value's bit-level representation is preserved.

    -
    See Also
    GLSL floatBitsToInt man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint glm::floatBitsToUint (float const & v)
    -
    - -

    Returns a unsigned integer value representing the encoding of a floating-point value.

    -

    The floatingpoint value's bit-level representation is preserved.

    -
    See Also
    GLSL floatBitsToUint man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vecType<uint, P> glm::floatBitsToUint (vecType< float, P > const & v)
    -
    - -

    Returns a unsigned integer value representing the encoding of a floating-point value.

    -

    The floatingpoint value's bit-level representation is preserved.

    -
    See Also
    GLSL floatBitsToUint man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - + @@ -342,68 +133,25 @@ Functions
    GLM_FUNC_DECL genType glm::floor GLM_FUNC_DECL tvec3<typename genType::value_type, defaultp> glm::noise3 ( genType const &  x)
    -

    Returns a value equal to the nearest integer that is less then or equal to x.

    +

    Returns a 3D noise value based on the input value x.

    Template Parameters
    genTypeFloating-point scalar or vector types.
    -
    See Also
    GLSL floor man page
    +
    See also
    GLSL noise3 man page
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    +GLSL 4.20.8 specification, section 8.13 Noise Functions
    - +
    - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::fma (genType const & a,
    genType const & b,
    genType const & c 
    )
    -
    - -

    Computes and returns a * b + c.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL fma man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - + @@ -412,713 +160,16 @@ Functions
    GLM_FUNC_DECL genType glm::fract GLM_FUNC_DECL tvec4<typename genType::value_type, defaultp> glm::noise4 ( genType const &  x)
    -

    Return x - floor(x).

    +

    Returns a 4D noise value based on the input value x.

    Template Parameters
    genTypeFloating-point scalar or vector types.
    -
    See Also
    GLSL fract man page
    +
    See also
    GLSL noise4 man page
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::frexp (genType const & x,
    genIType & exp 
    )
    -
    - -

    Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent)

    -

    The significand is returned by the function and the exponent is returned in the parameter exp. For a floating-point value of zero, the significant and exponent are both zero. For a floating-point value that is an infinity or is not a number, the results are undefined.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL frexp man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL float glm::intBitsToFloat (int const & v)
    -
    - -

    Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.

    -

    If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

    -
    See Also
    GLSL intBitsToFloat man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vecType<float, P> glm::intBitsToFloat (vecType< int, P > const & v)
    -
    - -

    Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.

    -

    If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

    -
    See Also
    GLSL intBitsToFloat man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType::bool_type glm::isinf (genType const & x)
    -
    - -

    Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.

    -

    Returns false otherwise, including for implementations with no infinity representations.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL isinf man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType::bool_type glm::isnan (genType const & x)
    -
    - -

    Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.

    -

    Returns false otherwise, including for implementations with no NaN representations.

    -

    /!\ When using compiler fast math, this function may fail.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL isnan man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::ldexp (genType const & x,
    genIType const & exp 
    )
    -
    - -

    Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent)

    -

    If this product is too large to be represented in the floating-point type, the result is undefined.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL ldexp man page;
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::max (genType const & x,
    genType const & y 
    )
    -
    - -

    Returns y if x < y; otherwise, it returns x.

    -
    Template Parameters
    - - -
    genTypeFloating-point or integer; scalar or vector types.
    -
    -
    -
    See Also
    GLSL max man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::min (genType const & x,
    genType const & y 
    )
    -
    - -

    Returns y if y < x; otherwise, it returns x.

    -
    Template Parameters
    - - -
    genTypeFloating-point or integer; scalar or vector types.
    -
    -
    -
    See Also
    GLSL min man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions<<<<<<< HEAD
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genTypeT glm::mix (genTypeT const & x,
    genTypeT const & y,
    genTypeU const & a 
    )
    -
    - -

    If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a.

    -

    The value for a is not restricted to the range [0, 1].

    -

    If genTypeU is a boolean scalar or vector: Selects which vector each returned component comes from. For a component of that is false, the corresponding component of x is returned. For a component of a that is true, the corresponding component of y is returned. Components of x and y that are not selected are allowed to be invalid floating point values and will have no effect on the results. Thus, this provides different functionality than genType mix(genType x, genType y, genType(a)) where a is a Boolean vector.

    -
    See Also
    GLSL mix man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    -
    Parameters
    - - - - -
    [in]xValue to interpolate.
    [in]yValue to interpolate.
    [in]aInterpolant.
    -
    -
    -
    Template Parameters
    - - - -
    genTypeTFloating point scalar or vector.
    genTypeUFloating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
    -
    -
    -
    * #include <glm/glm.hpp>
    -
    * ...
    -
    * float a;
    -
    * bool b;
    - - - - -
    * ...
    -
    * glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.
    -
    * glm::vec4 s = glm::mix(g, h, b); // Teturns g or h;
    -
    * glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
    -
    * glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
    -
    *
    -
    -

    Referenced by glm::lerp(), and glm::slerp().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::mod (genType const & x,
    genType const & y 
    )
    -
    - -

    Modulus.

    -

    Returns x - y * floor(x / y) for each component in x using the floating point value y.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL mod man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::mod (genType const & x,
    typename genType::value_type const & y 
    )
    -
    - -

    Modulus.

    -

    Returns x - y * floor(x / y) for each component in x using the floating point value y.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL mod man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::modf (genType const & x,
    genType & i 
    )
    -
    - -

    Returns the fractional part of x and sets i to the integer part (as a whole number floating point value).

    -

    Both the return value and the output parameter will have the same sign as x.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL modf man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::round (genType const & x)
    -
    - -

    Returns a value equal to the nearest integer to x.

    -

    The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest. This includes the possibility that round(x) returns the same value as roundEven(x) for all values of x.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL round man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::roundEven (genType const & x)
    -
    - -

    Returns a value equal to the nearest integer to x.

    -

    A fractional part of 0.5 will round toward the nearest even integer. (Both 3.5 and 4.5 for x will return 4.0.)

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL roundEven man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    -
    -New round to even technique
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::sign (genType const & x)
    -
    - -

    Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.

    -
    Template Parameters
    - - -
    genTypeFloating-point or signed integer; scalar or vector types.
    -
    -
    -
    See Also
    GLSL sign man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::smoothstep (genType const & edge0,
    genType const & edge1,
    genType const & x 
    )
    -
    - -

    Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 < x < edge1.

    -

    This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to: genType t; t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); return t * t * (3 - 2 * t); Results are undefined if edge0 >= edge1.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL smoothstep man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::step (genType const & edge,
    genType const & x 
    )
    -
    - -

    Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.

    -
    See Also
    GLSL step man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL vecType<T, P> glm::step (T const & edge,
    vecType< T, P > const & x 
    )
    -
    - -

    Returns 0.0 if x < edge, otherwise it returns 1.0.

    -
    See Also
    GLSL step man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::trunc (genType const & x)
    -
    - -

    Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL trunc man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL float glm::uintBitsToFloat (uint const & v)
    -
    - -

    Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.

    -

    If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

    -
    See Also
    GLSL uintBitsToFloat man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vecType<float, P> glm::uintBitsToFloat (vecType< uint, P > const & v)
    -
    - -

    Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.

    -

    If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

    -
    See Also
    GLSL uintBitsToFloat man page
    -
    -GLSL 4.20.8 specification, section 8.3 Common Functions
    +GLSL 4.20.8 specification, section 8.13 Noise Functions
    @@ -1127,7 +178,7 @@ Functions diff --git a/doc/api/a00156.html b/doc/api/a00156.html index 6bc3a166..945df16f 100644 --- a/doc/api/a00156.html +++ b/doc/api/a00156.html @@ -3,8 +3,8 @@ - -GLM: Exponential functions + +0.9.6: Floating-Point Pack and Unpack Functions @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,278 +39,317 @@
    -
    Exponential functions
    +
    Floating-Point Pack and Unpack Functions
    - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType exp (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType exp2 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType inversesqrt (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType log (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType log2 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType pow (genType const &base, genType const &exponent)
     
    template<typename genType >
    GLM_FUNC_DECL genType sqrt (genType const &x)
     
    GLM_FUNC_DECL double packDouble2x32 (uvec2 const &v)
     
    GLM_FUNC_DECL uint packHalf2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint packSnorm2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint packSnorm4x8 (vec4 const &v)
     
    GLM_FUNC_DECL uint packUnorm2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint packUnorm4x8 (vec4 const &v)
     
    GLM_FUNC_DECL uvec2 unpackDouble2x32 (double const &v)
     
    GLM_FUNC_DECL vec2 unpackHalf2x16 (uint const &v)
     
    GLM_FUNC_DECL vec2 unpackSnorm2x16 (uint const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm4x8 (uint const &p)
     
    GLM_FUNC_DECL vec2 unpackUnorm2x16 (uint const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm4x8 (uint const &p)
     

    Detailed Description

    -

    These all operate component-wise.

    -

    The description is per component.

    +

    These functions do not operate component-wise, rather as described in each case.

    Function Documentation

    - +
    - + - - + +
    GLM_FUNC_DECL genType glm::exp GLM_FUNC_DECL double glm::packDouble2x32 (genType const & x)uvec2 const & v)
    -

    Returns the natural exponentiation of x, i.e., e^x.

    -
    Parameters
    - - -
    xexp function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL exp man page
    +

    Returns a double-precision value obtained by packing the components of v into a 64-bit value.

    +

    If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit- level representation of v is preserved. The first vector component specifies the 32 least significant bits; the second component specifies the 32 most significant bits.

    +
    See also
    GLSL packDouble2x32 man page
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + - - + +
    GLM_FUNC_DECL genType glm::exp2 GLM_FUNC_DECL uint glm::packHalf2x16 (genType const & x)vec2 const & v)
    -

    Returns 2 raised to the x power.

    -
    Parameters
    - - -
    xexp2 function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL exp2 man page
    +

    Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer.

    +

    The first vector component specifies the 16 least-significant bits of the result; the second component specifies the 16 most-significant bits.

    +
    See also
    GLSL packHalf2x16 man page
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + - - + +
    GLM_FUNC_DECL genType glm::inversesqrt GLM_FUNC_DECL uint glm::packSnorm2x16 (genType const & x)vec2 const & v)
    -

    Returns the reciprocal of the positive square root of x.

    -
    Parameters
    - - -
    xinversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL inversesqrt man page
    +

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    +

    Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See also
    GLSL packSnorm2x16 man page
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + - - + +
    GLM_FUNC_DECL genType glm::log GLM_FUNC_DECL uint glm::packSnorm4x8 (genType const & x)vec4 const & v)
    -

    Returns the natural logarithm of x, i.e., returns the value y which satisfies the equation x = e^y.

    -

    Results are undefined if x <= 0.

    -
    Parameters
    - - -
    xlog function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL log man page
    +

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    +

    Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packSnorm4x8: round(clamp(c, -1, +1) * 127.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See also
    GLSL packSnorm4x8 man page
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + - - + +
    GLM_FUNC_DECL genType glm::log2 GLM_FUNC_DECL uint glm::packUnorm2x16 (genType const & x)vec2 const & v)
    -

    Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y.

    -
    Parameters
    - - -
    xlog2 function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL log2 man page
    +

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    +

    Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See also
    GLSL packUnorm2x16 man page
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::pow GLM_FUNC_DECL uint glm::packUnorm4x8 (genType const & base,
    genType const & exponent 
    )
    -
    - -

    Returns 'base' raised to the power 'exponent'.

    -
    Parameters
    - - - -
    baseFloating point value. pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
    exponentFloating point value representing the 'exponent'.
    -
    -
    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL pow man page
    -
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    - -
    -
    - -
    -
    - - - - - - + +
    GLM_FUNC_DECL genType glm::sqrt (genType const & x)vec4 const & v)
    -

    Returns the positive square root of x.

    -
    Parameters
    - - -
    xsqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
    -
    -
    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL sqrt man page
    +

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    +

    Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packUnorm4x8: round(clamp(c, 0, +1) * 255.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See also
    GLSL packUnorm4x8 man page
    -GLSL 4.20.8 specification, section 8.2 Exponential Functions
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL uvec2 glm::unpackDouble2x32 (double const & v)
    +
    + +

    Returns a two-component unsigned integer vector representation of v.

    +

    The bit-level representation of v is preserved. The first component of the vector contains the 32 least significant bits of the double; the second component consists the 32 most significant bits.

    +
    See also
    GLSL unpackDouble2x32 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vec2 glm::unpackHalf2x16 (uint const & v)
    +
    + +

    Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.

    +

    The first component of the vector is obtained from the 16 least-significant bits of v; the second component is obtained from the 16 most-significant bits of v.

    +
    See also
    GLSL unpackHalf2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vec2 glm::unpackSnorm2x16 (uint const & p)
    +
    + +

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x16: clamp(f / 32767.0, -1, +1)

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLSL unpackSnorm2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vec4 glm::unpackSnorm4x8 (uint const & p)
    +
    + +

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x8: clamp(f / 127.0, -1, +1)

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLSL unpackSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vec2 glm::unpackUnorm2x16 (uint const & p)
    +
    + +

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm2x16: f / 65535.0

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLSL unpackUnorm2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vec4 glm::unpackUnorm4x8 (uint const & p)
    +
    + +

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLSL unpackUnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    @@ -321,7 +358,7 @@ Functions diff --git a/doc/api/a00157.html b/doc/api/a00157.html index 65f31ed2..4aadf22c 100644 --- a/doc/api/a00157.html +++ b/doc/api/a00157.html @@ -3,8 +3,8 @@ - -GLM: Geometric functions + +0.9.6: Angle and Trigonometry Functions @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,297 +39,189 @@
    -
    Geometric functions
    +
    Angle and Trigonometry Functions
    - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > cross (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type distance (genType const &p0, genType const &p1)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T dot (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType dot (genType const &x, genType const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType faceforward (genType const &N, genType const &I, genType const &Nref)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type length (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType normalize (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType reflect (genType const &I, genType const &N)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > refract (vecType< T, P > const &I, vecType< T, P > const &N, T const &eta)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > acos (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > acosh (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > asin (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > asinh (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > atan (vecType< T, P > const &y, vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > atan (vecType< T, P > const &y_over_x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > atanh (vecType< T, P > const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > cos (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > cosh (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > degrees (vecType< T, P > const &radians)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > radians (vecType< T, P > const &degrees)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sin (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sinh (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > tan (vecType< T, P > const &angle)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > tanh (vecType< T, P > const &angle)
     

    Detailed Description

    -

    These operate on vectors as vectors, not component-wise.

    +

    Function parameters specified as angle are assumed to be in units of radians.

    +

    In no case will any of these functions result in a divide by zero error. If the divisor of a ratio is 0, then results will be undefined.

    +

    These all operate component-wise. The description is per component.

    Function Documentation

    - +
    - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tvec3<T, P> glm::cross (detail::tvec3< T, P > const & x,
    detail::tvec3< T, P > const & y 
    )
    -
    - -

    Returns the cross product of x and y.

    -
    Template Parameters
    - - -
    valTypeFloating-point scalar types.
    -
    -
    -
    See Also
    GLSL cross man page
    -
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType::value_type glm::distance (genType const & p0,
    genType const & p1 
    )
    -
    - -

    Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).

    -
    Template Parameters
    - - -
    genTypeFloating-point vector types.
    -
    -
    -
    See Also
    GLSL distance man page
    -
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - -
    -
    - -
    -
    - - - + - - - - - - - - - - - - - -
    GLM_FUNC_DECL T glm::dot GLM_FUNC_DECL vecType<T, P> glm::acos ( vecType< T, P > const & x,
    vecType< T, P > const & y 
    )
    -
    - -

    Returns the dot product of x and y, i.e., result = x * y.

    -
    Template Parameters
    - - -
    genTypeFloating-point vector types.
    -
    -
    -
    See Also
    GLSL dot man page
    -
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::dot (genType const & x,
    genType const & y 
    )
    -
    - -

    Returns the dot product of x and y, i.e., result = x * y.

    -
    Template Parameters
    - - -
    genTypeFloating-point vector types.
    -
    -
    -
    See Also
    GLSL dot man page
    -
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::faceforward (genType const & N,
    genType const & I,
    genType const & Nref 
    )
    -
    - -

    If dot(Nref, I) < 0.0, return N, otherwise, return -N.

    -
    Template Parameters
    - - -
    genTypeFloating-point vector types.
    -
    -
    -
    See Also
    GLSL faceforward man page
    -
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    - -
    -
    - -
    -
    - - - - -
    GLM_FUNC_DECL genType::value_type glm::length (genType const &  x)
    -

    Returns the length of x, i.e., sqrt(x * x).

    +

    Arc cosine.

    +

    Returns an angle whose sine is x. The range of values returned by this function is [0, PI]. Results are undefined if |x| > 1.

    Template Parameters
    - +
    genTypeFloating-point vector types.
    genTypeFloating-point scalar or vector types.
    -
    See Also
    GLSL length man page
    +
    See also
    GLSL acos man page
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - +
    - + - +
    GLM_FUNC_DECL genType glm::normalize GLM_FUNC_DECL vecType<T, P> glm::acosh (genType const & vecType< T, P > const &  x)
    -

    Returns a vector in the same direction as x but with length of 1.

    -
    See Also
    GLSL normalize man page
    +

    Arc hyperbolic cosine; returns the non-negative inverse of cosh.

    +

    Results are undefined if x < 1.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL acosh man page
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    - +
    - + - - + + + + +
    GLM_FUNC_DECL genType glm::reflect GLM_FUNC_DECL vecType<T, P> glm::asin (genType const & I, vecType< T, P > const & x)
    +
    + +

    Arc sine.

    +

    Returns an angle whose sine is x. The range of values returned by this function is [-PI/2, PI/2]. Results are undefined if |x| > 1.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL asin man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::asinh (vecType< T, P > const & x)
    +
    + +

    Arc hyperbolic sine; returns the inverse of sinh.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL asinh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + - - + + @@ -341,59 +231,293 @@ Functions
    GLM_FUNC_DECL vecType<T, P> glm::atan (vecType< T, P > const & y,
    genType const & N vecType< T, P > const & x 
    -

    For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N.

    +

    Arc tangent.

    +

    Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0.

    Template Parameters
    - +
    genTypeFloating-point vector types.
    genTypeFloating-point scalar or vector types.
    -
    See Also
    GLSL reflect man page
    +
    See also
    GLSL atan man page
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +

    Referenced by glm::atan2().

    - +
    - + - - - - + - - - - - - - - - - - - -
    GLM_FUNC_DECL vecType<T, P> glm::refract GLM_FUNC_DECL vecType<T, P> glm::atan ( vecType< T, P > const & I,
    y_over_x) vecType< T, P > const & N,
    T const & eta 
    )
    -

    For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector.

    +

    Arc tangent.

    +

    Returns an angle whose tangent is y_over_x. The range of values returned by this function is [-PI/2, PI/2].

    Template Parameters
    - +
    genTypeFloating-point vector types.
    genTypeFloating-point scalar or vector types.
    -
    See Also
    GLSL refract man page
    +
    See also
    GLSL atan man page
    -GLSL 4.20.8 specification, section 8.5 Geometric Functions
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::atanh (vecType< T, P > const & x)
    +
    + +

    Arc hyperbolic tangent; returns the inverse of tanh.

    +

    Results are undefined if abs(x) >= 1.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL atanh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::cos (vecType< T, P > const & angle)
    +
    + +

    The standard trigonometric cosine function.

    +

    The values returned by this function will range from [-1, 1].

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL cos man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::cosh (vecType< T, P > const & angle)
    +
    + +

    Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL cosh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::degrees (vecType< T, P > const & radians)
    +
    + +

    Converts radians to degrees and returns the result.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL degrees man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::radians (vecType< T, P > const & degrees)
    +
    + +

    Converts degrees to radians and returns the result.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL radians man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::sin (vecType< T, P > const & angle)
    +
    + +

    The standard trigonometric sine function.

    +

    The values returned by this function will range from [-1, 1].

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL sin man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::sinh (vecType< T, P > const & angle)
    +
    + +

    Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL sinh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::tan (vecType< T, P > const & angle)
    +
    + +

    The standard trigonometric tangent function.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL tan man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::tanh (vecType< T, P > const & angle)
    +
    + +

    Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL tanh man page
    +
    +GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    @@ -402,7 +526,7 @@ Functions diff --git a/doc/api/a00158.html b/doc/api/a00158.html index 42fbe5c8..9c4d408b 100644 --- a/doc/api/a00158.html +++ b/doc/api/a00158.html @@ -3,8 +3,8 @@ - -GLM: Integer functions + +0.9.6: Vector Relational Functions @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,286 +39,114 @@
    -
    Integer functions
    +
    Vector Relational Functions
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , template< typename > class genIUType>
    GLM_FUNC_DECL genIUType< T >
    -::signed_type 
    bitCount (genIUType< T > const &Value)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldExtract (genIUType const &Value, int const &Offset, int const &Bits)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldInsert (genIUType const &Base, genIUType const &Insert, int const &Offset, int const &Bits)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldReverse (genIUType const &Value)
     
    template<typename T , template< typename > class genIUType>
    GLM_FUNC_DECL genIUType< T >
    -::signed_type 
    findLSB (genIUType< T > const &Value)
     
    template<typename T , template< typename > class genIUType>
    GLM_FUNC_DECL genIUType< T >
    -::signed_type 
    findMSB (genIUType< T > const &Value)
     
    template<typename genIType >
    GLM_FUNC_DECL void imulExtended (genIType const &x, genIType const &y, genIType &msb, genIType &lsb)
     
    template<typename genUType >
    GLM_FUNC_DECL genUType uaddCarry (genUType const &x, genUType const &y, genUType &carry)
     
    template<typename genUType >
    GLM_FUNC_DECL void umulExtended (genUType const &x, genUType const &y, genUType &msb, genUType &lsb)
     
    template<typename genUType >
    GLM_FUNC_DECL genUType usubBorrow (genUType const &x, genUType const &y, genUType &borrow)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool all (vecType< bool, P > const &v)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool any (vecType< bool, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > equal (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > greaterThan (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > greaterThanEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > lessThan (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > lessThanEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > not_ (vecType< bool, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > notEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     

    Detailed Description

    -

    These all operate component-wise.

    -

    The description is per component. The notation [a, b] means the set of bits from bit-number a through bit-number b, inclusive. The lowest-order bit is bit 0.

    +

    Relational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results.

    +

    For vector results, use the following built-in functions.

    +

    In all cases, the sizes of all the input and return vectors for any particular call must match.

    Function Documentation

    - +
    - + - - + +
    GLM_FUNC_DECL genIUType<T>::signed_type glm::bitCount GLM_FUNC_DECL bool glm::all (genIUType< T > const & Value)vecType< bool, P > const & v)
    -

    Returns the number of bits set to 1 in the binary representation of value.

    +

    Returns true if all components of x are true.

    Template Parameters
    - +
    genIUTypeSigned or unsigned integer scalar or vector types.
    vecTypeBoolean vector types.
    -
    See Also
    GLSL bitCount man page
    +
    See also
    GLSL all man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    -
    Todo:
    Clarify the declaration to specify that scalars are suported.
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - +
    - + - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genIUType glm::bitfieldExtract GLM_FUNC_DECL bool glm::any (genIUType const & Value,
    int const & Offset,
    int const & Bits 
    )
    -
    - -

    Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result.

    -

    For unsigned data types, the most significant bits of the result will be set to zero. For signed data types, the most significant bits will be set to the value of bit offset + base - 1.

    -

    If bits is zero, the result will be zero. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.

    -
    Template Parameters
    - - -
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    -
    -
    See Also
    GLSL bitfieldExtract man page
    -
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genIUType glm::bitfieldInsert (genIUType const & Base,
    genIUType const & Insert,
    int const & Offset,
    int const & Bits 
    )
    -
    - -

    Returns the insertion the bits least-significant bits of insert into base.

    -

    The result will have bits [offset, offset + bits - 1] taken from bits [0, bits - 1] of insert, and all other bits taken directly from the corresponding bits of base. If bits is zero, the result will simply be base. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.

    -
    Template Parameters
    - - -
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    -
    -
    See Also
    GLSL bitfieldInsert man page
    -
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    - -
    -
    - -
    -
    - - - - - - + +
    GLM_FUNC_DECL genIUType glm::bitfieldReverse (genIUType const & Value)vecType< bool, P > const & v)
    -

    Returns the reversal of the bits of value.

    -

    The bit numbered n of the result will be taken from bit (bits - 1) - n of value, where bits is the total number of bits used to represent value.

    +

    Returns true if any component of x is true.

    Template Parameters
    - +
    genIUTypeSigned or unsigned integer scalar or vector types.
    vecTypeBoolean vector types.
    -
    See Also
    GLSL bitfieldReverse man page
    +
    See also
    GLSL any man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - +
    - + - - - - -
    GLM_FUNC_DECL genIUType<T>::signed_type glm::findLSB GLM_FUNC_DECL vecType<bool, P> glm::equal (genIUType< T > const & Value)
    -
    - -

    Returns the bit number of the least significant bit set to 1 in the binary representation of value.

    -

    If value is zero, -1 will be returned.

    -
    Template Parameters
    - - -
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    -
    -
    See Also
    GLSL findLSB man page
    -
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    -
    Todo:
    Clarify the declaration to specify that scalars are suported.
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genIUType<T>::signed_type glm::findMSB (genIUType< T > const & Value)
    -
    - -

    Returns the bit number of the most significant bit in the binary representation of value.

    -

    For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.

    -
    Template Parameters
    - - -
    genIUTypeSigned or unsigned integer scalar or vector types.
    -
    -
    -
    See Also
    GLSL findMSB man page
    -
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    -
    Todo:
    Clarify the declaration to specify that scalars are suported.
    - -
    -
    - -
    -
    - - - - - + - - - - - - - - - - - - - - + + @@ -330,41 +156,34 @@ Functions
    GLM_FUNC_DECL void glm::imulExtended (genIType const & vecType< T, P > const &  x,
    genIType const & y,
    genIType & msb,
    genIType & lsb vecType< T, P > const & y 
    -

    Multiplies 32-bit integers x and y, producing a 64-bit result.

    -

    The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.

    +

    Returns the component-wise comparison of result x == y.

    Template Parameters
    - +
    genITypeSigned integer scalar or vector types.
    vecTypeFloating-point, integer or boolean vector types.
    -
    See Also
    GLSL imulExtended man page
    +
    See also
    GLSL equal man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - +
    - + - + - - - - - - - - + + @@ -374,47 +193,34 @@ Functions
    GLM_FUNC_DECL genUType glm::uaddCarry GLM_FUNC_DECL vecType<bool, P> glm::greaterThan (genUType const & vecType< T, P > const &  x,
    genUType const & y,
    genUType & carry vecType< T, P > const & y 
    -

    Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).

    -

    The value carry is set to 0 if the sum was less than pow(2, 32), or to 1 otherwise.

    +

    Returns the component-wise comparison of result x > y.

    Template Parameters
    - +
    genUTypeUnsigned integer scalar or vector types.
    vecTypeFloating-point or integer vector types.
    -
    See Also
    GLSL uaddCarry man page
    +
    See also
    GLSL greaterThan man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - +
    - + - + - - - - - - - - - - - - - - + + @@ -424,41 +230,34 @@ Functions
    GLM_FUNC_DECL void glm::umulExtended GLM_FUNC_DECL vecType<bool, P> glm::greaterThanEqual (genUType const & vecType< T, P > const &  x,
    genUType const & y,
    genUType & msb,
    genUType & lsb vecType< T, P > const & y 
    -

    Multiplies 32-bit integers x and y, producing a 64-bit result.

    -

    The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.

    +

    Returns the component-wise comparison of result x >= y.

    Template Parameters
    - +
    genUTypeUnsigned integer scalar or vector types.
    vecTypeFloating-point or integer vector types.
    -
    See Also
    GLSL umulExtended man page
    +
    See also
    GLSL greaterThanEqual man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    - +
    - + - + - - - - - - - - + + @@ -468,17 +267,118 @@ Functions
    GLM_FUNC_DECL genUType glm::usubBorrow GLM_FUNC_DECL vecType<bool, P> glm::lessThan (genUType const & vecType< T, P > const &  x,
    genUType const & y,
    genUType & borrow vecType< T, P > const & y 
    -

    Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.

    -

    The value borrow is set to 0 if x >= y, or to 1 otherwise.

    +

    Returns the component-wise comparison result of x < y.

    Template Parameters
    - +
    genUTypeUnsigned integer scalar or vector types.
    vecTypeFloating-point or integer vector types.
    -
    See Also
    GLSL usubBorrow man page
    +
    See also
    GLSL lessThan man page
    -GLSL 4.20.8 specification, section 8.8 Integer Functions
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<bool, P> glm::lessThanEqual (vecType< T, P > const & x,
    vecType< T, P > const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x <= y.

    +
    Template Parameters
    + + +
    vecTypeFloating-point or integer vector types.
    +
    +
    +
    See also
    GLSL lessThanEqual man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<bool, P> glm::not_ (vecType< bool, P > const & v)
    +
    + +

    Returns the component-wise logical complement of x.

    +

    /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.

    +
    Template Parameters
    + + +
    vecTypeBoolean vector types.
    +
    +
    +
    See also
    GLSL not man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<bool, P> glm::notEqual (vecType< T, P > const & x,
    vecType< T, P > const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x != y.

    +
    Template Parameters
    + + +
    vecTypeFloating-point, integer or boolean vector types.
    +
    +
    +
    See also
    GLSL notEqual man page
    +
    +GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    @@ -487,7 +387,7 @@ Functions diff --git a/doc/api/a00159.html b/doc/api/a00159.html index 475d61f3..a6d9d0e9 100644 --- a/doc/api/a00159.html +++ b/doc/api/a00159.html @@ -3,8 +3,8 @@ - -GLM: Matrix functions + +0.9.6: GTC Extensions (Stable) @@ -16,9 +16,9 @@ + @@ -26,30 +26,72 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    +
    -
    Matrix functions
    +
    GTC Extensions (Stable)
    -

    For each of the following built-in matrix functions, there is both a single-precision floating point version, where all arguments and return values are single precision, and a double-precision floating version, where all arguments and return values are double precision.

    -

    Only the single-precision floating point version is shown.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Modules

     GLM_GTC_bitfield
     
     GLM_GTC_constants
     
     GLM_GTC_epsilon
     
     GLM_GTC_integer
     
     GLM_GTC_matrix_access
     
     GLM_GTC_matrix_integer
     
     GLM_GTC_matrix_inverse
     
     GLM_GTC_matrix_transform
     
     GLM_GTC_noise
     
     GLM_GTC_packing
     
     GLM_GTC_quaternion
     
     GLM_GTC_random
     
     GLM_GTC_reciprocal
     
     GLM_GTC_round
     
     GLM_GTC_type_precision
     
     GLM_GTC_type_ptr
     
     GLM_GTC_ulp
     
     GLM_GTC_vec1
     
    +

    Detailed Description

    +

    Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.

    +

    GTC extensions aim to be stable.

    +

    Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

    diff --git a/doc/api/a00160.html b/doc/api/a00160.html index 602d4953..a6e66c0e 100644 --- a/doc/api/a00160.html +++ b/doc/api/a00160.html @@ -3,8 +3,8 @@ - -GLM: Noise functions + +0.9.6: GTX Extensions (Experimental) @@ -16,9 +16,9 @@ + @@ -26,164 +26,152 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    Noise functions
    +
    GTX Extensions (Experimental)
    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Functions

    template<typename genType >
    GLM_FUNC_DECL genType::value_type noise1 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL detail::tvec2
    -< typename genType::value_type,
    -defaultp > 
    noise2 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL detail::tvec3
    -< typename genType::value_type,
    -defaultp > 
    noise3 (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL detail::tvec4
    -< typename genType::value_type,
    -defaultp > 
    noise4 (genType const &x)
     

    +Modules

     GLM_GTX_associated_min_max
     
     GLM_GTX_bit
     
     GLM_GTX_closest_point
     
     GLM_GTX_color_space
     
     GLM_GTX_color_space_YCoCg
     
     GLM_GTX_common
     
     GLM_GTX_compatibility
     
     GLM_GTX_component_wise
     
     GLM_GTX_dual_quaternion
     
     GLM_GTX_euler_angles
     
     GLM_GTX_extend
     
     GLM_GTX_extented_min_max
     
     GLM_GTX_fast_exponential
     
     GLM_GTX_fast_square_root
     
     GLM_GTX_fast_trigonometry
     
     GLM_GTX_gradient_paint
     
     GLM_GTX_handed_coordinate_space
     
     GLM_GTX_inertia
     
     GLM_GTX_integer
     
     GLM_GTX_intersect
     
     GLM_GTX_io
     
     GLM_GTX_log_base
     
     GLM_GTX_matrix_cross_product
     
     GLM_GTX_matrix_decompose
     
     GLM_GTX_matrix_interpolation
     
     GLM_GTX_matrix_major_storage
     
     GLM_GTX_matrix_operation
     
     GLM_GTX_matrix_query
     
     GLM_GTX_matrix_transform_2d
     
     GLM_GTX_mixed_producte
     
     GLM_GTX_multiple
     
     GLM_GTX_norm
     
     GLM_GTX_normal
     
     GLM_GTX_normalize_dot
     
     GLM_GTX_number_precision
     
     GLM_GTX_optimum_pow
     
     GLM_GTX_orthonormalize
     
     GLM_GTX_perpendicular
     
     GLM_GTX_polar_coordinates
     
     GLM_GTX_projection
     
     GLM_GTX_quaternion
     
     GLM_GTX_range
     
     GLM_GTX_raw_data
     
     GLM_GTX_rotate_normalized_axis
     
     GLM_GTX_rotate_vector
     
     GLM_GTX_scalar_relational
     
     GLM_GTX_simd_mat4
     
     GLM_GTX_simd_quat
     
     GLM_GTX_simd_vec4
     
     GLM_GTX_spline
     
     GLM_GTX_std_based_type
     
     GLM_GTX_string_cast
     
     GLM_GTX_transform
     
     GLM_GTX_transform2
     
     GLM_GTX_type_aligned
     
     GLM_GTX_vector_angle
     
     GLM_GTX_vector_query
     
     GLM_GTX_wrap
     

    Detailed Description

    -

    Noise functions are stochastic functions that can be used to increase visual complexity.

    -

    Values returned by the following noise functions give the appearance of randomness, but are not truly random.

    -

    Function Documentation

    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType::value_type glm::noise1 (genType const & x)
    -
    - -

    Returns a 1D noise value based on the input value x.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL noise1 man page
    -
    -GLSL 4.20.8 specification, section 8.13 Noise Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL detail::tvec2<typename genType::value_type, defaultp> glm::noise2 (genType const & x)
    -
    - -

    Returns a 2D noise value based on the input value x.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL noise2 man page
    -
    -GLSL 4.20.8 specification, section 8.13 Noise Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL detail::tvec3<typename genType::value_type, defaultp> glm::noise3 (genType const & x)
    -
    - -

    Returns a 3D noise value based on the input value x.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL noise3 man page
    -
    -GLSL 4.20.8 specification, section 8.13 Noise Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL detail::tvec4<typename genType::value_type, defaultp> glm::noise4 (genType const & x)
    -
    - -

    Returns a 4D noise value based on the input value x.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL noise4 man page
    -
    -GLSL 4.20.8 specification, section 8.13 Noise Functions
    - -
    -
    +

    Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.

    +

    Experimental extensions are useful functions and types, but the development of their API and functionality is not necessarily stable. They can change substantially between versions. Backwards compatibility is not much of an issue for them.

    +

    Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

    diff --git a/doc/api/a00161.html b/doc/api/a00161.html index ea425517..0c81ab43 100644 --- a/doc/api/a00161.html +++ b/doc/api/a00161.html @@ -3,8 +3,8 @@ - -GLM: Floating-Point Pack and Unpack Functions + +0.9.6: GLM Core @@ -16,9 +16,9 @@ + @@ -26,341 +26,61 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    Floating-Point Pack and Unpack Functions
    +
    GLM Core
    - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +

    -Functions

    GLM_FUNC_DECL double packDouble2x32 (uvec2 const &v)
     
    GLM_FUNC_DECL uint packHalf2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint packSnorm2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint packSnorm4x8 (vec4 const &v)
     
    GLM_FUNC_DECL uint packUnorm2x16 (vec2 const &v)
     
    GLM_FUNC_DECL uint packUnorm4x8 (vec4 const &v)
     
    GLM_FUNC_DECL uvec2 unpackDouble2x32 (double const &v)
     
    GLM_FUNC_DECL vec2 unpackHalf2x16 (uint const &v)
     
    GLM_FUNC_DECL vec2 unpackSnorm2x16 (uint const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm4x8 (uint const &p)
     
    GLM_FUNC_DECL vec2 unpackUnorm2x16 (uint const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm4x8 (uint const &p)
     

    +Modules

     Common functions
     
     Exponential functions
     
     Geometric functions
     
     Integer functions
     
     Matrix functions
     
     Noise functions
     
     Floating-Point Pack and Unpack Functions
     
     Angle and Trigonometry Functions
     
     Vector Relational Functions
     
     Types
     
     Precision types
     
     Template types
     

    Detailed Description

    -

    These functions do not operate component-wise, rather as described in each case.

    -

    Function Documentation

    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL double glm::packDouble2x32 (uvec2 const & v)
    -
    - -

    Returns a double-precision value obtained by packing the components of v into a 64-bit value.

    -

    If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit- level representation of v is preserved. The first vector component specifies the 32 least significant bits; the second component specifies the 32 most significant bits.

    -
    See Also
    GLSL packDouble2x32 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint glm::packHalf2x16 (vec2 const & v)
    -
    - -

    Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer.

    -

    The first vector component specifies the 16 least-significant bits of the result; the second component specifies the 16 most-significant bits.

    -
    See Also
    GLSL packHalf2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint glm::packSnorm2x16 (vec2 const & v)
    -
    - -

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    -

    Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See Also
    GLSL packSnorm2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint glm::packSnorm4x8 (vec4 const & v)
    -
    - -

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    -

    Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packSnorm4x8: round(clamp(c, -1, +1) * 127.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See Also
    GLSL packSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint glm::packUnorm2x16 (vec2 const & v)
    -
    - -

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    -

    Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See Also
    GLSL packUnorm2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint glm::packUnorm4x8 (vec4 const & v)
    -
    - -

    First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

    -

    Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packUnorm4x8: round(clamp(c, 0, +1) * 255.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See Also
    GLSL packUnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uvec2 glm::unpackDouble2x32 (double const & v)
    -
    - -

    Returns a two-component unsigned integer vector representation of v.

    -

    The bit-level representation of v is preserved. The first component of the vector contains the 32 least significant bits of the double; the second component consists the 32 most significant bits.

    -
    See Also
    GLSL unpackDouble2x32 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec2 glm::unpackHalf2x16 (uint const & v)
    -
    - -

    Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.

    -

    The first component of the vector is obtained from the 16 least-significant bits of v; the second component is obtained from the 16 most-significant bits of v.

    -
    See Also
    GLSL unpackHalf2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec2 glm::unpackSnorm2x16 (uint const & p)
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x16: clamp(f / 32767.0, -1, +1)

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLSL unpackSnorm2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec4 glm::unpackSnorm4x8 (uint const & p)
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x8: clamp(f / 127.0, -1, +1)

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLSL unpackSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec2 glm::unpackUnorm2x16 (uint const & p)
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm2x16: f / 65535.0

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLSL unpackUnorm2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec4 glm::unpackUnorm4x8 (uint const & p)
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLSL unpackUnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    +

    The core of GLM, which implements exactly and only the GLSL specification to the degree possible.

    +

    The GLM core consists of C++ types that mirror GLSL types and C++ functions that mirror the GLSL functions. It also includes a set of precision-based types that can be used in the appropriate functions. The C++ types are all based on a basic set of template types.

    +

    The best documentation for GLM Core is the current GLSL specification, version 4.2 (pdf file).

    +

    GLM core functionnalities require <glm/glm.hpp> to be included to be used.

    diff --git a/doc/api/a00162.html b/doc/api/a00162.html index e4b7706f..c50f724f 100644 --- a/doc/api/a00162.html +++ b/doc/api/a00162.html @@ -3,8 +3,8 @@ - -GLM: Angle and Trigonometry Functions + +0.9.6: Types @@ -16,9 +16,9 @@ + @@ -26,500 +26,774 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    Angle and Trigonometry Functions
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +

    -Functions

    template<typename genType >
    GLM_FUNC_DECL genType acos (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acosh (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asin (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asinh (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType atan (genType const &y, genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType atan (genType const &y_over_x)
     
    template<typename genType >
    GLM_FUNC_DECL genType atanh (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType cos (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType cosh (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType degrees (genType const &radians)
     
    template<typename genType >
    GLM_FUNC_DECL genType radians (genType const &degrees)
     
    template<typename genType >
    GLM_FUNC_DECL genType sin (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sinh (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType tan (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType tanh (genType const &angle)
     

    +Modules

     Precision types
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef highp_bvec2 bvec2
     
    typedef highp_bvec3 bvec3
     
    typedef highp_bvec4 bvec4
     
    typedef highp_dmat2x2 dmat2
     
    typedef highp_dmat2x2 dmat2x2
     
    typedef highp_dmat2x3 dmat2x3
     
    typedef highp_dmat2x4 dmat2x4
     
    typedef highp_dmat3x3 dmat3
     
    typedef highp_dmat3x2 dmat3x2
     
    typedef highp_dmat3x3 dmat3x3
     
    typedef highp_dmat3x4 dmat3x4
     
    typedef highp_dmat4x4 dmat4
     
    typedef highp_dmat4x2 dmat4x2
     
    typedef highp_dmat4x3 dmat4x3
     
    typedef highp_dmat4x4 dmat4x4
     
    typedef highp_dvec2 dvec2
     
    typedef highp_dvec3 dvec3
     
    typedef highp_dvec4 dvec4
     
    typedef highp_ivec2 ivec2
     
    typedef highp_ivec3 ivec3
     
    typedef highp_ivec4 ivec4
     
    typedef mat2x2 mat2
     
    typedef highp_mat2x2 mat2x2
     
    typedef highp_mat2x3 mat2x3
     
    typedef highp_mat2x4 mat2x4
     
    typedef mat3x3 mat3
     
    typedef highp_mat3x2 mat3x2
     
    typedef highp_mat3x3 mat3x3
     
    typedef highp_mat3x4 mat3x4
     
    typedef mat4x4 mat4
     
    typedef highp_mat4x2 mat4x2
     
    typedef highp_mat4x3 mat4x3
     
    typedef highp_mat4x4 mat4x4
     
    typedef highp_uvec2 uvec2
     
    typedef highp_uvec3 uvec3
     
    typedef highp_uvec4 uvec4
     
    typedef highp_vec2 vec2
     
    typedef highp_vec3 vec3
     
    typedef highp_vec4 vec4
     

    Detailed Description

    -

    Function parameters specified as angle are assumed to be in units of radians.

    -

    In no case will any of these functions result in a divide by zero error. If the divisor of a ratio is 0, then results will be undefined.

    -

    These all operate component-wise. The description is per component.

    -

    Function Documentation

    - +

    The standard types defined by the specification.

    +

    These types are all typedefs of more generalized, template types. To see the definiton of these template types, go to Template types.

    +

    Typedef Documentation

    +
    - - - - - +
    GLM_FUNC_DECL genType glm::acos (genType const & x)typedef highp_bvec2 bvec2
    -

    Arc cosine.

    -

    Returns an angle whose sine is x. The range of values returned by this function is [0, PI]. Results are undefined if |x| > 1.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL acos man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    2 components vector of boolean.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 500 of file type_vec.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::acosh (genType const & x)typedef highp_bvec3 bvec3
    -

    Arc hyperbolic cosine; returns the non-negative inverse of cosh.

    -

    Results are undefined if x < 1.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL acosh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    3 components vector of boolean.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 505 of file type_vec.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::asin (genType const & x)typedef highp_bvec4 bvec4
    -

    Arc sine.

    -

    Returns an angle whose sine is x. The range of values returned by this function is [-PI/2, PI/2]. Results are undefined if |x| > 1.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL asin man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    4 components vector of boolean.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 510 of file type_vec.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::asinh (genType const & x)typedef highp_dmat2x2 dmat2
    -

    Arc hyperbolic sine; returns the inverse of sinh.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL asinh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    2 * 2 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 729 of file type_mat.hpp.

    - +
    - - - - - - - - - - - - - - - +
    GLM_FUNC_DECL genType glm::atan (genType const & y,
    genType const & x 
    )typedef highp_dmat2x2 dmat2x2
    -

    Arc tangent.

    -

    Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL atan man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    2 * 2 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -

    Referenced by glm::atan2().

    +

    Definition at line 744 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::atan (genType const & y_over_x)typedef highp_dmat2x3 dmat2x3
    -

    Arc tangent.

    -

    Returns an angle whose tangent is y_over_x. The range of values returned by this function is [-PI/2, PI/2].

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL atan man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    2 * 3 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 749 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::atanh (genType const & x)typedef highp_dmat2x4 dmat2x4
    -

    Arc hyperbolic tangent; returns the inverse of tanh.

    -

    Results are undefined if abs(x) >= 1.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL atanh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    2 * 4 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 754 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::cos (genType const & angle)typedef highp_dmat3x3 dmat3
    -

    The standard trigonometric cosine function.

    -

    The values returned by this function will range from [-1, 1].

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL cos man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    3 * 3 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 734 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::cosh (genType const & angle)typedef highp_dmat3x2 dmat3x2
    -

    Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL cosh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    3 * 2 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 759 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::degrees (genType const & radians)typedef highp_dmat3x3 dmat3x3
    -

    Converts radians to degrees and returns the result.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL degrees man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    3 * 3 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 764 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::radians (genType const & degrees)typedef highp_dmat3x4 dmat3x4
    -

    Converts degrees to radians and returns the result.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL radians man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    3 * 4 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 769 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::sin (genType const & angle)typedef highp_dmat4x4 dmat4
    -

    The standard trigonometric sine function.

    -

    The values returned by this function will range from [-1, 1].

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL sin man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    4 * 4 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 739 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::sinh (genType const & angle)typedef highp_dmat4x2 dmat4x2
    -

    Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL sinh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    4 * 2 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 774 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::tan (genType const & angle)typedef highp_dmat4x3 dmat4x3
    -

    The standard trigonometric tangent function.

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL tan man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    4 * 3 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 779 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL genType glm::tanh (genType const & angle)typedef highp_dmat4x4 dmat4x4
    -

    Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)

    -
    Template Parameters
    - - -
    genTypeFloating-point scalar or vector types.
    -
    -
    -
    See Also
    GLSL tanh man page
    -
    -GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
    +

    4 * 4 matrix of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 784 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_dvec2 dvec2
    +
    + +

    2 components vector of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 416 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_dvec3 dvec3
    +
    + +

    3 components vector of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 421 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_dvec4 dvec4
    +
    + +

    4 components vector of double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 426 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_ivec2 ivec2
    +
    + +

    2 components vector of signed integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 444 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_ivec3 ivec3
    +
    + +

    3 components vector of signed integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 449 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_ivec4 ivec4
    +
    + +

    4 components vector of signed integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 454 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mat2x2 mat2
    +
    + +

    2 columns of 2 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 428 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_mat2x2 mat2x2
    +
    + +

    2 columns of 2 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 381 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_mat2x3 mat2x3
    +
    + +

    2 columns of 3 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 386 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_mat2x4 mat2x4
    +
    + +

    2 columns of 4 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 391 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mat3x3 mat3
    +
    + +

    3 columns of 3 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 433 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_mat3x2 mat3x2
    +
    + +

    3 columns of 2 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 396 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_mat3x3 mat3x3
    +
    + +

    3 columns of 3 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 401 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_mat3x4 mat3x4
    +
    + +

    3 columns of 4 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 406 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mat4x4 mat4
    +
    + +

    4 columns of 4 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 438 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_mat4x2 mat4x2
    +
    + +

    4 columns of 2 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 411 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_mat4x3 mat4x3
    +
    + +

    4 columns of 3 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 416 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_mat4x4 mat4x4
    +
    + +

    4 columns of 4 components matrix of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    + +

    Definition at line 421 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_uvec2 uvec2
    +
    + +

    2 components vector of unsigned integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 472 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_uvec3 uvec3
    +
    + +

    3 components vector of unsigned integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 477 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_uvec4 uvec4
    +
    + +

    4 components vector of unsigned integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 482 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_vec2 vec2
    +
    + +

    2 components vector of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 388 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_vec3 vec3
    +
    + +

    3 components vector of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 393 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_vec4 vec4
    +
    + +

    4 components vector of floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    + +

    Definition at line 398 of file type_vec.hpp.

    @@ -528,7 +802,7 @@ Functions diff --git a/doc/api/a00163.html b/doc/api/a00163.html index 0281d229..fe402e79 100644 --- a/doc/api/a00163.html +++ b/doc/api/a00163.html @@ -3,8 +3,8 @@ - -GLM: Vector Relational Functions + +0.9.6: Precision types @@ -16,9 +16,9 @@ + @@ -26,303 +26,2793 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    Vector Relational Functions
    +
    Precision types
    - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Functions

    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool all (vecType< bool, P > const &v)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool any (vecType< bool, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P >
    -::bool_type 
    greaterThan (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P >
    -::bool_type 
    greaterThanEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P >
    -::bool_type 
    lessThanEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > not_ (vecType< bool, P > const &v)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P >
    -::bool_type 
    notEqual (vecType< T, P > const &x, vecType< T, P > const &y)
     

    +Typedefs

    typedef tvec2< bool, highp > highp_bvec2
     
    typedef tvec3< bool, highp > highp_bvec3
     
    typedef tvec4< bool, highp > highp_bvec4
     
    typedef tmat2x2< double, highp > highp_dmat2
     
    typedef tmat2x2< double, highp > highp_dmat2x2
     
    typedef tmat2x3< double, highp > highp_dmat2x3
     
    typedef tmat2x4< double, highp > highp_dmat2x4
     
    typedef tmat3x3< double, highp > highp_dmat3
     
    typedef tmat3x2< double, highp > highp_dmat3x2
     
    typedef tmat3x3< double, highp > highp_dmat3x3
     
    typedef tmat3x4< double, highp > highp_dmat3x4
     
    typedef tmat4x4< double, highp > highp_dmat4
     
    typedef tmat4x2< double, highp > highp_dmat4x2
     
    typedef tmat4x3< double, highp > highp_dmat4x3
     
    typedef tmat4x4< double, highp > highp_dmat4x4
     
    typedef tvec2< double, highp > highp_dvec2
     
    typedef tvec3< double, highp > highp_dvec3
     
    typedef tvec4< double, highp > highp_dvec4
     
    typedef highp_float_t highp_float
     
    typedef detail::highp_int_t highp_int
     
    typedef tvec2< int, highp > highp_ivec2
     
    typedef tvec3< int, highp > highp_ivec3
     
    typedef tvec4< int, highp > highp_ivec4
     
    typedef tmat2x2< float, highp > highp_mat2
     
    typedef tmat2x2< float, highp > highp_mat2x2
     
    typedef tmat2x3< float, highp > highp_mat2x3
     
    typedef tmat2x4< float, highp > highp_mat2x4
     
    typedef tmat3x3< float, highp > highp_mat3
     
    typedef tmat3x2< float, highp > highp_mat3x2
     
    typedef tmat3x3< float, highp > highp_mat3x3
     
    typedef tmat3x4< float, highp > highp_mat3x4
     
    typedef tmat4x4< float, highp > highp_mat4
     
    typedef tmat4x2< float, highp > highp_mat4x2
     
    typedef tmat4x3< float, highp > highp_mat4x3
     
    typedef tmat4x4< float, highp > highp_mat4x4
     
    typedef detail::highp_uint_t highp_uint
     
    typedef tvec2< uint, highp > highp_uvec2
     
    typedef tvec3< uint, highp > highp_uvec3
     
    typedef tvec4< uint, highp > highp_uvec4
     
    typedef tvec2< float, highp > highp_vec2
     
    typedef tvec3< float, highp > highp_vec3
     
    typedef tvec4< float, highp > highp_vec4
     
    typedef tvec2< bool, lowp > lowp_bvec2
     
    typedef tvec3< bool, lowp > lowp_bvec3
     
    typedef tvec4< bool, lowp > lowp_bvec4
     
    typedef tmat2x2< double, lowp > lowp_dmat2
     
    typedef tmat2x2< double, lowp > lowp_dmat2x2
     
    typedef tmat2x3< double, lowp > lowp_dmat2x3
     
    typedef tmat2x4< double, lowp > lowp_dmat2x4
     
    typedef tmat3x3< float, lowp > lowp_dmat3
     
    typedef tmat3x2< double, lowp > lowp_dmat3x2
     
    typedef tmat3x3< double, lowp > lowp_dmat3x3
     
    typedef tmat3x4< double, lowp > lowp_dmat3x4
     
    typedef tmat4x4< double, lowp > lowp_dmat4
     
    typedef tmat4x2< double, lowp > lowp_dmat4x2
     
    typedef tmat4x3< double, lowp > lowp_dmat4x3
     
    typedef tmat4x4< double, lowp > lowp_dmat4x4
     
    typedef tvec2< double, lowp > lowp_dvec2
     
    typedef tvec3< double, lowp > lowp_dvec3
     
    typedef tvec4< double, lowp > lowp_dvec4
     
    typedef lowp_float_t lowp_float
     
    typedef detail::lowp_int_t lowp_int
     
    typedef tvec2< int, lowp > lowp_ivec2
     
    typedef tvec3< int, lowp > lowp_ivec3
     
    typedef tvec4< int, lowp > lowp_ivec4
     
    typedef tmat2x2< float, lowp > lowp_mat2
     
    typedef tmat2x2< float, lowp > lowp_mat2x2
     
    typedef tmat2x3< float, lowp > lowp_mat2x3
     
    typedef tmat2x4< float, lowp > lowp_mat2x4
     
    typedef tmat3x3< float, lowp > lowp_mat3
     
    typedef tmat3x2< float, lowp > lowp_mat3x2
     
    typedef tmat3x3< float, lowp > lowp_mat3x3
     
    typedef tmat3x4< float, lowp > lowp_mat3x4
     
    typedef tmat4x4< float, lowp > lowp_mat4
     
    typedef tmat4x2< float, lowp > lowp_mat4x2
     
    typedef tmat4x3< float, lowp > lowp_mat4x3
     
    typedef tmat4x4< float, lowp > lowp_mat4x4
     
    typedef detail::lowp_uint_t lowp_uint
     
    typedef tvec2< uint, lowp > lowp_uvec2
     
    typedef tvec3< uint, lowp > lowp_uvec3
     
    typedef tvec4< uint, lowp > lowp_uvec4
     
    typedef tvec2< float, lowp > lowp_vec2
     
    typedef tvec3< float, lowp > lowp_vec3
     
    typedef tvec4< float, lowp > lowp_vec4
     
    typedef tvec2< bool, mediump > mediump_bvec2
     
    typedef tvec3< bool, mediump > mediump_bvec3
     
    typedef tvec4< bool, mediump > mediump_bvec4
     
    typedef tmat2x2< double, mediump > mediump_dmat2
     
    typedef tmat2x2< double, mediump > mediump_dmat2x2
     
    typedef tmat2x3< double, mediump > mediump_dmat2x3
     
    typedef tmat2x4< double, mediump > mediump_dmat2x4
     
    typedef tmat3x3< double, mediump > mediump_dmat3
     
    typedef tmat3x2< double, mediump > mediump_dmat3x2
     
    typedef tmat3x3< double, mediump > mediump_dmat3x3
     
    typedef tmat3x4< double, mediump > mediump_dmat3x4
     
    typedef tmat4x4< double, mediump > mediump_dmat4
     
    typedef tmat4x2< double, mediump > mediump_dmat4x2
     
    typedef tmat4x3< double, mediump > mediump_dmat4x3
     
    typedef tmat4x4< double, mediump > mediump_dmat4x4
     
    typedef tvec2< double, mediump > mediump_dvec2
     
    typedef tvec3< double, mediump > mediump_dvec3
     
    typedef tvec4< double, mediump > mediump_dvec4
     
    typedef mediump_float_t mediump_float
     
    typedef detail::mediump_int_t mediump_int
     
    typedef tvec2< int, mediump > mediump_ivec2
     
    typedef tvec3< int, mediump > mediump_ivec3
     
    typedef tvec4< int, mediump > mediump_ivec4
     
    typedef tmat2x2< float, mediump > mediump_mat2
     
    typedef tmat2x2< float, mediump > mediump_mat2x2
     
    typedef tmat2x3< float, mediump > mediump_mat2x3
     
    typedef tmat2x4< float, mediump > mediump_mat2x4
     
    typedef tmat3x3< float, mediump > mediump_mat3
     
    typedef tmat3x2< float, mediump > mediump_mat3x2
     
    typedef tmat3x3< float, mediump > mediump_mat3x3
     
    typedef tmat3x4< float, mediump > mediump_mat3x4
     
    typedef tmat4x4< float, mediump > mediump_mat4
     
    typedef tmat4x2< float, mediump > mediump_mat4x2
     
    typedef tmat4x3< float, mediump > mediump_mat4x3
     
    typedef tmat4x4< float, mediump > mediump_mat4x4
     
    typedef detail::mediump_uint_t mediump_uint
     
    typedef tvec2< uint, mediump > mediump_uvec2
     
    typedef tvec3< uint, mediump > mediump_uvec3
     
    typedef tvec4< uint, mediump > mediump_uvec4
     
    typedef tvec2< float, mediump > mediump_vec2
     
    typedef tvec3< float, mediump > mediump_vec3
     
    typedef tvec4< float, mediump > mediump_vec4
     
    typedef unsigned int uint
     

    Detailed Description

    -

    Relational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results.

    -

    For vector results, use the following built-in functions.

    -

    In all cases, the sizes of all the input and return vectors for any particular call must match.

    -

    Function Documentation

    - +

    Non-GLSL types that are used to define precision-based types.

    +

    The GLSL language allows the user to define the precision of a particular variable. In OpenGL's GLSL, these precision qualifiers have no effect; they are there for compatibility with OpenGL ES's precision qualifiers, where they do have an effect.

    +

    C++ has no language equivalent to precision qualifiers. So GLM provides the next-best thing: a number of typedefs of the Template types that use a particular precision.

    +

    None of these types make any guarantees about the actual precision used.

    +

    Typedef Documentation

    +
    - - - - - +
    GLM_FUNC_DECL bool glm::all (vecType< bool, P > const & v)typedef tvec2<bool, highp> highp_bvec2
    -

    Returns true if all components of x are true.

    -
    Template Parameters
    - - -
    vecTypeBoolean vector types.
    -
    -
    -
    See Also
    GLSL all man page
    +

    2 components vector of high precision bool numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 149 of file type_vec.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL bool glm::any (vecType< bool, P > const & v)typedef tvec3<bool, highp> highp_bvec3
    -

    Returns true if any component of x is true.

    -
    Template Parameters
    - - -
    vecTypeBoolean vector types.
    -
    -
    -
    See Also
    GLSL any man page
    +

    3 components vector of high precision bool numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 259 of file type_vec.hpp.

    - +
    - - - - - - - - - - - - - - - +
    GLM_FUNC_DECL vecType<T, P>::bool_type glm::greaterThan (vecType< T, P > const & x,
    vecType< T, P > const & y 
    )typedef tvec4<bool, highp> highp_bvec4
    -

    Returns the component-wise comparison of result x > y.

    -
    Template Parameters
    - - -
    vecTypeFloating-point or integer vector types.
    -
    -
    -
    See Also
    GLSL greaterThan man page
    +

    4 components vector of high precision bool numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 354 of file type_vec.hpp.

    - +
    - - - - - - - - - - - - - - - +
    GLM_FUNC_DECL vecType<T, P>::bool_type glm::greaterThanEqual (vecType< T, P > const & x,
    vecType< T, P > const & y 
    )typedef tmat2x2<double, highp> highp_dmat2
    -

    Returns the component-wise comparison of result x >= y.

    -
    Template Parameters
    - - -
    vecTypeFloating-point or integer vector types.
    -
    -
    -
    See Also
    GLSL greaterThanEqual man page
    +

    2 columns of 2 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 462 of file type_mat.hpp.

    - +
    - - - - - - - - - - - - - - - +
    GLM_FUNC_DECL vecType<T, P>::bool_type glm::lessThanEqual (vecType< T, P > const & x,
    vecType< T, P > const & y 
    )typedef tmat2x2<double, highp> highp_dmat2x2
    -

    Returns the component-wise comparison result of x < y.

    -
    Template Parameters
    - - -
    vecTypeFloating-point or integer vector types.
    -
    -
    -
    See Also
    GLSL lessThan man page
    +

    2 columns of 2 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions Returns the component-wise comparison of result x <= y.
    -
    Template Parameters
    - - -
    vecTypeFloating-point or integer vector types.
    -
    -
    -
    See Also
    GLSL lessThanEqual man page
    -
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 480 of file type_mat.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL vecType<bool, P> glm::not_ (vecType< bool, P > const & v)typedef tmat2x3<double, highp> highp_dmat2x3
    -

    Returns the component-wise logical complement of x.

    -

    /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.

    -
    Template Parameters
    - - -
    vecTypeBoolean vector types.
    -
    -
    -
    See Also
    GLSL not man page
    +

    2 columns of 3 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 503 of file type_mat.hpp.

    - +
    - - - - - - - - - - - - - - - +
    GLM_FUNC_DECL vecType<T, P>::bool_type glm::notEqual (vecType< T, P > const & x,
    vecType< T, P > const & y 
    )typedef tmat2x4<double, highp> highp_dmat2x4
    -

    Returns the component-wise comparison of result x == y.

    -
    Template Parameters
    - - -
    vecTypeFloating-point, integer or boolean vector types.
    -
    -
    -
    See Also
    GLSL equal man page
    +

    2 columns of 4 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions Returns the component-wise comparison of result x != y.
    -
    Template Parameters
    - - -
    vecTypeFloating-point, integer or boolean vector types.
    -
    -
    -
    See Also
    GLSL notEqual man page
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 526 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<double, highp> highp_dmat3
    +
    + +

    3 columns of 3 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier + +

    Definition at line 572 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<double, highp> highp_dmat3x2
    +
    + +

    3 columns of 2 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 549 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<double, highp> highp_dmat3x3
    +
    + +

    3 columns of 3 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 590 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<double, highp> highp_dmat3x4
    +
    + +

    3 columns of 4 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 613 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<double, highp> highp_dmat4
    +
    + +

    4 columns of 4 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 682 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<double, highp> highp_dmat4x2
    +
    + +

    4 columns of 2 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 636 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<double, highp> highp_dmat4x3
    +
    + +

    4 columns of 3 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 659 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<double, highp> highp_dmat4x4
    +
    + +

    4 columns of 4 components matrix of high precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 700 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<double, highp> highp_dvec2
    +
    + +

    2 components vector of high double-precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 86 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<double, highp> highp_dvec3
    +
    + +

    3 components vector of high double-precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 197 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<double, highp> highp_dvec4
    +
    + +

    4 components vector of high double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 300 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_float_t highp_float
    +
    + +

    High precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.4 Floats
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 66 of file type_float.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::highp_int_t highp_int
    +
    + +

    High precision signed integer.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 252 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<int, highp> highp_ivec2
    +
    + +

    2 components vector of high precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 107 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<int, highp> highp_ivec3
    +
    + +

    3 components vector of high precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 218 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<int, highp> highp_ivec4
    +
    + +

    4 components vector of high precision signed integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 318 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< float, highp > highp_mat2
    +
    + +

    2 columns of 2 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 75 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< float, highp > highp_mat2x2
    +
    + +

    2 columns of 2 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 96 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3< float, highp > highp_mat2x3
    +
    + +

    2 columns of 3 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 122 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4< float, highp > highp_mat2x4
    +
    + +

    2 columns of 4 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 148 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< float, highp > highp_mat3
    +
    + +

    3 columns of 3 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 200 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2< float, highp > highp_mat3x2
    +
    + +

    3 columns of 2 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 174 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< float, highp > highp_mat3x3
    +
    + +

    3 columns of 3 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 221 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4< float, highp > highp_mat3x4
    +
    + +

    3 columns of 4 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 247 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< float, highp > highp_mat4
    +
    + +

    4 columns of 4 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 326 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2< float, highp > highp_mat4x2
    +
    + +

    4 columns of 2 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 273 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3< float, highp > highp_mat4x3
    +
    + +

    4 columns of 3 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 299 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< float, highp > highp_mat4x4
    +
    + +

    4 columns of 4 components matrix of high precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 347 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::highp_uint_t highp_uint
    +
    + +

    High precision unsigned integer.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 273 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<uint, highp> highp_uvec2
    +
    + +

    2 components vector of high precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 128 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<uint, highp> highp_uvec3
    +
    + +

    3 components vector of high precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 239 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<uint, highp> highp_uvec4
    +
    + +

    4 components vector of high precision unsigned integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 336 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< float, highp > highp_vec2
    +
    + +

    2 components vector of high single-precision floating-point numbers.

    +

    High Single-precision floating-point vector of 2 components.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 65 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< float, highp > highp_vec3
    +
    + +

    3 components vector of high single-precision floating-point numbers.

    +

    High Single-precision floating-point vector of 3 components.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 176 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< float, highp > highp_vec4
    +
    + +

    4 components vector of high single-precision floating-point numbers.

    +

    High Single-precision floating-point vector of 4 components.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 282 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<bool, lowp> lowp_bvec2
    +
    + +

    2 components vector of low precision bool numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 163 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<bool, lowp> lowp_bvec3
    +
    + +

    3 components vector of low precision bool numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 271 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<bool, lowp> lowp_bvec4
    +
    + +

    4 components vector of low precision bool numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 366 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<double, lowp> lowp_dmat2
    +
    + +

    2 columns of 2 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 450 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<double, lowp> lowp_dmat2x2
    +
    + +

    2 columns of 2 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 468 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<double, lowp> lowp_dmat2x3
    +
    + +

    2 columns of 3 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 491 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<double, lowp> lowp_dmat2x4
    +
    + +

    2 columns of 4 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 514 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<float, lowp> lowp_dmat3
    +
    + +

    3 columns of 3 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 560 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<double, lowp> lowp_dmat3x2
    +
    + +

    3 columns of 2 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 537 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<double, lowp> lowp_dmat3x3
    +
    + +

    3 columns of 3 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 578 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<double, lowp> lowp_dmat3x4
    +
    + +

    3 columns of 4 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 601 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<double, lowp> lowp_dmat4
    +
    + +

    4 columns of 4 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 670 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<double, lowp> lowp_dmat4x2
    +
    + +

    4 columns of 2 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 624 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<double, lowp> lowp_dmat4x3
    +
    + +

    4 columns of 3 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 647 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<double, lowp> lowp_dmat4x4
    +
    + +

    4 columns of 4 components matrix of low precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 688 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<double, lowp> lowp_dvec2
    +
    + +

    2 components vector of low double-precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 100 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<double, lowp> lowp_dvec3
    +
    + +

    3 components vector of low double-precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 211 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<double, lowp> lowp_dvec4
    +
    + +

    4 components vector of low double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 312 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_float_t lowp_float
    +
    + +

    Low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.4 Floats
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 52 of file type_float.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::lowp_int_t lowp_int
    +
    + +

    Low precision signed integer.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 238 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<int, lowp> lowp_ivec2
    +
    + +

    2 components vector of low precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 121 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<int, lowp> lowp_ivec3
    +
    + +

    3 components vector of low precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 232 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<int, lowp> lowp_ivec4
    +
    + +

    4 components vector of low precision signed integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 330 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< float, lowp > lowp_mat2
    +
    + +

    2 columns of 2 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 61 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< float, lowp > lowp_mat2x2
    +
    + +

    2 columns of 2 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 82 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3< float, lowp > lowp_mat2x3
    +
    + +

    2 columns of 3 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 108 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4< float, lowp > lowp_mat2x4
    +
    + +

    2 columns of 4 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 134 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< float, lowp > lowp_mat3
    +
    + +

    3 columns of 3 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 186 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2< float, lowp > lowp_mat3x2
    +
    + +

    3 columns of 2 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 160 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< float, lowp > lowp_mat3x3
    +
    + +

    3 columns of 3 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 207 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4< float, lowp > lowp_mat3x4
    +
    + +

    3 columns of 4 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 233 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< float, lowp > lowp_mat4
    +
    + +

    4 columns of 4 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 312 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2< float, lowp > lowp_mat4x2
    +
    + +

    4 columns of 2 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 259 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3< float, lowp > lowp_mat4x3
    +
    + +

    4 columns of 3 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 285 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< float, lowp > lowp_mat4x4
    +
    + +

    4 columns of 4 components matrix of low precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 333 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::lowp_uint_t lowp_uint
    +
    + +

    Low precision unsigned integer.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 259 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<uint, lowp> lowp_uvec2
    +
    + +

    2 components vector of low precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 142 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<uint, lowp> lowp_uvec3
    +
    + +

    3 components vector of low precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 253 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<uint, lowp> lowp_uvec4
    +
    + +

    4 components vector of low precision unsigned integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 348 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< float, lowp > lowp_vec2
    +
    + +

    2 components vector of low single-precision floating-point numbers.

    +

    Low single-precision floating-point vector of 2 components.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 79 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< float, lowp > lowp_vec3
    +
    + +

    3 components vector of low single-precision floating-point numbers.

    +

    Low single-precision floating-point vector of 3 components.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 190 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< float, lowp > lowp_vec4
    +
    + +

    4 components vector of low single-precision floating-point numbers.

    +

    Low single-precision floating-point vector of 4 components.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 294 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<bool, mediump> mediump_bvec2
    +
    + +

    2 components vector of medium precision bool numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 156 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<bool, mediump> mediump_bvec3
    +
    + +

    3 components vector of medium precision bool numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 265 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<bool, mediump> mediump_bvec4
    +
    + +

    4 components vector of medium precision bool numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 360 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<double, mediump> mediump_dmat2
    +
    + +

    2 columns of 2 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 456 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<double, mediump> mediump_dmat2x2
    +
    + +

    2 columns of 2 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 474 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<double, mediump> mediump_dmat2x3
    +
    + +

    2 columns of 3 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 497 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<double, mediump> mediump_dmat2x4
    +
    + +

    2 columns of 4 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 520 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<double, mediump> mediump_dmat3
    +
    + +

    3 columns of 3 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 566 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<double, mediump> mediump_dmat3x2
    +
    + +

    3 columns of 2 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 543 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<double, mediump> mediump_dmat3x3
    +
    + +

    3 columns of 3 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 584 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<double, mediump> mediump_dmat3x4
    +
    + +

    3 columns of 4 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 607 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<double, mediump> mediump_dmat4
    +
    + +

    4 columns of 4 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 676 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<double, mediump> mediump_dmat4x2
    +
    + +

    4 columns of 2 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 630 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<double, mediump> mediump_dmat4x3
    +
    + +

    4 columns of 3 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 653 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<double, mediump> mediump_dmat4x4
    +
    + +

    4 columns of 4 components matrix of medium precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 694 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<double, mediump> mediump_dvec2
    +
    + +

    2 components vector of medium double-precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 93 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<double, mediump> mediump_dvec3
    +
    + +

    3 components vector of medium double-precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 204 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<double, mediump> mediump_dvec4
    +
    + +

    4 components vector of medium double-precision floating-point numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 306 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_float_t mediump_float
    +
    + +

    Medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.4 Floats
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 59 of file type_float.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::mediump_int_t mediump_int
    +
    + +

    Medium precision signed integer.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 245 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<int, mediump> mediump_ivec2
    +
    + +

    2 components vector of medium precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 114 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<int, mediump> mediump_ivec3
    +
    + +

    3 components vector of medium precision signed integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 225 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<int, mediump> mediump_ivec4
    +
    + +

    4 components vector of medium precision signed integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 324 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< float, mediump > mediump_mat2
    +
    + +

    2 columns of 2 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 68 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< float, mediump > mediump_mat2x2
    +
    + +

    2 columns of 2 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 89 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3< float, mediump > mediump_mat2x3
    +
    + +

    2 columns of 3 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 115 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4< float, mediump > mediump_mat2x4
    +
    + +

    2 columns of 4 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 141 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< float, mediump > mediump_mat3
    +
    + +

    3 columns of 3 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 193 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2< float, mediump > mediump_mat3x2
    +
    + +

    3 columns of 2 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 167 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< float, mediump > mediump_mat3x3
    +
    + +

    3 columns of 3 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 214 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4< float, mediump > mediump_mat3x4
    +
    + +

    3 columns of 4 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 240 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< float, mediump > mediump_mat4
    +
    + +

    4 columns of 4 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 319 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2< float, mediump > mediump_mat4x2
    +
    + +

    4 columns of 2 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 266 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3< float, mediump > mediump_mat4x3
    +
    + +

    4 columns of 3 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 292 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< float, mediump > mediump_mat4x4
    +
    + +

    4 columns of 4 components matrix of medium precision floating-point numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 340 of file type_mat.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::mediump_uint_t mediump_uint
    +
    + +

    Medium precision unsigned integer.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 266 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<uint, mediump> mediump_uvec2
    +
    + +

    2 components vector of medium precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 135 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<uint, mediump> mediump_uvec3
    +
    + +

    3 components vector of medium precision unsigned integer numbers.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 246 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<uint, mediump> mediump_uvec4
    +
    + +

    4 components vector of medium precision unsigned integer numbers.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    + +

    Definition at line 342 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< float, mediump > mediump_vec2
    +
    + +

    2 components vector of medium single-precision floating-point numbers.

    +

    Medium Single-precision floating-point vector of 2 components.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 72 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< float, mediump > mediump_vec3
    +
    + +

    3 components vector of medium single-precision floating-point numbers.

    +

    Medium Single-precision floating-point vector of 3 components.

    +

    There is no guarantee on the actual precision.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 183 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< float, mediump > mediump_vec4
    +
    + +

    4 components vector of medium single-precision floating-point numbers.

    +

    Medium Single-precision floating-point vector of 4 components.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    +
    +GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 288 of file type_vec.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef unsigned int uint
    +
    + +

    Unsigned integer type.

    +
    See also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    + +

    Definition at line 302 of file type_int.hpp.

    @@ -331,7 +2821,7 @@ Functions diff --git a/doc/api/a00164.html b/doc/api/a00164.html index f980d10d..d3ca3d51 100644 --- a/doc/api/a00164.html +++ b/doc/api/a00164.html @@ -3,8 +3,8 @@ - -GLM: GTC Extensions (Stable) + +0.9.6: Template types @@ -16,9 +16,9 @@ + @@ -26,70 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    -
    GTC Extensions (Stable)
    +
    Template types
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Modules

     GLM_GTC_constants
     
     GLM_GTC_epsilon
     
     GLM_GTC_matrix_access
     
     GLM_GTC_matrix_integer
     
     GLM_GTC_matrix_inverse
     
     GLM_GTC_matrix_transform
     
     GLM_GTC_noise
     
     GLM_GTC_packing
     
     GLM_GTC_quaternion
     
     GLM_GTC_random
     
     GLM_GTC_reciprocal
     
     GLM_GTC_type_precision
     
     GLM_GTC_type_ptr
     
     GLM_GTC_ulp
     
     GLM_GTX_dual_quaternion
     
     GLM_GTX_rotate_normalized_axis
     
    -

    Detailed Description

    -

    Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.

    -

    GTC extensions aim to be stable.

    -

    Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

    +

    The generic template types used as the basis for the core types.

    +

    These types are all templates used to define the actual Types. These templetes are implementation details of GLM types and should not be used explicitly.

    diff --git a/doc/api/a00165.html b/doc/api/a00165.html index bfe1a6ef..113ac77e 100644 --- a/doc/api/a00165.html +++ b/doc/api/a00165.html @@ -3,8 +3,8 @@ - -GLM: GTX Extensions (Experimental) + +0.9.6: GLM_GTC_bitfield @@ -16,9 +16,9 @@ + @@ -26,138 +26,960 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GTX Extensions (Experimental)
    +
    GLM_GTC_bitfield
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Modules

     GLM_GTX_associated_min_max
     
     GLM_GTX_bit
     
     GLM_GTX_closest_point
     
     GLM_GTX_color_space
     
     GLM_GTX_color_space_YCoCg
     
     GLM_GTX_compatibility
     
     GLM_GTX_component_wise
     
     GLM_GTX_euler_angles
     
     GLM_GTX_extend
     
     GLM_GTX_extented_min_max
     
     GLM_GTX_fast_exponential
     
     GLM_GTX_fast_square_root
     
     GLM_GTX_fast_trigonometry
     
     GLM_GTX_gradient_paint
     
     GLM_GTX_handed_coordinate_space
     
     GLM_GTX_inertia
     
     GLM_GTX_integer
     
     GLM_GTX_intersect
     
     GLM_GTX_io
     
     GLM_GTX_log_base
     
     GLM_GTX_matrix_cross_product
     
     GLM_GTX_matrix_interpolation
     
     GLM_GTX_matrix_major_storage
     
     GLM_GTX_matrix_operation
     
     GLM_GTX_matrix_query
     
     GLM_GTX_mixed_producte
     
     GLM_GTX_multiple
     
     GLM_GTX_norm
     
     GLM_GTX_normal
     
     GLM_GTX_normalize_dot
     
     GLM_GTX_number_precision
     
     GLM_GTX_optimum_pow
     
     GLM_GTX_orthonormalize
     
     GLM_GTX_perpendicular
     
     GLM_GTX_polar_coordinates
     
     GLM_GTX_projection
     
     GLM_GTX_quaternion
     
     GLM_GTX_raw_data
     
     GLM_GTX_rotate_vector
     
     GLM_GTX_simd_mat4
     
     GLM_GTX_simd_quat
     
     GLM_GTX_spline
     
     GLM_GTX_std_based_type
     
     GLM_GTX_string_cast
     
     GLM_GTX_transform
     
     GLM_GTX_transform2
     
     GLM_GTX_vec1
     
     GLM_GTX_vector_angle
     
     GLM_GTX_vector_query
     
     GLM_GTX_wrap
     

    +Functions

    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldFillOne (genIUType Value, int FirstBit, int BitCount)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldFillOne (vecType< T, P > const &Value, int FirstBit, int BitCount)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldFillZero (genIUType Value, int FirstBit, int BitCount)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldFillZero (vecType< T, P > const &Value, int FirstBit, int BitCount)
     
    GLM_FUNC_DECL int16 bitfieldInterleave (int8 x, int8 y)
     
    GLM_FUNC_DECL uint16 bitfieldInterleave (uint8 x, uint8 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int16 x, int16 y)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint16 x, uint16 y)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y, int32 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y, uint32 z)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z, int8 w)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z, uint8 w)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z, int16 w)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z, uint16 w)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldRotateLeft (genIUType In, int Shift)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldRotateLeft (vecType< T, P > const &In, int Shift)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType bitfieldRotateRight (genIUType In, int Shift)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > bitfieldRotateRight (vecType< T, P > const &In, int Shift)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType mask (genIUType Bits)
     
    template<typename T , precision P, template< typename, precision > class vecIUType>
    GLM_FUNC_DECL vecIUType< T, P > mask (vecIUType< T, P > const &v)
     

    Detailed Description

    -

    Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.

    -

    Experimental extensions are useful functions and types, but the development of their API and functionality is not necessarily stable. They can change substantially between versions. Backwards compatibility is not much of an issue for them.

    -

    Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

    +

    Allow to perform bit operations on integer values.

    +

    <glm/gtc/bitfield.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genIUType glm::bitfieldFillOne (genIUType Value,
    int FirstBit,
    int BitCount 
    )
    +
    + +

    Set to 1 a range of bits.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::bitfieldFillOne (vecType< T, P > const & Value,
    int FirstBit,
    int BitCount 
    )
    +
    + +

    Set to 1 a range of bits.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genIUType glm::bitfieldFillZero (genIUType Value,
    int FirstBit,
    int BitCount 
    )
    +
    + +

    Set to 0 a range of bits.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::bitfieldFillZero (vecType< T, P > const & Value,
    int FirstBit,
    int BitCount 
    )
    +
    + +

    Set to 0 a range of bits.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int16 glm::bitfieldInterleave (int8 x,
    int8 y 
    )
    +
    + +

    Interleaves the bits of x and y.

    +

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint16 glm::bitfieldInterleave (uint8 x,
    uint8 y 
    )
    +
    + +

    Interleaves the bits of x and y.

    +

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int32 glm::bitfieldInterleave (int16 x,
    int16 y 
    )
    +
    + +

    Interleaves the bits of x and y.

    +

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint32 glm::bitfieldInterleave (uint16 x,
    uint16 y 
    )
    +
    + +

    Interleaves the bits of x and y.

    +

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int64 glm::bitfieldInterleave (int32 x,
    int32 y 
    )
    +
    + +

    Interleaves the bits of x and y.

    +

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint32 x,
    uint32 y 
    )
    +
    + +

    Interleaves the bits of x and y.

    +

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int32 glm::bitfieldInterleave (int8 x,
    int8 y,
    int8 z 
    )
    +
    + +

    Interleaves the bits of x, y and z.

    +

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint32 glm::bitfieldInterleave (uint8 x,
    uint8 y,
    uint8 z 
    )
    +
    + +

    Interleaves the bits of x, y and z.

    +

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int64 glm::bitfieldInterleave (int16 x,
    int16 y,
    int16 z 
    )
    +
    + +

    Interleaves the bits of x, y and z.

    +

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint16 x,
    uint16 y,
    uint16 z 
    )
    +
    + +

    Interleaves the bits of x, y and z.

    +

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int64 glm::bitfieldInterleave (int32 x,
    int32 y,
    int32 z 
    )
    +
    + +

    Interleaves the bits of x, y and z.

    +

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint32 x,
    uint32 y,
    uint32 z 
    )
    +
    + +

    Interleaves the bits of x, y and z.

    +

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int32 glm::bitfieldInterleave (int8 x,
    int8 y,
    int8 z,
    int8 w 
    )
    +
    + +

    Interleaves the bits of x, y, z and w.

    +

    The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint32 glm::bitfieldInterleave (uint8 x,
    uint8 y,
    uint8 z,
    uint8 w 
    )
    +
    + +

    Interleaves the bits of x, y, z and w.

    +

    The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int64 glm::bitfieldInterleave (int16 x,
    int16 y,
    int16 z,
    int16 w 
    )
    +
    + +

    Interleaves the bits of x, y, z and w.

    +

    The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint16 x,
    uint16 y,
    uint16 z,
    uint16 w 
    )
    +
    + +

    Interleaves the bits of x, y, z and w.

    +

    The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genIUType glm::bitfieldRotateLeft (genIUType In,
    int Shift 
    )
    +
    + +

    Rotate all bits to the left.

    +

    All the bits dropped in the left side are inserted back on the right side.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::bitfieldRotateLeft (vecType< T, P > const & In,
    int Shift 
    )
    +
    + +

    Rotate all bits to the left.

    +

    All the bits dropped in the left side are inserted back on the right side.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genIUType glm::bitfieldRotateRight (genIUType In,
    int Shift 
    )
    +
    + +

    Rotate all bits to the right.

    +

    All the bits dropped in the right side are inserted back on the left side.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::bitfieldRotateRight (vecType< T, P > const & In,
    int Shift 
    )
    +
    + +

    Rotate all bits to the right.

    +

    All the bits dropped in the right side are inserted back on the left side.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genIUType glm::mask (genIUType Bits)
    +
    + +

    Build a mask of 'count' bits.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecIUType<T, P> glm::mask (vecIUType< T, P > const & v)
    +
    + +

    Build a mask of 'count' bits.

    +
    See also
    GLM_GTC_bitfield
    + +
    +
    diff --git a/doc/api/a00166.html b/doc/api/a00166.html index 106aae89..e826af18 100644 --- a/doc/api/a00166.html +++ b/doc/api/a00166.html @@ -3,8 +3,8 @@ - -GLM: VIRTREV Extensions + +0.9.6: GLM_GTC_constants @@ -16,9 +16,9 @@ + @@ -26,38 +26,645 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    VIRTREV Extensions
    +
    GLM_GTC_constants
    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Modules

     GLM_VIRTREV_xstream: xml like output
     

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType e ()
     
    template<typename genType >
    GLM_FUNC_DECL genType epsilon ()
     
    template<typename genType >
    GLM_FUNC_DECL genType euler ()
     
    template<typename genType >
    GLM_FUNC_DECL genType four_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType golden_ratio ()
     
    template<typename genType >
    GLM_FUNC_DECL genType half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ln_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ten ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_root_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType quarter_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_five ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_ln_four ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_three ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType third ()
     
    template<typename genType >
    GLM_FUNC_DECL genType three_over_two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_thirds ()
     
    template<typename genType >
    GLM_FUNC_DECL genType zero ()
     

    Detailed Description

    -

    Extensions develop and maintain by Mathieu [matrem] Roumillac (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showprofile&User=22660).

    +

    Provide a list of constants and precomputed useful values.

    +

    <glm/gtc/constants.hpp> need to be included to use these features.

    +

    Function Documentation

    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::e ()
    +
    + +

    Return e constant.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::epsilon ()
    +
    + +

    Return the epsilon constant for floating point types.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::euler ()
    +
    + +

    Return Euler's constant.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::four_over_pi ()
    +
    + +

    Return 4 / pi.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::golden_ratio ()
    +
    + +

    Return the golden ratio constant.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::half_pi ()
    +
    + +

    Return pi / 2.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::ln_ln_two ()
    +
    + +

    Return ln(ln(2)).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::ln_ten ()
    +
    + +

    Return ln(10).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::ln_two ()
    +
    + +

    Return ln(2).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::one ()
    +
    + +

    Return 1.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::one_over_pi ()
    +
    + +

    Return 1 / pi.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::one_over_root_two ()
    +
    + +

    Return 1 / sqrt(2).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::one_over_two_pi ()
    +
    + +

    Return 1 / (pi * 2).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::pi ()
    +
    + +

    Return the pi constant.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::quarter_pi ()
    +
    + +

    Return pi / 4.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::root_five ()
    +
    + +

    Return sqrt(5).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::root_half_pi ()
    +
    + +

    Return sqrt(pi / 2).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::root_ln_four ()
    +
    + +

    Return sqrt(ln(4)).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::root_pi ()
    +
    + +

    Return square root of pi.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::root_three ()
    +
    + +

    Return sqrt(3).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::root_two ()
    +
    + +

    Return sqrt(2).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::root_two_pi ()
    +
    + +

    Return sqrt(2 * pi).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::third ()
    +
    + +

    Return 1 / 3.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::three_over_two_pi ()
    +
    + +

    Return pi / 2 * 3.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::two_over_pi ()
    +
    + +

    Return 2 / pi.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::two_over_root_pi ()
    +
    + +

    Return 2 / sqrt(pi).

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::two_pi ()
    +
    + +

    Return pi * 2.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::two_thirds ()
    +
    + +

    Return 2 / 3.

    +
    See also
    GLM_GTC_constants
    + +
    +
    + +
    +
    + + + + + + + +
    GLM_FUNC_DECL genType glm::zero ()
    +
    + +

    Return 0.

    +
    See also
    GLM_GTC_constants
    + +
    +
    diff --git a/doc/api/a00167.html b/doc/api/a00167.html index b0ba2d4d..beb713ca 100644 --- a/doc/api/a00167.html +++ b/doc/api/a00167.html @@ -3,8 +3,8 @@ - -GLM: GLM Core + +0.9.6: GLM_GTC_epsilon @@ -16,9 +16,9 @@ + @@ -26,63 +26,192 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GLM Core
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + +

    -Modules

     Common functions
     
     Exponential functions
     
     Geometric functions
     
     Integer functions
     
     Matrix functions
     
     Noise functions
     
     Floating-Point Pack and Unpack Functions
     
     Angle and Trigonometry Functions
     
     Vector Relational Functions
     
     Types
     
     Precision types
     
     Template types
     

    +Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > epsilonEqual (vecType< T, P > const &x, vecType< T, P > const &y, T const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonEqual (genType const &x, genType const &y, genType const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL genType::boolType epsilonNotEqual (genType const &x, genType const &y, typename genType::value_type const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonNotEqual (genType const &x, genType const &y, genType const &epsilon)
     

    Detailed Description

    -

    The core of GLM, which implements exactly and only the GLSL specification to the degree possible.

    -

    The GLM core consists of C++ types that mirror GLSL types and C++ functions that mirror the GLSL functions. It also includes a set of precision-based types that can be used in the appropriate functions. The C++ types are all based on a basic set of template types.

    -

    The best documentation for GLM Core is the current GLSL specification, version 4.2 (pdf file). There are a few differences between GLM core and GLSL.

    -

    GLM core functionnalities require <glm/glm.hpp> to be included to be used.

    +

    Comparison functions for a user defined epsilon values.

    +

    <glm/gtc/epsilon.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<bool, P> glm::epsilonEqual (vecType< T, P > const & x,
    vecType< T, P > const & y,
    T const & epsilon 
    )
    +
    + +

    Returns the component-wise comparison of |x - y| < epsilon.

    +

    True if this expression is satisfied.

    +
    See also
    GLM_GTC_epsilon
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL bool glm::epsilonEqual (genType const & x,
    genType const & y,
    genType const & epsilon 
    )
    +
    + +

    Returns the component-wise comparison of |x - y| < epsilon.

    +

    True if this expression is satisfied.

    +
    See also
    GLM_GTC_epsilon
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType::boolType glm::epsilonNotEqual (genType const & x,
    genType const & y,
    typename genType::value_type const & epsilon 
    )
    +
    + +

    Returns the component-wise comparison of |x - y| < epsilon.

    +

    True if this expression is not satisfied.

    +
    See also
    GLM_GTC_epsilon
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL bool glm::epsilonNotEqual (genType const & x,
    genType const & y,
    genType const & epsilon 
    )
    +
    + +

    Returns the component-wise comparison of |x - y| >= epsilon.

    +

    True if this expression is not satisfied.

    +
    See also
    GLM_GTC_epsilon
    + +
    +
    diff --git a/doc/api/a00168.html b/doc/api/a00168.html index e372b8af..f4322775 100644 --- a/doc/api/a00168.html +++ b/doc/api/a00168.html @@ -3,8 +3,8 @@ - -GLM: Types + +0.9.6: GLM_GTC_integer @@ -16,9 +16,9 @@ + @@ -26,776 +26,49 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    +
    - - - -

    -Modules

     Precision types
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +

    -Typedefs

    typedef highp_bvec2 bvec2
     
    typedef highp_bvec3 bvec3
     
    typedef highp_bvec4 bvec4
     
    typedef highp_dmat2x2 dmat2
     
    typedef highp_dmat2x2 dmat2x2
     
    typedef highp_dmat2x3 dmat2x3
     
    typedef highp_dmat2x4 dmat2x4
     
    typedef highp_dmat3x3 dmat3
     
    typedef highp_dmat3x2 dmat3x2
     
    typedef highp_dmat3x3 dmat3x3
     
    typedef highp_dmat3x4 dmat3x4
     
    typedef highp_dmat4x4 dmat4
     
    typedef highp_dmat4x2 dmat4x2
     
    typedef highp_dmat4x3 dmat4x3
     
    typedef highp_dmat4x4 dmat4x4
     
    typedef highp_dvec2 dvec2
     
    typedef highp_dvec3 dvec3
     
    typedef highp_dvec4 dvec4
     
    typedef highp_ivec2 ivec2
     
    typedef highp_ivec3 ivec3
     
    typedef highp_ivec4 ivec4
     
    typedef mat2x2 mat2
     
    typedef highp_mat2x2 mat2x2
     
    typedef highp_mat2x3 mat2x3
     
    typedef highp_mat2x4 mat2x4
     
    typedef mat3x3 mat3
     
    typedef highp_mat3x2 mat3x2
     
    typedef highp_mat3x3 mat3x3
     
    typedef highp_mat3x4 mat3x4
     
    typedef mat4x4 mat4
     
    typedef highp_mat4x2 mat4x2
     
    typedef highp_mat4x3 mat4x3
     
    typedef highp_mat4x4 mat4x4
     
    typedef highp_uvec2 uvec2
     
    typedef highp_uvec3 uvec3
     
    typedef highp_uvec4 uvec4
     
    typedef highp_vec2 vec2
     
    typedef highp_vec3 vec3
     
    typedef highp_vec4 vec4
     

    +Functions

    template<typename genIUType >
    GLM_FUNC_DECL genIUType log2 (genIUType x)
     

    Detailed Description

    -

    The standard types defined by the specification.

    -

    These types are all typedefs of more generalized, template types. To see the definiton of these template types, go to Template types.

    -

    Typedef Documentation

    - +

    Allow to perform bit operations on integer values.

    +

    <glm/gtc/integer.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + + + + +
    typedef highp_bvec2 bvec2GLM_FUNC_DECL genIUType glm::log2 (genIUType x)
    -

    2 components vector of boolean.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 500 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_bvec3 bvec3
    -
    - -

    3 components vector of boolean.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 505 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_bvec4 bvec4
    -
    - -

    4 components vector of boolean.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 510 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat2x2 dmat2
    -
    - -

    2 * 2 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 733 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat2x2 dmat2x2
    -
    - -

    2 * 2 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 748 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat2x3 dmat2x3
    -
    - -

    2 * 3 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 753 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat2x4 dmat2x4
    -
    - -

    2 * 4 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 758 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat3x3 dmat3
    -
    - -

    3 * 3 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 738 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat3x2 dmat3x2
    -
    - -

    3 * 2 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 763 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat3x3 dmat3x3
    -
    - -

    3 * 3 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 768 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat3x4 dmat3x4
    -
    - -

    3 * 4 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 773 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat4x4 dmat4
    -
    - -

    4 * 4 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 743 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat4x2 dmat4x2
    -
    - -

    4 * 2 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 778 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat4x3 dmat4x3
    -
    - -

    4 * 3 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 783 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dmat4x4 dmat4x4
    -
    - -

    4 * 4 matrix of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 788 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dvec2 dvec2
    -
    - -

    2 components vector of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 416 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dvec3 dvec3
    -
    - -

    3 components vector of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 421 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_dvec4 dvec4
    -
    - -

    4 components vector of double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 426 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_ivec2 ivec2
    -
    - -

    2 components vector of signed integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 444 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_ivec3 ivec3
    -
    - -

    3 components vector of signed integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 449 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_ivec4 ivec4
    -
    - -

    4 components vector of signed integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 454 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mat2x2 mat2
    -
    - -

    2 columns of 2 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 432 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_mat2x2 mat2x2
    -
    - -

    2 columns of 2 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 385 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_mat2x3 mat2x3
    -
    - -

    2 columns of 3 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 390 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_mat2x4 mat2x4
    -
    - -

    2 columns of 4 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 395 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mat3x3 mat3
    -
    - -

    3 columns of 3 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 437 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_mat3x2 mat3x2
    -
    - -

    3 columns of 2 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 400 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_mat3x3 mat3x3
    -
    - -

    3 columns of 3 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 405 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_mat3x4 mat3x4
    -
    - -

    3 columns of 4 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 410 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mat4x4 mat4
    -
    - -

    4 columns of 4 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 442 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_mat4x2 mat4x2
    -
    - -

    4 columns of 2 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 415 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_mat4x3 mat4x3
    -
    - -

    4 columns of 3 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 420 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_mat4x4 mat4x4
    -
    - -

    4 columns of 4 components matrix of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    - -

    Definition at line 425 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_uvec2 uvec2
    -
    - -

    2 components vector of unsigned integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 472 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_uvec3 uvec3
    -
    - -

    3 components vector of unsigned integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 477 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_uvec4 uvec4
    -
    - -

    4 components vector of unsigned integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 482 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_vec2 vec2
    -
    - -

    2 components vector of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 388 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_vec3 vec3
    -
    - -

    3 components vector of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 393 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_vec4 vec4
    -
    - -

    4 components vector of floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    - -

    Definition at line 398 of file type_vec.hpp.

    +

    Returns the log2 of x.

    +

    Can be reliably using to compute mipmap count from the texture size. From GLM_GTC_integer extension.

    @@ -804,7 +77,7 @@ Typedefs diff --git a/doc/api/a00169.html b/doc/api/a00169.html index 5b59808e..d8ae880d 100644 --- a/doc/api/a00169.html +++ b/doc/api/a00169.html @@ -3,8 +3,8 @@ - -GLM: Precision types + +0.9.6: GLM_GTC_matrix_access @@ -16,9 +16,9 @@ + @@ -26,2900 +26,167 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    Precision types
    +
    GLM_GTC_matrix_access
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + +

    -Typedefs

    typedef detail::tvec2< bool,
    -highp > 
    highp_bvec2
     
    typedef detail::tvec3< bool,
    -highp > 
    highp_bvec3
     
    typedef detail::tvec4< bool,
    -highp > 
    highp_bvec4
     
    typedef detail::tmat2x2
    -< double, highp > 
    highp_dmat2
     
    typedef detail::tmat2x2
    -< double, highp > 
    highp_dmat2x2
     
    typedef detail::tmat2x3
    -< double, highp > 
    highp_dmat2x3
     
    typedef detail::tmat2x4
    -< double, highp > 
    highp_dmat2x4
     
    typedef detail::tmat3x3
    -< double, highp > 
    highp_dmat3
     
    typedef detail::tmat3x2
    -< double, highp > 
    highp_dmat3x2
     
    typedef detail::tmat3x3
    -< double, highp > 
    highp_dmat3x3
     
    typedef detail::tmat3x4
    -< double, highp > 
    highp_dmat3x4
     
    typedef detail::tmat4x4
    -< double, highp > 
    highp_dmat4
     
    typedef detail::tmat4x2
    -< double, highp > 
    highp_dmat4x2
     
    typedef detail::tmat4x3
    -< double, highp > 
    highp_dmat4x3
     
    typedef detail::tmat4x4
    -< double, highp > 
    highp_dmat4x4
     
    typedef detail::tvec2< double,
    -highp > 
    highp_dvec2
     
    typedef detail::tvec3< double,
    -highp > 
    highp_dvec3
     
    typedef detail::tvec4< double,
    -highp > 
    highp_dvec4
     
    typedef highp_float_t highp_float
     
    typedef detail::highp_int_t highp_int
     
    typedef detail::tvec2< int, highp > highp_ivec2
     
    typedef detail::tvec3< int, highp > highp_ivec3
     
    typedef detail::tvec4< int, highp > highp_ivec4
     
    typedef detail::tmat2x2< float,
    -highp > 
    highp_mat2
     
    typedef detail::tmat2x2< float,
    -highp > 
    highp_mat2x2
     
    typedef detail::tmat2x3< float,
    -highp > 
    highp_mat2x3
     
    typedef detail::tmat2x4< float,
    -highp > 
    highp_mat2x4
     
    typedef detail::tmat3x3< float,
    -highp > 
    highp_mat3
     
    typedef detail::tmat3x2< float,
    -highp > 
    highp_mat3x2
     
    typedef detail::tmat3x3< float,
    -highp > 
    highp_mat3x3
     
    typedef detail::tmat3x4< float,
    -highp > 
    highp_mat3x4
     
    typedef detail::tmat4x4< float,
    -highp > 
    highp_mat4
     
    typedef detail::tmat4x2< float,
    -highp > 
    highp_mat4x2
     
    typedef detail::tmat4x3< float,
    -highp > 
    highp_mat4x3
     
    typedef detail::tmat4x4< float,
    -highp > 
    highp_mat4x4
     
    typedef detail::highp_uint_t highp_uint
     
    typedef detail::tvec2< uint,
    -highp > 
    highp_uvec2
     
    typedef detail::tvec3< uint,
    -highp > 
    highp_uvec3
     
    typedef detail::tvec4< uint,
    -highp > 
    highp_uvec4
     
    typedef detail::tvec2< float,
    -highp > 
    highp_vec2
     
    typedef detail::tvec3< float,
    -highp > 
    highp_vec3
     
    typedef detail::tvec4< float,
    -highp > 
    highp_vec4
     
    typedef detail::tvec2< bool, lowp > lowp_bvec2
     
    typedef detail::tvec3< bool, lowp > lowp_bvec3
     
    typedef detail::tvec4< bool, lowp > lowp_bvec4
     
    typedef detail::tmat2x2
    -< double, lowp > 
    lowp_dmat2
     
    typedef detail::tmat2x2
    -< double, lowp > 
    lowp_dmat2x2
     
    typedef detail::tmat2x3
    -< double, lowp > 
    lowp_dmat2x3
     
    typedef detail::tmat2x4
    -< double, lowp > 
    lowp_dmat2x4
     
    typedef detail::tmat3x3< float,
    -lowp > 
    lowp_dmat3
     
    typedef detail::tmat3x2
    -< double, lowp > 
    lowp_dmat3x2
     
    typedef detail::tmat3x3
    -< double, lowp > 
    lowp_dmat3x3
     
    typedef detail::tmat3x4
    -< double, lowp > 
    lowp_dmat3x4
     
    typedef detail::tmat4x4
    -< double, lowp > 
    lowp_dmat4
     
    typedef detail::tmat4x2
    -< double, lowp > 
    lowp_dmat4x2
     
    typedef detail::tmat4x3
    -< double, lowp > 
    lowp_dmat4x3
     
    typedef detail::tmat4x4
    -< double, lowp > 
    lowp_dmat4x4
     
    typedef detail::tvec2< double,
    -lowp > 
    lowp_dvec2
     
    typedef detail::tvec3< double,
    -lowp > 
    lowp_dvec3
     
    typedef detail::tvec4< double,
    -lowp > 
    lowp_dvec4
     
    typedef lowp_float_t lowp_float
     
    typedef detail::lowp_int_t lowp_int
     
    typedef detail::tvec2< int, lowp > lowp_ivec2
     
    typedef detail::tvec3< int, lowp > lowp_ivec3
     
    typedef detail::tvec4< int, lowp > lowp_ivec4
     
    typedef detail::tmat2x2< float,
    -lowp > 
    lowp_mat2
     
    typedef detail::tmat2x2< float,
    -lowp > 
    lowp_mat2x2
     
    typedef detail::tmat2x3< float,
    -lowp > 
    lowp_mat2x3
     
    typedef detail::tmat2x4< float,
    -lowp > 
    lowp_mat2x4
     
    typedef detail::tmat3x3< float,
    -lowp > 
    lowp_mat3
     
    typedef detail::tmat3x2< float,
    -lowp > 
    lowp_mat3x2
     
    typedef detail::tmat3x3< float,
    -lowp > 
    lowp_mat3x3
     
    typedef detail::tmat3x4< float,
    -lowp > 
    lowp_mat3x4
     
    typedef detail::tmat4x4< float,
    -lowp > 
    lowp_mat4
     
    typedef detail::tmat4x2< float,
    -lowp > 
    lowp_mat4x2
     
    typedef detail::tmat4x3< float,
    -lowp > 
    lowp_mat4x3
     
    typedef detail::tmat4x4< float,
    -lowp > 
    lowp_mat4x4
     
    typedef detail::lowp_uint_t lowp_uint
     
    typedef detail::tvec2< uint, lowp > lowp_uvec2
     
    typedef detail::tvec3< uint, lowp > lowp_uvec3
     
    typedef detail::tvec4< uint, lowp > lowp_uvec4
     
    typedef detail::tvec2< float,
    -lowp > 
    lowp_vec2
     
    typedef detail::tvec3< float,
    -lowp > 
    lowp_vec3
     
    typedef detail::tvec4< float,
    -lowp > 
    lowp_vec4
     
    typedef detail::tvec2< bool,
    -mediump > 
    mediump_bvec2
     
    typedef detail::tvec3< bool,
    -mediump > 
    mediump_bvec3
     
    typedef detail::tvec4< bool,
    -mediump > 
    mediump_bvec4
     
    typedef detail::tmat2x2
    -< double, mediump > 
    mediump_dmat2
     
    typedef detail::tmat2x2
    -< double, mediump > 
    mediump_dmat2x2
     
    typedef detail::tmat2x3
    -< double, mediump > 
    mediump_dmat2x3
     
    typedef detail::tmat2x4
    -< double, mediump > 
    mediump_dmat2x4
     
    typedef detail::tmat3x3
    -< double, mediump > 
    mediump_dmat3
     
    typedef detail::tmat3x2
    -< double, mediump > 
    mediump_dmat3x2
     
    typedef detail::tmat3x3
    -< double, mediump > 
    mediump_dmat3x3
     
    typedef detail::tmat3x4
    -< double, mediump > 
    mediump_dmat3x4
     
    typedef detail::tmat4x4
    -< double, mediump > 
    mediump_dmat4
     
    typedef detail::tmat4x2
    -< double, mediump > 
    mediump_dmat4x2
     
    typedef detail::tmat4x3
    -< double, mediump > 
    mediump_dmat4x3
     
    typedef detail::tmat4x4
    -< double, mediump > 
    mediump_dmat4x4
     
    typedef detail::tvec2< double,
    -mediump > 
    mediump_dvec2
     
    typedef detail::tvec3< double,
    -mediump > 
    mediump_dvec3
     
    typedef detail::tvec4< double,
    -mediump > 
    mediump_dvec4
     
    typedef mediump_float_t mediump_float
     
    typedef detail::mediump_int_t mediump_int
     
    typedef detail::tvec2< int,
    -mediump > 
    mediump_ivec2
     
    typedef detail::tvec3< int,
    -mediump > 
    mediump_ivec3
     
    typedef detail::tvec4< int,
    -mediump > 
    mediump_ivec4
     
    typedef detail::tmat2x2< float,
    -mediump > 
    mediump_mat2
     
    typedef detail::tmat2x2< float,
    -mediump > 
    mediump_mat2x2
     
    typedef detail::tmat2x3< float,
    -mediump > 
    mediump_mat2x3
     
    typedef detail::tmat2x4< float,
    -mediump > 
    mediump_mat2x4
     
    typedef detail::tmat3x3< float,
    -mediump > 
    mediump_mat3
     
    typedef detail::tmat3x2< float,
    -mediump > 
    mediump_mat3x2
     
    typedef detail::tmat3x3< float,
    -mediump > 
    mediump_mat3x3
     
    typedef detail::tmat3x4< float,
    -mediump > 
    mediump_mat3x4
     
    typedef detail::tmat4x4< float,
    -mediump > 
    mediump_mat4
     
    typedef detail::tmat4x2< float,
    -mediump > 
    mediump_mat4x2
     
    typedef detail::tmat4x3< float,
    -mediump > 
    mediump_mat4x3
     
    typedef detail::tmat4x4< float,
    -mediump > 
    mediump_mat4x4
     
    typedef detail::mediump_uint_t mediump_uint
     
    typedef detail::tvec2< uint,
    -mediump > 
    mediump_uvec2
     
    typedef detail::tvec3< uint,
    -mediump > 
    mediump_uvec3
     
    typedef detail::tvec4< uint,
    -mediump > 
    mediump_uvec4
     
    typedef detail::tvec2< float,
    -mediump > 
    mediump_vec2
     
    typedef detail::tvec3< float,
    -mediump > 
    mediump_vec3
     
    typedef detail::tvec4< float,
    -mediump > 
    mediump_vec4
     
    typedef unsigned int uint
     

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType::col_type column (genType const &m, length_t index)
     
    template<typename genType >
    GLM_FUNC_DECL genType column (genType const &m, length_t index, typename genType::col_type const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType::row_type row (genType const &m, length_t index)
     
    template<typename genType >
    GLM_FUNC_DECL genType row (genType const &m, length_t index, typename genType::row_type const &x)
     

    Detailed Description

    -

    Non-GLSL types that are used to define precision-based types.

    -

    The GLSL language allows the user to define the precision of a particular variable. In OpenGL's GLSL, these precision qualifiers have no effect; they are there for compatibility with OpenGL ES's precision qualifiers, where they do have an effect.

    -

    C++ has no language equivalent to precision qualifiers. So GLM provides the next-best thing: a number of typedefs of the Template types that use a particular precision.

    -

    None of these types make any guarantees about the actual precision used.

    -

    Typedef Documentation

    - +

    Defines functions to access rows or columns of a matrix easily.

    +

    <glm/gtc/matrix_access.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + + + + -
    typedef detail::tvec2<bool, highp> highp_bvec2GLM_FUNC_DECL genType::col_type glm::column (genType const & m,
    -
    - -

    2 components vector of high precision bool numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 149 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<bool, highp> highp_bvec3
    -
    - -

    3 components vector of high precision bool numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 259 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<bool, highp> highp_bvec4
    -
    - -

    4 components vector of high precision bool numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 354 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<double, highp> highp_dmat2
    -
    - -

    2 columns of 2 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 466 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<double, highp> highp_dmat2x2
    -
    - -

    2 columns of 2 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 484 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<double, highp> highp_dmat2x3
    -
    - -

    2 columns of 3 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 507 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<double, highp> highp_dmat2x4
    -
    - -

    2 columns of 4 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 530 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<double, highp> highp_dmat3
    -
    - -

    3 columns of 3 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 576 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<double, highp> highp_dmat3x2
    -
    - -

    3 columns of 2 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 553 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<double, highp> highp_dmat3x3
    -
    - -

    3 columns of 3 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 594 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<double, highp> highp_dmat3x4
    -
    - -

    3 columns of 4 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 617 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<double, highp> highp_dmat4
    -
    - -

    4 columns of 4 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 686 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<double, highp> highp_dmat4x2
    -
    - -

    4 columns of 2 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 640 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<double, highp> highp_dmat4x3
    -
    - -

    4 columns of 3 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 663 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<double, highp> highp_dmat4x4
    -
    - -

    4 columns of 4 components matrix of high precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 704 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<double, highp> highp_dvec2
    -
    - -

    2 components vector of high double-precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 86 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<double, highp> highp_dvec3
    -
    - -

    3 components vector of high double-precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 197 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<double, highp> highp_dvec4
    -
    - -

    4 components vector of high double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 300 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_float_t highp_float
    -
    - -

    High precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.4 Floats
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 67 of file type_float.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::highp_int_t highp_int
    -
    - -

    High precision signed integer.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 121 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<int, highp> highp_ivec2
    -
    - -

    2 components vector of high precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 107 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<int, highp> highp_ivec3
    -
    - -

    3 components vector of high precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 218 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<int, highp> highp_ivec4
    -
    - -

    4 components vector of high precision signed integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 318 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< float, highp > highp_mat2
    -
    - -

    2 columns of 2 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 79 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< float, highp > highp_mat2x2
    -
    - -

    2 columns of 2 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 100 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3< float, highp > highp_mat2x3
    -
    - -

    2 columns of 3 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 126 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4< float, highp > highp_mat2x4
    -
    - -

    2 columns of 4 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 152 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< float, highp > highp_mat3
    -
    - -

    3 columns of 3 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 204 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2< float, highp > highp_mat3x2
    -
    - -

    3 columns of 2 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 178 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< float, highp > highp_mat3x3
    -
    - -

    3 columns of 3 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 225 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4< float, highp > highp_mat3x4
    -
    - -

    3 columns of 4 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 251 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< float, highp > highp_mat4
    -
    - -

    4 columns of 4 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 330 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2< float, highp > highp_mat4x2
    -
    - -

    4 columns of 2 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 277 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3< float, highp > highp_mat4x3
    -
    - -

    4 columns of 3 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 303 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< float, highp > highp_mat4x4
    -
    - -

    4 columns of 4 components matrix of high precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 351 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::highp_uint_t highp_uint
    -
    - -

    High precision unsigned integer.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 142 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<uint, highp> highp_uvec2
    -
    - -

    2 components vector of high precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 128 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<uint, highp> highp_uvec3
    -
    - -

    3 components vector of high precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 239 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<uint, highp> highp_uvec4
    -
    - -

    4 components vector of high precision unsigned integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 336 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< float, highp > highp_vec2
    -
    - -

    2 components vector of high single-precision floating-point numbers.

    -

    High Single-precision floating-point vector of 2 components.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 65 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< float, highp > highp_vec3
    -
    - -

    3 components vector of high single-precision floating-point numbers.

    -

    High Single-precision floating-point vector of 3 components.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 176 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< float, highp > highp_vec4
    -
    - -

    4 components vector of high single-precision floating-point numbers.

    -

    High Single-precision floating-point vector of 4 components.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 282 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<bool, lowp> lowp_bvec2
    -
    - -

    2 components vector of low precision bool numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 163 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<bool, lowp> lowp_bvec3
    -
    - -

    3 components vector of low precision bool numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 271 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<bool, lowp> lowp_bvec4
    -
    - -

    4 components vector of low precision bool numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 366 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<double, lowp> lowp_dmat2
    -
    - -

    2 columns of 2 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 454 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<double, lowp> lowp_dmat2x2
    -
    - -

    2 columns of 2 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 472 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<double, lowp> lowp_dmat2x3
    -
    - -

    2 columns of 3 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 495 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<double, lowp> lowp_dmat2x4
    -
    - -

    2 columns of 4 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 518 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<float, lowp> lowp_dmat3
    -
    - -

    3 columns of 3 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 564 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<double, lowp> lowp_dmat3x2
    -
    - -

    3 columns of 2 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 541 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<double, lowp> lowp_dmat3x3
    -
    - -

    3 columns of 3 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 582 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<double, lowp> lowp_dmat3x4
    -
    - -

    3 columns of 4 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 605 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<double, lowp> lowp_dmat4
    -
    - -

    4 columns of 4 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 674 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<double, lowp> lowp_dmat4x2
    -
    - -

    4 columns of 2 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 628 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<double, lowp> lowp_dmat4x3
    -
    - -

    4 columns of 3 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 651 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<double, lowp> lowp_dmat4x4
    -
    - -

    4 columns of 4 components matrix of low precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 692 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<double, lowp> lowp_dvec2
    -
    - -

    2 components vector of low double-precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 100 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<double, lowp> lowp_dvec3
    -
    - -

    3 components vector of low double-precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 211 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<double, lowp> lowp_dvec4
    -
    - -

    4 components vector of low double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 312 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_float_t lowp_float
    -
    - -

    Low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.4 Floats
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 53 of file type_float.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::lowp_int_t lowp_int
    -
    - -

    Low precision signed integer.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 107 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<int, lowp> lowp_ivec2
    -
    - -

    2 components vector of low precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 121 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<int, lowp> lowp_ivec3
    -
    - -

    3 components vector of low precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 232 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<int, lowp> lowp_ivec4
    -
    - -

    4 components vector of low precision signed integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 330 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< float, lowp > lowp_mat2
    -
    - -

    2 columns of 2 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 65 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< float, lowp > lowp_mat2x2
    -
    - -

    2 columns of 2 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 86 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3< float, lowp > lowp_mat2x3
    -
    - -

    2 columns of 3 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 112 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4< float, lowp > lowp_mat2x4
    -
    - -

    2 columns of 4 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 138 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< float, lowp > lowp_mat3
    -
    - -

    3 columns of 3 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 190 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2< float, lowp > lowp_mat3x2
    -
    - -

    3 columns of 2 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 164 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< float, lowp > lowp_mat3x3
    -
    - -

    3 columns of 3 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 211 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4< float, lowp > lowp_mat3x4
    -
    - -

    3 columns of 4 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 237 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< float, lowp > lowp_mat4
    -
    - -

    4 columns of 4 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 316 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2< float, lowp > lowp_mat4x2
    -
    - -

    4 columns of 2 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 263 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3< float, lowp > lowp_mat4x3
    -
    - -

    4 columns of 3 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 289 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< float, lowp > lowp_mat4x4
    -
    - -

    4 columns of 4 components matrix of low precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 337 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::lowp_uint_t lowp_uint
    -
    - -

    Low precision unsigned integer.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 128 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<uint, lowp> lowp_uvec2
    -
    - -

    2 components vector of low precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 142 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<uint, lowp> lowp_uvec3
    -
    - -

    3 components vector of low precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 253 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<uint, lowp> lowp_uvec4
    -
    - -

    4 components vector of low precision unsigned integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 348 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< float, lowp > lowp_vec2
    -
    - -

    2 components vector of low single-precision floating-point numbers.

    -

    Low single-precision floating-point vector of 2 components.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 79 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< float, lowp > lowp_vec3
    -
    - -

    3 components vector of low single-precision floating-point numbers.

    -

    Low single-precision floating-point vector of 3 components.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 190 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< float, lowp > lowp_vec4
    -
    - -

    4 components vector of low single-precision floating-point numbers.

    -

    Low single-precision floating-point vector of 4 components.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 294 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<bool, mediump> mediump_bvec2
    -
    - -

    2 components vector of medium precision bool numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 156 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<bool, mediump> mediump_bvec3
    -
    - -

    3 components vector of medium precision bool numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 265 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<bool, mediump> mediump_bvec4
    -
    - -

    4 components vector of medium precision bool numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 360 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<double, mediump> mediump_dmat2
    -
    - -

    2 columns of 2 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 460 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<double, mediump> mediump_dmat2x2
    -
    - -

    2 columns of 2 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 478 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<double, mediump> mediump_dmat2x3
    -
    - -

    2 columns of 3 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 501 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<double, mediump> mediump_dmat2x4
    -
    - -

    2 columns of 4 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 524 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<double, mediump> mediump_dmat3
    -
    - -

    3 columns of 3 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 570 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<double, mediump> mediump_dmat3x2
    -
    - -

    3 columns of 2 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 547 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<double, mediump> mediump_dmat3x3
    -
    - -

    3 columns of 3 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 588 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<double, mediump> mediump_dmat3x4
    -
    - -

    3 columns of 4 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 611 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<double, mediump> mediump_dmat4
    -
    - -

    4 columns of 4 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 680 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<double, mediump> mediump_dmat4x2
    -
    - -

    4 columns of 2 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 634 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<double, mediump> mediump_dmat4x3
    -
    - -

    4 columns of 3 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 657 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<double, mediump> mediump_dmat4x4
    -
    - -

    4 columns of 4 components matrix of medium precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 698 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<double, mediump> mediump_dvec2
    -
    - -

    2 components vector of medium double-precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 93 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<double, mediump> mediump_dvec3
    -
    - -

    3 components vector of medium double-precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 204 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<double, mediump> mediump_dvec4
    -
    - -

    4 components vector of medium double-precision floating-point numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 306 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_float_t mediump_float
    -
    - -

    Medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.4 Floats
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 60 of file type_float.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::mediump_int_t mediump_int
    -
    - -

    Medium precision signed integer.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 114 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<int, mediump> mediump_ivec2
    -
    - -

    2 components vector of medium precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 114 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<int, mediump> mediump_ivec3
    -
    - -

    3 components vector of medium precision signed integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 225 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<int, mediump> mediump_ivec4
    -
    - -

    4 components vector of medium precision signed integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 324 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< float, mediump > mediump_mat2
    -
    - -

    2 columns of 2 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 72 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< float, mediump > mediump_mat2x2
    -
    - -

    2 columns of 2 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 93 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3< float, mediump > mediump_mat2x3
    -
    - -

    2 columns of 3 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 119 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4< float, mediump > mediump_mat2x4
    -
    - -

    2 columns of 4 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 145 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< float, mediump > mediump_mat3
    -
    - -

    3 columns of 3 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 197 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2< float, mediump > mediump_mat3x2
    -
    - -

    3 columns of 2 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 171 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< float, mediump > mediump_mat3x3
    -
    - -

    3 columns of 3 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 218 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef detail::tmat3x4< float, mediump > mediump_mat3x4length_t index 
    -
    - -

    3 columns of 4 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 244 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - + + +
    typedef detail::tmat4x4< float, mediump > mediump_mat4)
    -

    4 columns of 4 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 323 of file type_mat.hpp.

    +

    Get a specific column of a matrix.

    +
    See also
    GLM_GTC_matrix_access
    - +
    - + + + + -
    typedef detail::tmat4x2< float, mediump > mediump_mat4x2GLM_FUNC_DECL genType glm::column (genType const & m,
    -
    - -

    4 columns of 2 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 270 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef detail::tmat4x3< float, mediump > mediump_mat4x3length_t index,
    -
    - -

    4 columns of 3 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 296 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef detail::tmat4x4< float, mediump > mediump_mat4x4typename genType::col_type const & x 
    -
    - -

    4 columns of 4 components matrix of medium precision floating-point numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.6 Matrices
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 344 of file type_mat.hpp.

    - -
    -
    - -
    -
    - - + + +
    typedef detail::mediump_uint_t mediump_uint)
    -

    Medium precision unsigned integer.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 135 of file type_int.hpp.

    +

    Set a specific column to a matrix.

    +
    See also
    GLM_GTC_matrix_access
    - +
    - + + + + -
    typedef detail::tvec2<uint, mediump> mediump_uvec2GLM_FUNC_DECL genType::row_type glm::row (genType const & m,
    -
    - -

    2 components vector of medium precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 135 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef detail::tvec3<uint, mediump> mediump_uvec3length_t index 
    -
    - -

    3 components vector of medium precision unsigned integer numbers.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 246 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - + + +
    typedef detail::tvec4<uint, mediump> mediump_uvec4)
    -

    4 components vector of medium precision unsigned integer numbers.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    - -

    Definition at line 342 of file type_vec.hpp.

    +

    Get a specific row of a matrix.

    +
    See also
    GLM_GTC_matrix_access
    - +
    - + + + + -
    typedef detail::tvec2< float, mediump > mediump_vec2GLM_FUNC_DECL genType glm::row (genType const & m,
    -
    - -

    2 components vector of medium single-precision floating-point numbers.

    -

    Medium Single-precision floating-point vector of 2 components.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 72 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef detail::tvec3< float, mediump > mediump_vec3length_t index,
    -
    - -

    3 components vector of medium single-precision floating-point numbers.

    -

    Medium Single-precision floating-point vector of 3 components.

    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 183 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - + + + + -
    typedef detail::tvec4< float, mediump > mediump_vec4typename genType::row_type const & x 
    -
    - -

    4 components vector of medium single-precision floating-point numbers.

    -

    Medium Single-precision floating-point vector of 4 components.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.5 Vectors
    -
    -GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 288 of file type_vec.hpp.

    - -
    -
    - -
    -
    - - + + +
    typedef unsigned int uint)
    -

    Unsigned integer type.

    -
    See Also
    GLSL 4.20.8 specification, section 4.1.3 Integers
    - -

    Definition at line 171 of file type_int.hpp.

    +

    Set a specific row to a matrix.

    +
    See also
    GLM_GTC_matrix_access
    @@ -2928,7 +195,7 @@ mediump >  diff --git a/doc/api/a00170.html b/doc/api/a00170.html index a384db95..6250e6dc 100644 --- a/doc/api/a00170.html +++ b/doc/api/a00170.html @@ -3,8 +3,8 @@ - -GLM: Template types + +0.9.6: GLM_GTC_matrix_integer @@ -16,9 +16,9 @@ + @@ -26,30 +26,1860 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    +
    -
    Template types
    +
    GLM_GTC_matrix_integer
    -

    The generic template types used as the basis for the core types.

    -

    These types are all templates used to define the actual Types. These templetes are implementation details of GLM types and should not be used explicitly.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef tmat2x2< int, highp > highp_imat2
     
    typedef tmat2x2< int, highp > highp_imat2x2
     
    typedef tmat2x3< int, highp > highp_imat2x3
     
    typedef tmat2x4< int, highp > highp_imat2x4
     
    typedef tmat3x3< int, highp > highp_imat3
     
    typedef tmat3x2< int, highp > highp_imat3x2
     
    typedef tmat3x3< int, highp > highp_imat3x3
     
    typedef tmat3x4< int, highp > highp_imat3x4
     
    typedef tmat4x4< int, highp > highp_imat4
     
    typedef tmat4x2< int, highp > highp_imat4x2
     
    typedef tmat4x3< int, highp > highp_imat4x3
     
    typedef tmat4x4< int, highp > highp_imat4x4
     
    typedef tmat2x2< uint, highp > highp_umat2
     
    typedef tmat2x2< uint, highp > highp_umat2x2
     
    typedef tmat2x3< uint, highp > highp_umat2x3
     
    typedef tmat2x4< uint, highp > highp_umat2x4
     
    typedef tmat3x3< uint, highp > highp_umat3
     
    typedef tmat3x2< uint, highp > highp_umat3x2
     
    typedef tmat3x3< uint, highp > highp_umat3x3
     
    typedef tmat3x4< uint, highp > highp_umat3x4
     
    typedef tmat4x4< uint, highp > highp_umat4
     
    typedef tmat4x2< uint, highp > highp_umat4x2
     
    typedef tmat4x3< uint, highp > highp_umat4x3
     
    typedef tmat4x4< uint, highp > highp_umat4x4
     
    typedef mediump_imat2 imat2
     
    typedef mediump_imat2x2 imat2x2
     
    typedef mediump_imat2x3 imat2x3
     
    typedef mediump_imat2x4 imat2x4
     
    typedef mediump_imat3 imat3
     
    typedef mediump_imat3x2 imat3x2
     
    typedef mediump_imat3x3 imat3x3
     
    typedef mediump_imat3x4 imat3x4
     
    typedef mediump_imat4 imat4
     
    typedef mediump_imat4x2 imat4x2
     
    typedef mediump_imat4x3 imat4x3
     
    typedef mediump_imat4x4 imat4x4
     
    typedef tmat2x2< int, lowp > lowp_imat2
     
    typedef tmat2x2< int, lowp > lowp_imat2x2
     
    typedef tmat2x3< int, lowp > lowp_imat2x3
     
    typedef tmat2x4< int, lowp > lowp_imat2x4
     
    typedef tmat3x3< int, lowp > lowp_imat3
     
    typedef tmat3x2< int, lowp > lowp_imat3x2
     
    typedef tmat3x3< int, lowp > lowp_imat3x3
     
    typedef tmat3x4< int, lowp > lowp_imat3x4
     
    typedef tmat4x4< int, lowp > lowp_imat4
     
    typedef tmat4x2< int, lowp > lowp_imat4x2
     
    typedef tmat4x3< int, lowp > lowp_imat4x3
     
    typedef tmat4x4< int, lowp > lowp_imat4x4
     
    typedef tmat2x2< uint, lowp > lowp_umat2
     
    typedef tmat2x2< uint, lowp > lowp_umat2x2
     
    typedef tmat2x3< uint, lowp > lowp_umat2x3
     
    typedef tmat2x4< uint, lowp > lowp_umat2x4
     
    typedef tmat3x3< uint, lowp > lowp_umat3
     
    typedef tmat3x2< uint, lowp > lowp_umat3x2
     
    typedef tmat3x3< uint, lowp > lowp_umat3x3
     
    typedef tmat3x4< uint, lowp > lowp_umat3x4
     
    typedef tmat4x4< uint, lowp > lowp_umat4
     
    typedef tmat4x2< uint, lowp > lowp_umat4x2
     
    typedef tmat4x3< uint, lowp > lowp_umat4x3
     
    typedef tmat4x4< uint, lowp > lowp_umat4x4
     
    typedef tmat2x2< int, mediump > mediump_imat2
     
    typedef tmat2x2< int, mediump > mediump_imat2x2
     
    typedef tmat2x3< int, mediump > mediump_imat2x3
     
    typedef tmat2x4< int, mediump > mediump_imat2x4
     
    typedef tmat3x3< int, mediump > mediump_imat3
     
    typedef tmat3x2< int, mediump > mediump_imat3x2
     
    typedef tmat3x3< int, mediump > mediump_imat3x3
     
    typedef tmat3x4< int, mediump > mediump_imat3x4
     
    typedef tmat4x4< int, mediump > mediump_imat4
     
    typedef tmat4x2< int, mediump > mediump_imat4x2
     
    typedef tmat4x3< int, mediump > mediump_imat4x3
     
    typedef tmat4x4< int, mediump > mediump_imat4x4
     
    typedef tmat2x2< uint, mediump > mediump_umat2
     
    typedef tmat2x2< uint, mediump > mediump_umat2x2
     
    typedef tmat2x3< uint, mediump > mediump_umat2x3
     
    typedef tmat2x4< uint, mediump > mediump_umat2x4
     
    typedef tmat3x3< uint, mediump > mediump_umat3
     
    typedef tmat3x2< uint, mediump > mediump_umat3x2
     
    typedef tmat3x3< uint, mediump > mediump_umat3x3
     
    typedef tmat3x4< uint, mediump > mediump_umat3x4
     
    typedef tmat4x4< uint, mediump > mediump_umat4
     
    typedef tmat4x2< uint, mediump > mediump_umat4x2
     
    typedef tmat4x3< uint, mediump > mediump_umat4x3
     
    typedef tmat4x4< uint, mediump > mediump_umat4x4
     
    typedef mediump_umat2 umat2
     
    typedef mediump_umat2x2 umat2x2
     
    typedef mediump_umat2x3 umat2x3
     
    typedef mediump_umat2x4 umat2x4
     
    typedef mediump_umat3 umat3
     
    typedef mediump_umat3x2 umat3x2
     
    typedef mediump_umat3x3 umat3x3
     
    typedef mediump_umat3x4 umat3x4
     
    typedef mediump_umat4 umat4
     
    typedef mediump_umat4x2 umat4x2
     
    typedef mediump_umat4x3 umat4x3
     
    typedef mediump_umat4x4 umat4x4
     
    +

    Detailed Description

    +

    Defines a number of matrices with integer types.

    +

    <glm/gtc/matrix_integer.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    + +
    +
    + + + + +
    typedef tmat2x2<int, highp> highp_imat2
    +
    + +

    High-precision signed integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 61 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<int, highp> highp_imat2x2
    +
    + +

    High-precision signed integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 73 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<int, highp> highp_imat2x3
    +
    + +

    High-precision signed integer 2x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 77 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<int, highp> highp_imat2x4
    +
    + +

    High-precision signed integer 2x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 81 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<int, highp> highp_imat3
    +
    + +

    High-precision signed integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 65 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<int, highp> highp_imat3x2
    +
    + +

    High-precision signed integer 3x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 85 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<int, highp> highp_imat3x3
    +
    + +

    High-precision signed integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 89 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<int, highp> highp_imat3x4
    +
    + +

    High-precision signed integer 3x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 93 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<int, highp> highp_imat4
    +
    + +

    High-precision signed integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 69 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<int, highp> highp_imat4x2
    +
    + +

    High-precision signed integer 4x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 97 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<int, highp> highp_imat4x3
    +
    + +

    High-precision signed integer 4x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 101 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<int, highp> highp_imat4x4
    +
    + +

    High-precision signed integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 105 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<uint, highp> highp_umat2
    +
    + +

    High-precision unsigned integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 210 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<uint, highp> highp_umat2x2
    +
    + +

    High-precision unsigned integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 222 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<uint, highp> highp_umat2x3
    +
    + +

    High-precision unsigned integer 2x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 226 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<uint, highp> highp_umat2x4
    +
    + +

    High-precision unsigned integer 2x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 230 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<uint, highp> highp_umat3
    +
    + +

    High-precision unsigned integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 214 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<uint, highp> highp_umat3x2
    +
    + +

    High-precision unsigned integer 3x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 234 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<uint, highp> highp_umat3x3
    +
    + +

    High-precision unsigned integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 238 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<uint, highp> highp_umat3x4
    +
    + +

    High-precision unsigned integer 3x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 242 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<uint, highp> highp_umat4
    +
    + +

    High-precision unsigned integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 218 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<uint, highp> highp_umat4x2
    +
    + +

    High-precision unsigned integer 4x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 246 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<uint, highp> highp_umat4x3
    +
    + +

    High-precision unsigned integer 4x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 250 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<uint, highp> highp_umat4x4
    +
    + +

    High-precision unsigned integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 254 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat2 imat2
    +
    + +

    Signed integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 386 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat2x2 imat2x2
    +
    + +

    Signed integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 398 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat2x3 imat2x3
    +
    + +

    Signed integer 2x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 402 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat2x4 imat2x4
    +
    + +

    Signed integer 2x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 406 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat3 imat3
    +
    + +

    Signed integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 390 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat3x2 imat3x2
    +
    + +

    Signed integer 3x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 410 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat3x3 imat3x3
    +
    + +

    Signed integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 414 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat3x4 imat3x4
    +
    + +

    Signed integer 3x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 418 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat4 imat4
    +
    + +

    Signed integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 394 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat4x2 imat4x2
    +
    + +

    Signed integer 4x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 422 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat4x3 imat4x3
    +
    + +

    Signed integer 4x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 426 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_imat4x4 imat4x4
    +
    + +

    Signed integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 430 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<int, lowp> lowp_imat2
    +
    + +

    Low-precision signed integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 160 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<int, lowp> lowp_imat2x2
    +
    + +

    Low-precision signed integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 173 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<int, lowp> lowp_imat2x3
    +
    + +

    Low-precision signed integer 2x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 177 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<int, lowp> lowp_imat2x4
    +
    + +

    Low-precision signed integer 2x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 181 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<int, lowp> lowp_imat3
    +
    + +

    Low-precision signed integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 164 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<int, lowp> lowp_imat3x2
    +
    + +

    Low-precision signed integer 3x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 185 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<int, lowp> lowp_imat3x3
    +
    + +

    Low-precision signed integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 189 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<int, lowp> lowp_imat3x4
    +
    + +

    Low-precision signed integer 3x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 193 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<int, lowp> lowp_imat4
    +
    + +

    Low-precision signed integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 168 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<int, lowp> lowp_imat4x2
    +
    + +

    Low-precision signed integer 4x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 197 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<int, lowp> lowp_imat4x3
    +
    + +

    Low-precision signed integer 4x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 201 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<int, lowp> lowp_imat4x4
    +
    + +

    Low-precision signed integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 205 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<uint, lowp> lowp_umat2
    +
    + +

    Low-precision unsigned integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 309 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<uint, lowp> lowp_umat2x2
    +
    + +

    Low-precision unsigned integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 322 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<uint, lowp> lowp_umat2x3
    +
    + +

    Low-precision unsigned integer 2x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 326 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<uint, lowp> lowp_umat2x4
    +
    + +

    Low-precision unsigned integer 2x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 330 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<uint, lowp> lowp_umat3
    +
    + +

    Low-precision unsigned integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 313 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<uint, lowp> lowp_umat3x2
    +
    + +

    Low-precision unsigned integer 3x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 334 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<uint, lowp> lowp_umat3x3
    +
    + +

    Low-precision unsigned integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 338 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<uint, lowp> lowp_umat3x4
    +
    + +

    Low-precision unsigned integer 3x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 342 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<uint, lowp> lowp_umat4
    +
    + +

    Low-precision unsigned integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 317 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<uint, lowp> lowp_umat4x2
    +
    + +

    Low-precision unsigned integer 4x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 346 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<uint, lowp> lowp_umat4x3
    +
    + +

    Low-precision unsigned integer 4x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 350 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<uint, lowp> lowp_umat4x4
    +
    + +

    Low-precision unsigned integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 354 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<int, mediump> mediump_imat2
    +
    + +

    Medium-precision signed integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 110 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<int, mediump> mediump_imat2x2
    +
    + +

    Medium-precision signed integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 123 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<int, mediump> mediump_imat2x3
    +
    + +

    Medium-precision signed integer 2x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 127 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<int, mediump> mediump_imat2x4
    +
    + +

    Medium-precision signed integer 2x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 131 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<int, mediump> mediump_imat3
    +
    + +

    Medium-precision signed integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 114 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<int, mediump> mediump_imat3x2
    +
    + +

    Medium-precision signed integer 3x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 135 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<int, mediump> mediump_imat3x3
    +
    + +

    Medium-precision signed integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 139 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<int, mediump> mediump_imat3x4
    +
    + +

    Medium-precision signed integer 3x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 143 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<int, mediump> mediump_imat4
    +
    + +

    Medium-precision signed integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 118 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<int, mediump> mediump_imat4x2
    +
    + +

    Medium-precision signed integer 4x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 147 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<int, mediump> mediump_imat4x3
    +
    + +

    Medium-precision signed integer 4x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 151 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<int, mediump> mediump_imat4x4
    +
    + +

    Medium-precision signed integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 155 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<uint, mediump> mediump_umat2
    +
    + +

    Medium-precision unsigned integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 259 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<uint, mediump> mediump_umat2x2
    +
    + +

    Medium-precision unsigned integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 272 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<uint, mediump> mediump_umat2x3
    +
    + +

    Medium-precision unsigned integer 2x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 276 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<uint, mediump> mediump_umat2x4
    +
    + +

    Medium-precision unsigned integer 2x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 280 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<uint, mediump> mediump_umat3
    +
    + +

    Medium-precision unsigned integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 263 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<uint, mediump> mediump_umat3x2
    +
    + +

    Medium-precision unsigned integer 3x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 284 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<uint, mediump> mediump_umat3x3
    +
    + +

    Medium-precision unsigned integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 288 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<uint, mediump> mediump_umat3x4
    +
    + +

    Medium-precision unsigned integer 3x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 292 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<uint, mediump> mediump_umat4
    +
    + +

    Medium-precision unsigned integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 267 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<uint, mediump> mediump_umat4x2
    +
    + +

    Medium-precision unsigned integer 4x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 296 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<uint, mediump> mediump_umat4x3
    +
    + +

    Medium-precision unsigned integer 4x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 300 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<uint, mediump> mediump_umat4x4
    +
    + +

    Medium-precision unsigned integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 304 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat2 umat2
    +
    + +

    Unsigned integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 463 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat2x2 umat2x2
    +
    + +

    Unsigned integer 2x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 475 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat2x3 umat2x3
    +
    + +

    Unsigned integer 2x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 479 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat2x4 umat2x4
    +
    + +

    Unsigned integer 2x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 483 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat3 umat3
    +
    + +

    Unsigned integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 467 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat3x2 umat3x2
    +
    + +

    Unsigned integer 3x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 487 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat3x3 umat3x3
    +
    + +

    Unsigned integer 3x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 491 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat3x4 umat3x4
    +
    + +

    Unsigned integer 3x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 495 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat4 umat4
    +
    + +

    Unsigned integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 471 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat4x2 umat4x2
    +
    + +

    Unsigned integer 4x2 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 499 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat4x3 umat4x3
    +
    + +

    Unsigned integer 4x3 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 503 of file matrix_integer.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_umat4x4 umat4x4
    +
    + +

    Unsigned integer 4x4 matrix.

    +
    See also
    GLM_GTC_matrix_integer
    + +

    Definition at line 507 of file matrix_integer.hpp.

    + +
    +
    diff --git a/doc/api/a00171.html b/doc/api/a00171.html index 9249494e..0df65e9e 100644 --- a/doc/api/a00171.html +++ b/doc/api/a00171.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_constants + +0.9.6: GLM_GTC_matrix_inverse @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,540 +39,82 @@
    -
    GLM_GTC_constants
    +
    GLM_GTC_matrix_inverse
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType e ()
     
    template<typename genType >
    GLM_FUNC_DECL genType epsilon ()
     
    template<typename genType >
    GLM_FUNC_DECL genType euler ()
     
    template<typename genType >
    GLM_FUNC_DECL genType golden_ratio ()
     
    template<typename genType >
    GLM_FUNC_DECL genType half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ln_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_ten ()
     
    template<typename genType >
    GLM_FUNC_DECL genType ln_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType one_over_root_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType quarter_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_five ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_half_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_ln_four ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_three ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two ()
     
    template<typename genType >
    GLM_FUNC_DECL genType root_two_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType third ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_over_root_pi ()
     
    template<typename genType >
    GLM_FUNC_DECL genType two_thirds ()
     
    template<typename genType >
    GLM_FUNC_DECL genType zero ()
     
    template<typename genType >
    GLM_FUNC_DECL genType affineInverse (genType const &m)
     
    template<typename genType >
    GLM_FUNC_DECL genType inverseTranspose (genType const &m)
     

    Detailed Description

    -

    Allow to perform bit operations on integer values.

    -

    <glm/gtc/constants.hpp> need to be included to use these features.

    +

    Defines additional matrix inverting functions.

    +

    <glm/gtc/matrix_inverse.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - + +
    GLM_FUNC_DECL genType glm::e GLM_FUNC_DECL genType glm::affineInverse ()genType const & m)
    -

    Return e constant.

    -
    See Also
    GLM_GTC_constants
    +

    Fast matrix inverse for affine matrix.

    +
    Parameters
    + + +
    mInput matrix to invert.
    +
    +
    +
    Template Parameters
    + + +
    genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
    +
    +
    +
    See also
    GLM_GTC_matrix_inverse
    - +
    - + - + +
    GLM_FUNC_DECL genType glm::epsilon GLM_FUNC_DECL genType glm::inverseTranspose ()genType const & m)
    -

    Return the epsilon constant for floating point types.

    -
    Todo:
    Implement epsilon for half-precision floating point type.
    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::euler ()
    -
    - -

    Return Euler's constant.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::golden_ratio ()
    -
    - -

    Return the golden ratio constant.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::half_pi ()
    -
    - -

    Return pi / 2.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::ln_ln_two ()
    -
    - -

    Return ln(ln(2)).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::ln_ten ()
    -
    - -

    Return ln(10).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::ln_two ()
    -
    - -

    Return ln(2).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::one ()
    -
    - -

    Return 1.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::one_over_pi ()
    -
    - -

    Return 1 / pi.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::one_over_root_two ()
    -
    - -

    Return 1 / sqrt(2).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::pi ()
    -
    - -

    Return the pi constant.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::quarter_pi ()
    -
    - -

    Return pi / 4.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::root_five ()
    -
    - -

    Return sqrt(5).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::root_half_pi ()
    -
    - -

    Return sqrt(pi / 2).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::root_ln_four ()
    -
    - -

    Return sqrt(ln(4)).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::root_pi ()
    -
    - -

    Return square root of pi.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::root_three ()
    -
    - -

    Return sqrt(3).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::root_two ()
    -
    - -

    Return sqrt(2).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::root_two_pi ()
    -
    - -

    Return sqrt(2 * pi).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::third ()
    -
    - -

    Return 1 / 3.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::two_over_pi ()
    -
    - -

    Return 2 / pi.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::two_over_root_pi ()
    -
    - -

    Return 2 / sqrt(pi).

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::two_thirds ()
    -
    - -

    Return 2 / 3.

    -
    See Also
    GLM_GTC_constants
    - -
    -
    - -
    -
    - - - - - - - -
    GLM_FUNC_DECL genType glm::zero ()
    -
    - -

    Return 0.

    -
    See Also
    GLM_GTC_constants
    +

    Compute the inverse transpose of a matrix.

    +
    Parameters
    + + +
    mInput matrix to invert transpose.
    +
    +
    +
    Template Parameters
    + + +
    genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
    +
    +
    +
    See also
    GLM_GTC_matrix_inverse
    @@ -583,7 +123,7 @@ Functions diff --git a/doc/api/a00172.html b/doc/api/a00172.html index 725d0c22..d30ef687 100644 --- a/doc/api/a00172.html +++ b/doc/api/a00172.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_epsilon + +0.9.6: GLM_GTC_matrix_transform @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,50 +39,110 @@
    -
    +
    GLM_GTC_matrix_transform
    - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > epsilonEqual (vecType< T, P > const &x, vecType< T, P > const &y, T const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonEqual (genType const &x, genType const &y, genType const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL genType::boolType epsilonNotEqual (genType const &x, genType const &y, typename genType::value_type const &epsilon)
     
    template<typename genType >
    GLM_FUNC_DECL bool epsilonNotEqual (genType const &x, genType const &y, genType const &epsilon)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    frustum (T left, T right, T bottom, T top, T near, T far)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    infinitePerspective (T fovy, T aspect, T near)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > lookAt (tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    ortho (T left, T right, T bottom, T top, T zNear, T zFar)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    ortho (T left, T right, T bottom, T top)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    perspective (T fovy, T aspect, T near, T far)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    perspectiveFov (T fov, T width, T height, T near, T far)
     
    template<typename T , precision P, typename U >
    GLM_FUNC_DECL tmat4x4< T, P > pickMatrix (tvec2< T, P > const &center, tvec2< T, P > const &delta, tvec4< U, P > const &viewport)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL tvec3< T, P > project (tvec3< T, P > const &obj, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rotate (tmat4x4< T, P > const &m, T angle, tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > scale (tmat4x4< T, P > const &m, tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > translate (tmat4x4< T, P > const &m, tvec3< T, P > const &v)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    tweakedInfinitePerspective (T fovy, T aspect, T near)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    tweakedInfinitePerspective (T fovy, T aspect, T near, T ep)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL tvec3< T, P > unProject (tvec3< T, P > const &win, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)
     

    Detailed Description

    -

    Comparison functions for a user defined epsilon values.

    -

    <glm/gtc/epsilon.hpp> need to be included to use these functionalities.

    +

    Defines functions that generate common transformation matrices.

    +

    The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.

    +

    <glm/gtc/matrix_transform.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -94,33 +152,49 @@ Functions
    GLM_FUNC_DECL vecType<bool, P> glm::epsilonEqual GLM_FUNC_DECL tmat4x4<T, defaultp> glm::frustum (vecType< T, P > const & x, left,
    vecType< T, P > const & y, right,
    T const & epsilon bottom,
    top,
    near,
    far 
    -

    Returns the component-wise comparison of |x - y| < epsilon.

    -

    True if this expression is satisfied.

    -
    See Also
    GLM_GTC_epsilon
    +

    Creates a frustum matrix.

    +
    Parameters
    + + + + + + + +
    left
    right
    bottom
    top
    near
    far
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    - +
    - + - - + + - - + + - - + + @@ -130,33 +204,46 @@ Functions
    GLM_FUNC_DECL bool glm::epsilonEqual GLM_FUNC_DECL tmat4x4<T, defaultp> glm::infinitePerspective (genType const & x, fovy,
    genType const & y, aspect,
    genType const & epsilon near 
    -

    Returns the component-wise comparison of |x - y| < epsilon.

    -

    True if this expression is satisfied.

    -
    See Also
    GLM_GTC_epsilon
    +

    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite.

    +
    Parameters
    + + + + +
    fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
    aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
    nearSpecifies the distance from the viewer to the near clipping plane (always positive).
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    - +
    - + - - + + - - + + - - + + @@ -166,33 +253,60 @@ Functions
    GLM_FUNC_DECL genType::boolType glm::epsilonNotEqual GLM_FUNC_DECL tmat4x4<T, P> glm::lookAt (genType const & x, tvec3< T, P > const & eye,
    genType const & y, tvec3< T, P > const & center,
    typename genType::value_type const & epsilon tvec3< T, P > const & up 
    -

    Returns the component-wise comparison of |x - y| < epsilon.

    -

    True if this expression is not satisfied.

    -
    See Also
    GLM_GTC_epsilon
    +

    Build a look at view matrix.

    +
    Parameters
    + + + + +
    eyePosition of the camera
    centerPosition where the camera is looking at
    upNormalized up vector, how the camera is oriented. Typically (0, 0, 1)
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    +
    +- frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal)
    - +
    - + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -202,9 +316,628 @@ Functions
    GLM_FUNC_DECL bool glm::epsilonNotEqual GLM_FUNC_DECL tmat4x4<T, defaultp> glm::ortho (genType const & x, left,
    genType const & y, right,
    genType const & epsilon bottom,
    top,
    zNear,
    zFar 
    -

    Returns the component-wise comparison of |x - y| >= epsilon.

    -

    True if this expression is not satisfied.

    -
    See Also
    GLM_GTC_epsilon
    +

    Creates a matrix for an orthographic parallel viewing volume.

    +
    Parameters
    + + + + + + + +
    left
    right
    bottom
    top
    zNear
    zFar
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    +
    +- glm::ortho(T const & left, T const & right, T const & bottom, T const & top)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::ortho (left,
    right,
    bottom,
    top 
    )
    +
    + +

    Creates a matrix for projecting two-dimensional coordinates onto the screen.

    +
    Parameters
    + + + + + +
    left
    right
    bottom
    top
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    +
    +- glm::ortho(T const & left, T const & right, T const & bottom, T const & top, T const & zNear, T const & zFar)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::perspective (fovy,
    aspect,
    near,
    far 
    )
    +
    + +

    Creates a matrix for a symetric perspective-view frustum.

    +
    Parameters
    + + + + + +
    fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
    aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
    nearSpecifies the distance from the viewer to the near clipping plane (always positive).
    farSpecifies the distance from the viewer to the far clipping plane (always positive).
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::perspectiveFov (fov,
    width,
    height,
    near,
    far 
    )
    +
    + +

    Builds a perspective projection matrix based on a field of view.

    +
    Parameters
    + + + + + + +
    fovExpressed in radians.
    width
    height
    nearSpecifies the distance from the viewer to the near clipping plane (always positive).
    farSpecifies the distance from the viewer to the far clipping plane (always positive).
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::pickMatrix (tvec2< T, P > const & center,
    tvec2< T, P > const & delta,
    tvec4< U, P > const & viewport 
    )
    +
    + +

    Define a picking region.

    +
    Parameters
    + + + + +
    center
    delta
    viewport
    +
    +
    +
    Template Parameters
    + + + +
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::project (tvec3< T, P > const & obj,
    tmat4x4< T, P > const & model,
    tmat4x4< T, P > const & proj,
    tvec4< U, P > const & viewport 
    )
    +
    + +

    Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.

    +
    Parameters
    + + + + + +
    objSpecify the object coordinates.
    modelSpecifies the current modelview matrix
    projSpecifies the current projection matrix
    viewportSpecifies the current viewport
    +
    +
    +
    Returns
    Return the computed window coordinates.
    +
    Template Parameters
    + + + +
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::rotate (tmat4x4< T, P > const & m,
    angle,
    tvec3< T, P > const & axis 
    )
    +
    + +

    Builds a rotation 4 * 4 matrix created from an axis vector and an angle.

    +
    Parameters
    + + + + +
    mInput matrix multiplied by this rotation matrix.
    angleRotation angle expressed in radians.
    axisRotation axis, recommanded to be normalized.
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Supported: half, float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    +
    +- rotate(tmat4x4<T, P> const & m, T angle, T x, T y, T z)
    +
    +- rotate(T angle, tvec3<T, P> const & v)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::scale (tmat4x4< T, P > const & m,
    tvec3< T, P > const & v 
    )
    +
    + +

    Builds a scale 4 * 4 matrix created from 3 scalars.

    +
    Parameters
    + + + +
    mInput matrix multiplied by this scale matrix.
    vRatio of scaling for each axis.
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    +
    +- scale(tmat4x4<T, P> const & m, T x, T y, T z)
    +
    +- scale(tvec3<T, P> const & v)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::translate (tmat4x4< T, P > const & m,
    tvec3< T, P > const & v 
    )
    +
    + +

    Builds a translation 4 * 4 matrix created from a vector of 3 components.

    +
    Parameters
    + + + +
    mInput matrix multiplied by this translation matrix.
    vCoordinates of a translation vector.
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    #include <glm/glm.hpp>
    + +
    ...
    +
    glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));
    +
    // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f
    +
    // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f
    +
    // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f
    +
    // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f
    +
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    +
    +- translate(tmat4x4<T, P> const & m, T x, T y, T z)
    +
    +- translate(tvec3<T, P> const & v)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::tweakedInfinitePerspective (fovy,
    aspect,
    near 
    )
    +
    + +

    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.

    +
    Parameters
    + + + + +
    fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
    aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
    nearSpecifies the distance from the viewer to the near clipping plane (always positive).
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::tweakedInfinitePerspective (fovy,
    aspect,
    near,
    ep 
    )
    +
    + +

    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.

    +
    Parameters
    + + + + + +
    fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
    aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
    nearSpecifies the distance from the viewer to the near clipping plane (always positive).
    ep
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::unProject (tvec3< T, P > const & win,
    tmat4x4< T, P > const & model,
    tmat4x4< T, P > const & proj,
    tvec4< U, P > const & viewport 
    )
    +
    + +

    Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.

    +
    Parameters
    + + + + + +
    winSpecify the window coordinates to be mapped.
    modelSpecifies the modelview matrix
    projSpecifies the projection matrix
    viewportSpecifies the viewport
    +
    +
    +
    Returns
    Returns the computed object coordinates.
    +
    Template Parameters
    + + + +
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    +
    +
    +
    See also
    GLM_GTC_matrix_transform
    @@ -213,7 +946,7 @@ Functions diff --git a/doc/api/a00173.html b/doc/api/a00173.html index dd58cb59..4cfc21a8 100644 --- a/doc/api/a00173.html +++ b/doc/api/a00173.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_matrix_access + +0.9.6: GLM_GTC_noise @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,44 +39,59 @@
    -
    GLM_GTC_matrix_access
    +
    - - - - - - - - - - - - + + + + + + + + +

    Functions

    template<typename genType >
    genType::col_type column (genType const &m, length_t const &index)
     
    template<typename genType >
    genType column (genType const &m, length_t const &index, typename genType::col_type const &x)
     
    template<typename genType >
    genType::row_type row (genType const &m, length_t const &index)
     
    template<typename genType >
    genType row (genType const &m, length_t const &index, typename genType::row_type const &x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T perlin (vecType< T, P > const &p)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T perlin (vecType< T, P > const &p, vecType< T, P > const &rep)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T simplex (vecType< T, P > const &p)
     

    Detailed Description

    -

    Defines functions to access rows or columns of a matrix easily.

    -

    <glm/gtc/matrix_access.hpp> need to be included to use these functionalities.

    +

    Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf <glm/gtc/noise.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + + + +
    genType::col_type glm::column GLM_FUNC_DECL T glm::perlin (genType const & m, vecType< T, P > const & p)
    +
    + +

    Classic perlin noise.

    +
    See also
    GLM_GTC_noise
    + +
    +
    + +
    +
    + + + + + + - - + + @@ -88,107 +101,27 @@ Functions
    GLM_FUNC_DECL T glm::perlin (vecType< T, P > const & p,
    length_t const & index vecType< T, P > const & rep 
    -

    Get a specific column of a matrix.

    -
    See Also
    GLM_GTC_matrix_access
    +

    Periodic perlin noise.

    +
    See also
    GLM_GTC_noise
    - +
    - + - - - - - + + - - - - - - - - - - - - -
    genType glm::column GLM_FUNC_DECL T glm::simplex (genType const & m,
    vecType< T, P > const & p) length_t const & index,
    typename genType::col_type const & x 
    )
    -

    Set a specific column to a matrix.

    -
    See Also
    GLM_GTC_matrix_access
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType::row_type glm::row (genType const & m,
    length_t const & index 
    )
    -
    - -

    Get a specific row of a matrix.

    -
    See Also
    GLM_GTC_matrix_access
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    genType glm::row (genType const & m,
    length_t const & index,
    typename genType::row_type const & x 
    )
    -
    - -

    Set a specific row to a matrix.

    -
    See Also
    GLM_GTC_matrix_access
    +

    Simplex noise.

    +
    See also
    GLM_GTC_noise
    @@ -197,7 +130,7 @@ Functions diff --git a/doc/api/a00174.html b/doc/api/a00174.html index b3010467..90f1abd7 100644 --- a/doc/api/a00174.html +++ b/doc/api/a00174.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_matrix_integer + +0.9.6: GLM_GTC_packing @@ -16,9 +16,9 @@ + @@ -26,1925 +26,942 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GLM_GTC_matrix_integer
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    typedef detail::tmat2x2< int,
    -highp > 
    highp_imat2
     
    typedef detail::tmat2x2< int,
    -highp > 
    highp_imat2x2
     
    typedef detail::tmat2x3< int,
    -highp > 
    highp_imat2x3
     
    typedef detail::tmat2x4< int,
    -highp > 
    highp_imat2x4
     
    typedef detail::tmat3x3< int,
    -highp > 
    highp_imat3
     
    typedef detail::tmat3x2< int,
    -highp > 
    highp_imat3x2
     
    typedef detail::tmat3x3< int,
    -highp > 
    highp_imat3x3
     
    typedef detail::tmat3x4< int,
    -highp > 
    highp_imat3x4
     
    typedef detail::tmat4x4< int,
    -highp > 
    highp_imat4
     
    typedef detail::tmat4x2< int,
    -highp > 
    highp_imat4x2
     
    typedef detail::tmat4x3< int,
    -highp > 
    highp_imat4x3
     
    typedef detail::tmat4x4< int,
    -highp > 
    highp_imat4x4
     
    typedef detail::tmat2x2< uint,
    -highp > 
    highp_umat2
     
    typedef detail::tmat2x2< uint,
    -highp > 
    highp_umat2x2
     
    typedef detail::tmat2x3< uint,
    -highp > 
    highp_umat2x3
     
    typedef detail::tmat2x4< uint,
    -highp > 
    highp_umat2x4
     
    typedef detail::tmat3x3< uint,
    -highp > 
    highp_umat3
     
    typedef detail::tmat3x2< uint,
    -highp > 
    highp_umat3x2
     
    typedef detail::tmat3x3< uint,
    -highp > 
    highp_umat3x3
     
    typedef detail::tmat3x4< uint,
    -highp > 
    highp_umat3x4
     
    typedef detail::tmat4x4< uint,
    -highp > 
    highp_umat4
     
    typedef detail::tmat4x2< uint,
    -highp > 
    highp_umat4x2
     
    typedef detail::tmat4x3< uint,
    -highp > 
    highp_umat4x3
     
    typedef detail::tmat4x4< uint,
    -highp > 
    highp_umat4x4
     
    typedef mediump_imat2 imat2
     
    typedef mediump_imat2x2 imat2x2
     
    typedef mediump_imat2x3 imat2x3
     
    typedef mediump_imat2x4 imat2x4
     
    typedef mediump_imat3 imat3
     
    typedef mediump_imat3x2 imat3x2
     
    typedef mediump_imat3x3 imat3x3
     
    typedef mediump_imat3x4 imat3x4
     
    typedef mediump_imat4 imat4
     
    typedef mediump_imat4x2 imat4x2
     
    typedef mediump_imat4x3 imat4x3
     
    typedef mediump_imat4x4 imat4x4
     
    typedef detail::tmat2x2< int,
    -lowp > 
    lowp_imat2
     
    typedef detail::tmat2x2< int,
    -lowp > 
    lowp_imat2x2
     
    typedef detail::tmat2x3< int,
    -lowp > 
    lowp_imat2x3
     
    typedef detail::tmat2x4< int,
    -lowp > 
    lowp_imat2x4
     
    typedef detail::tmat3x3< int,
    -lowp > 
    lowp_imat3
     
    typedef detail::tmat3x2< int,
    -lowp > 
    lowp_imat3x2
     
    typedef detail::tmat3x3< int,
    -lowp > 
    lowp_imat3x3
     
    typedef detail::tmat3x4< int,
    -lowp > 
    lowp_imat3x4
     
    typedef detail::tmat4x4< int,
    -lowp > 
    lowp_imat4
     
    typedef detail::tmat4x2< int,
    -lowp > 
    lowp_imat4x2
     
    typedef detail::tmat4x3< int,
    -lowp > 
    lowp_imat4x3
     
    typedef detail::tmat4x4< int,
    -lowp > 
    lowp_imat4x4
     
    typedef detail::tmat2x2< uint,
    -lowp > 
    lowp_umat2
     
    typedef detail::tmat2x2< uint,
    -lowp > 
    lowp_umat2x2
     
    typedef detail::tmat2x3< uint,
    -lowp > 
    lowp_umat2x3
     
    typedef detail::tmat2x4< uint,
    -lowp > 
    lowp_umat2x4
     
    typedef detail::tmat3x3< uint,
    -lowp > 
    lowp_umat3
     
    typedef detail::tmat3x2< uint,
    -lowp > 
    lowp_umat3x2
     
    typedef detail::tmat3x3< uint,
    -lowp > 
    lowp_umat3x3
     
    typedef detail::tmat3x4< uint,
    -lowp > 
    lowp_umat3x4
     
    typedef detail::tmat4x4< uint,
    -lowp > 
    lowp_umat4
     
    typedef detail::tmat4x2< uint,
    -lowp > 
    lowp_umat4x2
     
    typedef detail::tmat4x3< uint,
    -lowp > 
    lowp_umat4x3
     
    typedef detail::tmat4x4< uint,
    -lowp > 
    lowp_umat4x4
     
    typedef detail::tmat2x2< int,
    -mediump > 
    mediump_imat2
     
    typedef detail::tmat2x2< int,
    -mediump > 
    mediump_imat2x2
     
    typedef detail::tmat2x3< int,
    -mediump > 
    mediump_imat2x3
     
    typedef detail::tmat2x4< int,
    -mediump > 
    mediump_imat2x4
     
    typedef detail::tmat3x3< int,
    -mediump > 
    mediump_imat3
     
    typedef detail::tmat3x2< int,
    -mediump > 
    mediump_imat3x2
     
    typedef detail::tmat3x3< int,
    -mediump > 
    mediump_imat3x3
     
    typedef detail::tmat3x4< int,
    -mediump > 
    mediump_imat3x4
     
    typedef detail::tmat4x4< int,
    -mediump > 
    mediump_imat4
     
    typedef detail::tmat4x2< int,
    -mediump > 
    mediump_imat4x2
     
    typedef detail::tmat4x3< int,
    -mediump > 
    mediump_imat4x3
     
    typedef detail::tmat4x4< int,
    -mediump > 
    mediump_imat4x4
     
    typedef detail::tmat2x2< uint,
    -mediump > 
    mediump_umat2
     
    typedef detail::tmat2x2< uint,
    -mediump > 
    mediump_umat2x2
     
    typedef detail::tmat2x3< uint,
    -mediump > 
    mediump_umat2x3
     
    typedef detail::tmat2x4< uint,
    -mediump > 
    mediump_umat2x4
     
    typedef detail::tmat3x3< uint,
    -mediump > 
    mediump_umat3
     
    typedef detail::tmat3x2< uint,
    -mediump > 
    mediump_umat3x2
     
    typedef detail::tmat3x3< uint,
    -mediump > 
    mediump_umat3x3
     
    typedef detail::tmat3x4< uint,
    -mediump > 
    mediump_umat3x4
     
    typedef detail::tmat4x4< uint,
    -mediump > 
    mediump_umat4
     
    typedef detail::tmat4x2< uint,
    -mediump > 
    mediump_umat4x2
     
    typedef detail::tmat4x3< uint,
    -mediump > 
    mediump_umat4x3
     
    typedef detail::tmat4x4< uint,
    -mediump > 
    mediump_umat4x4
     
    typedef mediump_umat2 umat2
     
    typedef mediump_umat2x2 umat2x2
     
    typedef mediump_umat2x3 umat2x3
     
    typedef mediump_umat2x4 umat2x4
     
    typedef mediump_umat3 umat3
     
    typedef mediump_umat3x2 umat3x2
     
    typedef mediump_umat3x3 umat3x3
     
    typedef mediump_umat3x4 umat3x4
     
    typedef mediump_umat4 umat4
     
    typedef mediump_umat4x2 umat4x2
     
    typedef mediump_umat4x3 umat4x3
     
    typedef mediump_umat4x4 umat4x4
     

    +Functions

    GLM_FUNC_DECL uint32 packF2x11_1x10 (vec3 const &v)
     
    GLM_FUNC_DECL uint16 packHalf1x16 (float v)
     
    GLM_FUNC_DECL uint64 packHalf4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packI3x10_1x2 (ivec4 const &v)
     
    GLM_FUNC_DECL uint16 packSnorm1x16 (float v)
     
    GLM_FUNC_DECL uint8 packSnorm1x8 (float s)
     
    GLM_FUNC_DECL uint16 packSnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packSnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packSnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packU3x10_1x2 (uvec4 const &v)
     
    GLM_FUNC_DECL uint16 packUnorm1x16 (float v)
     
    GLM_FUNC_DECL uint8 packUnorm1x8 (float v)
     
    GLM_FUNC_DECL uint16 packUnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packUnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packUnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL vec3 unpackF2x11_1x10 (uint32 p)
     
    GLM_FUNC_DECL float unpackHalf1x16 (uint16 v)
     
    GLM_FUNC_DECL vec4 unpackHalf4x16 (uint64 p)
     
    GLM_FUNC_DECL ivec4 unpackI3x10_1x2 (uint32 p)
     
    GLM_FUNC_DECL float unpackSnorm1x16 (uint16 p)
     
    GLM_FUNC_DECL float unpackSnorm1x8 (uint8 p)
     
    GLM_FUNC_DECL vec2 unpackSnorm2x8 (uint16 p)
     
    GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2 (uint32 p)
     
    GLM_FUNC_DECL vec4 unpackSnorm4x16 (uint64 const &p)
     
    GLM_FUNC_DECL uvec4 unpackU3x10_1x2 (uint32 p)
     
    GLM_FUNC_DECL float unpackUnorm1x16 (uint16 p)
     
    GLM_FUNC_DECL float unpackUnorm1x8 (uint8 p)
     
    GLM_FUNC_DECL vec2 unpackUnorm2x8 (uint16 p)
     
    GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2 (uint32 p)
     
    GLM_FUNC_DECL vec4 unpackUnorm4x16 (uint64 p)
     

    Detailed Description

    -

    Defines a number of matrices with integer types.

    -

    <glm/gtc/matrix_integer.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - +

    This extension provides a set of function to convert vertors to packed formats.

    +

    <glm/gtc/packing.hpp> need to be included to use these features.

    +

    Function Documentation

    +
    - + + + + +
    typedef detail::tmat2x2<int, highp> highp_imat2GLM_FUNC_DECL uint32 glm::packF2x11_1x10 (vec3 const & v)
    -

    High-precision signed integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    +

    First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.

    +

    Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +vec3 unpackF2x11_1x10(uint32 const & p)
    -

    Definition at line 62 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<int, highp> highp_imat2x2
    -
    - -

    High-precision signed integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 74 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<int, highp> highp_imat2x3
    -
    - -

    High-precision signed integer 2x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 78 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<int, highp> highp_imat2x4
    -
    - -

    High-precision signed integer 2x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 82 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<int, highp> highp_imat3
    -
    - -

    High-precision signed integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 66 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<int, highp> highp_imat3x2
    -
    - -

    High-precision signed integer 3x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 86 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<int, highp> highp_imat3x3
    -
    - -

    High-precision signed integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 90 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<int, highp> highp_imat3x4
    -
    - -

    High-precision signed integer 3x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 94 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<int, highp> highp_imat4
    -
    - -

    High-precision signed integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 70 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<int, highp> highp_imat4x2
    -
    - -

    High-precision signed integer 4x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 98 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<int, highp> highp_imat4x3
    -
    - -

    High-precision signed integer 4x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 102 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<int, highp> highp_imat4x4
    -
    - -

    High-precision signed integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 106 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<uint, highp> highp_umat2
    -
    - -

    High-precision unsigned integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 211 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<uint, highp> highp_umat2x2
    -
    - -

    High-precision unsigned integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 223 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<uint, highp> highp_umat2x3
    -
    - -

    High-precision unsigned integer 2x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 227 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<uint, highp> highp_umat2x4
    -
    - -

    High-precision unsigned integer 2x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 231 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<uint, highp> highp_umat3
    -
    - -

    High-precision unsigned integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 215 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<uint, highp> highp_umat3x2
    -
    - -

    High-precision unsigned integer 3x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 235 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<uint, highp> highp_umat3x3
    -
    - -

    High-precision unsigned integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 239 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<uint, highp> highp_umat3x4
    -
    - -

    High-precision unsigned integer 3x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 243 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<uint, highp> highp_umat4
    -
    - -

    High-precision unsigned integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 219 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<uint, highp> highp_umat4x2
    -
    - -

    High-precision unsigned integer 4x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 247 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<uint, highp> highp_umat4x3
    -
    - -

    High-precision unsigned integer 4x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 251 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<uint, highp> highp_umat4x4
    -
    - -

    High-precision unsigned integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 255 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat2 imat2
    -
    - -

    Signed integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 387 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat2x2 imat2x2
    -
    - -

    Signed integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 399 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat2x3 imat2x3
    -
    - -

    Signed integer 2x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 403 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat2x4 imat2x4
    -
    - -

    Signed integer 2x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 407 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat3 imat3
    -
    - -

    Signed integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 391 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat3x2 imat3x2
    -
    - -

    Signed integer 3x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 411 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat3x3 imat3x3
    -
    - -

    Signed integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 415 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat3x4 imat3x4
    -
    - -

    Signed integer 3x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 419 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat4 imat4
    -
    - -

    Signed integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 395 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat4x2 imat4x2
    -
    - -

    Signed integer 4x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 423 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat4x3 imat4x3
    -
    - -

    Signed integer 4x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 427 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_imat4x4 imat4x4
    -
    - -

    Signed integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 431 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<int, lowp> lowp_imat2
    -
    - -

    Low-precision signed integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 161 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<int, lowp> lowp_imat2x2
    -
    - -

    Low-precision signed integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 174 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<int, lowp> lowp_imat2x3
    -
    - -

    Low-precision signed integer 2x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 178 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<int, lowp> lowp_imat2x4
    -
    - -

    Low-precision signed integer 2x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 182 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<int, lowp> lowp_imat3
    -
    - -

    Low-precision signed integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 165 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<int, lowp> lowp_imat3x2
    -
    - -

    Low-precision signed integer 3x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 186 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<int, lowp> lowp_imat3x3
    -
    - -

    Low-precision signed integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 190 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<int, lowp> lowp_imat3x4
    -
    - -

    Low-precision signed integer 3x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 194 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<int, lowp> lowp_imat4
    -
    - -

    Low-precision signed integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 169 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<int, lowp> lowp_imat4x2
    -
    - -

    Low-precision signed integer 4x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 198 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<int, lowp> lowp_imat4x3
    -
    - -

    Low-precision signed integer 4x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 202 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<int, lowp> lowp_imat4x4
    -
    - -

    Low-precision signed integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 206 of file matrix_integer.hpp.

    - -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<uint, lowp> lowp_umat2
    -
    - -

    Low-precision unsigned integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 310 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<uint, lowp> lowp_umat2x2
    -
    - -

    Low-precision unsigned integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 323 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<uint, lowp> lowp_umat2x3
    -
    - -

    Low-precision unsigned integer 2x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 327 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<uint, lowp> lowp_umat2x4
    -
    - -

    Low-precision unsigned integer 2x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 331 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<uint, lowp> lowp_umat3
    -
    - -

    Low-precision unsigned integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 314 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<uint, lowp> lowp_umat3x2
    -
    - -

    Low-precision unsigned integer 3x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 335 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<uint, lowp> lowp_umat3x3
    -
    - -

    Low-precision unsigned integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 339 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<uint, lowp> lowp_umat3x4
    -
    - -

    Low-precision unsigned integer 3x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 343 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<uint, lowp> lowp_umat4
    -
    - -

    Low-precision unsigned integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 318 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<uint, lowp> lowp_umat4x2
    -
    - -

    Low-precision unsigned integer 4x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 347 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<uint, lowp> lowp_umat4x3
    -
    - -

    Low-precision unsigned integer 4x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 351 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<uint, lowp> lowp_umat4x4
    -
    - -

    Low-precision unsigned integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 355 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<int, mediump> mediump_imat2
    -
    - -

    Medium-precision signed integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 111 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<int, mediump> mediump_imat2x2
    -
    - -

    Medium-precision signed integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 124 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<int, mediump> mediump_imat2x3
    -
    - -

    Medium-precision signed integer 2x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 128 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<int, mediump> mediump_imat2x4
    -
    - -

    Medium-precision signed integer 2x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 132 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<int, mediump> mediump_imat3
    -
    - -

    Medium-precision signed integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 115 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<int, mediump> mediump_imat3x2
    -
    - -

    Medium-precision signed integer 3x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 136 of file matrix_integer.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<int, mediump> mediump_imat3x3
    -
    - -

    Medium-precision signed integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 140 of file matrix_integer.hpp.

    -
    -
    - +
    - + + + + +
    typedef detail::tmat3x4<int, mediump> mediump_imat3x4GLM_FUNC_DECL uint16 glm::packHalf1x16 (float v)
    -

    Medium-precision signed integer 3x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 144 of file matrix_integer.hpp.

    +

    Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer.

    +
    See also
    GLM_GTC_packing
    +
    +uint32 packHalf2x16(vec2 const & v)
    +
    +uint64 packHalf4x16(vec4 const & v)
    +
    +GLSL packHalf2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat4x4<int, mediump> mediump_imat4GLM_FUNC_DECL uint64 glm::packHalf4x16 (vec4 const & v)
    -

    Medium-precision signed integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 119 of file matrix_integer.hpp.

    +

    Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer.

    +

    The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint16 packHalf1x16(float const & v)
    +
    +uint32 packHalf2x16(vec2 const & v)
    +
    +GLSL packHalf2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat4x2<int, mediump> mediump_imat4x2GLM_FUNC_DECL uint32 glm::packI3x10_1x2 (ivec4 const & v)
    -

    Medium-precision signed integer 4x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 148 of file matrix_integer.hpp.

    +

    Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.

    +

    The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint32 packI3x10_1x2(uvec4 const & v)
    +
    +uint32 packSnorm3x10_1x2(vec4 const & v)
    +
    +uint32 packUnorm3x10_1x2(vec4 const & v)
    +
    +ivec4 unpackI3x10_1x2(uint32 const & p)
    - +
    - + + + + +
    typedef detail::tmat4x3<int, mediump> mediump_imat4x3GLM_FUNC_DECL uint16 glm::packSnorm1x16 (float v)
    -

    Medium-precision signed integer 4x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 152 of file matrix_integer.hpp.

    +

    First, converts the normalized floating-point value v into 16-bit integer value.

    +

    Then, the results are packed into the returned 16-bit unsigned integer.

    +

    The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 32767.0)

    +
    See also
    GLM_GTC_packing
    +
    +uint32 packSnorm2x16(vec2 const & v)
    +
    +uint64 packSnorm4x16(vec4 const & v)
    +
    +GLSL packSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat4x4<int, mediump> mediump_imat4x4GLM_FUNC_DECL uint8 glm::packSnorm1x8 (float s)
    -

    Medium-precision signed integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 156 of file matrix_integer.hpp.

    +

    First, converts the normalized floating-point value v into 8-bit integer value.

    +

    Then, the results are packed into the returned 8-bit unsigned integer.

    +

    The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 127.0)

    +
    See also
    GLM_GTC_packing
    +
    +uint16 packSnorm2x8(vec2 const & v)
    +
    +uint32 packSnorm4x8(vec4 const & v)
    +
    +GLSL packSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat2x2<uint, mediump> mediump_umat2GLM_FUNC_DECL uint16 glm::packSnorm2x8 (vec2 const & v)
    -

    Medium-precision unsigned integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 260 of file matrix_integer.hpp.

    +

    First, converts each component of the normalized floating-point value v into 8-bit integer values.

    +

    Then, the results are packed into the returned 16-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 127.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint8 packSnorm1x8(float const & v)
    +
    +uint32 packSnorm4x8(vec4 const & v)
    +
    +GLSL packSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat2x2<uint, mediump> mediump_umat2x2GLM_FUNC_DECL uint32 glm::packSnorm3x10_1x2 (vec4 const & v)
    -

    Medium-precision unsigned integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 273 of file matrix_integer.hpp.

    +

    First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.

    +

    Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0)

    +

    The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +vec4 unpackSnorm3x10_1x2(uint32 const & p)
    +
    +uint32 packUnorm3x10_1x2(vec4 const & v)
    +
    +uint32 packU3x10_1x2(uvec4 const & v)
    +
    +uint32 packI3x10_1x2(ivec4 const & v)
    - +
    - + + + + +
    typedef detail::tmat2x3<uint, mediump> mediump_umat2x3GLM_FUNC_DECL uint64 glm::packSnorm4x16 (vec4 const & v)
    -

    Medium-precision unsigned integer 2x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 277 of file matrix_integer.hpp.

    +

    First, converts each component of the normalized floating-point value v into 16-bit integer values.

    +

    Then, the results are packed into the returned 64-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 32767.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint16 packSnorm1x16(float const & v)
    +
    +uint32 packSnorm2x16(vec2 const & v)
    +
    +GLSL packSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat2x4<uint, mediump> mediump_umat2x4GLM_FUNC_DECL uint32 glm::packU3x10_1x2 (uvec4 const & v)
    -

    Medium-precision unsigned integer 2x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 281 of file matrix_integer.hpp.

    +

    Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.

    +

    The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint32 packI3x10_1x2(ivec4 const & v)
    +
    +uint32 packSnorm3x10_1x2(vec4 const & v)
    +
    +uint32 packUnorm3x10_1x2(vec4 const & v)
    +
    +ivec4 unpackU3x10_1x2(uint32 const & p)
    - +
    - + + + + +
    typedef detail::tmat3x3<uint, mediump> mediump_umat3GLM_FUNC_DECL uint16 glm::packUnorm1x16 (float v)
    -

    Medium-precision unsigned integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 264 of file matrix_integer.hpp.

    +

    First, converts the normalized floating-point value v into a 16-bit integer value.

    +

    Then, the results are packed into the returned 16-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packUnorm1x16: round(clamp(c, 0, +1) * 65535.0)

    +
    See also
    GLM_GTC_packing
    +
    +uint16 packSnorm1x16(float const & v)
    +
    +uint64 packSnorm4x16(vec4 const & v)
    +
    +GLSL packUnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat3x2<uint, mediump> mediump_umat3x2GLM_FUNC_DECL uint8 glm::packUnorm1x8 (float v)
    -

    Medium-precision unsigned integer 3x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 285 of file matrix_integer.hpp.

    +

    First, converts the normalized floating-point value v into a 8-bit integer value.

    +

    Then, the results are packed into the returned 8-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packUnorm1x8: round(clamp(c, 0, +1) * 255.0)

    +
    See also
    GLM_GTC_packing
    +
    +uint16 packUnorm2x8(vec2 const & v)
    +
    +uint32 packUnorm4x8(vec4 const & v)
    +
    +GLSL packUnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat3x3<uint, mediump> mediump_umat3x3GLM_FUNC_DECL uint16 glm::packUnorm2x8 (vec2 const & v)
    -

    Medium-precision unsigned integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 289 of file matrix_integer.hpp.

    +

    First, converts each component of the normalized floating-point value v into 8-bit integer values.

    +

    Then, the results are packed into the returned 16-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packUnorm2x8: round(clamp(c, 0, +1) * 255.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint8 packUnorm1x8(float const & v)
    +
    +uint32 packUnorm4x8(vec4 const & v)
    +
    +GLSL packUnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat3x4<uint, mediump> mediump_umat3x4GLM_FUNC_DECL uint32 glm::packUnorm3x10_1x2 (vec4 const & v)
    -

    Medium-precision unsigned integer 3x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 293 of file matrix_integer.hpp.

    +

    First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.

    +

    Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. Then, the results are packed into the returned 32-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0)

    +

    The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +vec4 unpackUnorm3x10_1x2(uint32 const & p)
    +
    +uint32 packUnorm3x10_1x2(vec4 const & v)
    +
    +uint32 packU3x10_1x2(uvec4 const & v)
    +
    +uint32 packI3x10_1x2(ivec4 const & v)
    - +
    - + + + + +
    typedef detail::tmat4x4<uint, mediump> mediump_umat4GLM_FUNC_DECL uint64 glm::packUnorm4x16 (vec4 const & v)
    -

    Medium-precision unsigned integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 268 of file matrix_integer.hpp.

    +

    First, converts each component of the normalized floating-point value v into 16-bit integer values.

    +

    Then, the results are packed into the returned 64-bit unsigned integer.

    +

    The conversion for component c of v to fixed point is done as follows: packUnorm4x16: round(clamp(c, 0, +1) * 65535.0)

    +

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint16 packUnorm1x16(float const & v)
    +
    +uint32 packUnorm2x16(vec2 const & v)
    +
    +GLSL packUnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat4x2<uint, mediump> mediump_umat4x2GLM_FUNC_DECL vec3 glm::unpackF2x11_1x10 (uint32 p)
    -

    Medium-precision unsigned integer 4x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 297 of file matrix_integer.hpp.

    +

    First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .

    +

    Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint32 packF2x11_1x10(vec3 const & v)
    - +
    - + + + + +
    typedef detail::tmat4x3<uint, mediump> mediump_umat4x3GLM_FUNC_DECL float glm::unpackHalf1x16 (uint16 v)
    -

    Medium-precision unsigned integer 4x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 301 of file matrix_integer.hpp.

    +

    Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values.

    +
    See also
    GLM_GTC_packing
    +
    +vec2 unpackHalf2x16(uint32 const & v)
    +
    +vec4 unpackHalf4x16(uint64 const & v)
    +
    +GLSL unpackHalf2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef detail::tmat4x4<uint, mediump> mediump_umat4x4GLM_FUNC_DECL vec4 glm::unpackHalf4x16 (uint64 p)
    -

    Medium-precision unsigned integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 305 of file matrix_integer.hpp.

    +

    Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.

    +

    The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.

    +
    See also
    GLM_GTC_packing
    +
    +float unpackHalf1x16(uint16 const & v)
    +
    +vec2 unpackHalf2x16(uint32 const & v)
    +
    +GLSL unpackHalf2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef mediump_umat2 umat2GLM_FUNC_DECL ivec4 glm::unpackI3x10_1x2 (uint32 p)
    -

    Unsigned integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 464 of file matrix_integer.hpp.

    +

    Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint32 packU3x10_1x2(uvec4 const & v)
    +
    +vec4 unpackSnorm3x10_1x2(uint32 const & p);
    +
    +uvec4 unpackI3x10_1x2(uint32 const & p);
    - +
    - + + + + +
    typedef mediump_umat2x2 umat2x2GLM_FUNC_DECL float glm::unpackSnorm1x16 (uint16 p)
    -

    Unsigned integer 2x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 476 of file matrix_integer.hpp.

    +

    First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned scalar.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x16: clamp(f / 32767.0, -1, +1)

    +
    See also
    GLM_GTC_packing
    +
    +vec2 unpackSnorm2x16(uint32 p)
    +
    +vec4 unpackSnorm4x16(uint64 p)
    +
    +GLSL unpackSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef mediump_umat2x3 umat2x3GLM_FUNC_DECL float glm::unpackSnorm1x8 (uint8 p)
    -

    Unsigned integer 2x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 480 of file matrix_integer.hpp.

    +

    First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.

    +

    Then, the value is converted to a normalized floating-point value to generate the returned scalar.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x8: clamp(f / 127.0, -1, +1)

    +
    See also
    GLM_GTC_packing
    +
    +vec2 unpackSnorm2x8(uint16 p)
    +
    +vec4 unpackSnorm4x8(uint32 p)
    +
    +GLSL unpackSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef mediump_umat2x4 umat2x4GLM_FUNC_DECL vec2 glm::unpackSnorm2x8 (uint16 p)
    -

    Unsigned integer 2x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 484 of file matrix_integer.hpp.

    +

    First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x8: clamp(f / 127.0, -1, +1)

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +float unpackSnorm1x8(uint8 p)
    +
    +vec4 unpackSnorm4x8(uint32 p)
    +
    +GLSL unpackSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef mediump_umat3 umat3GLM_FUNC_DECL vec4 glm::unpackSnorm3x10_1x2 (uint32 p)
    -

    Unsigned integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 468 of file matrix_integer.hpp.

    +

    First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint32 packSnorm3x10_1x2(vec4 const & v)
    +
    +vec4 unpackUnorm3x10_1x2(uint32 const & p))
    +
    +uvec4 unpackI3x10_1x2(uint32 const & p)
    +
    +uvec4 unpackU3x10_1x2(uint32 const & p)
    - +
    - + + + + +
    typedef mediump_umat3x2 umat3x2GLM_FUNC_DECL vec4 glm::unpackSnorm4x16 (uint64 const & p)
    -

    Unsigned integer 3x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 488 of file matrix_integer.hpp.

    +

    First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x16: clamp(f / 32767.0, -1, +1)

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +float unpackSnorm1x16(uint16 p)
    +
    +vec2 unpackSnorm2x16(uint32 p)
    +
    +GLSL unpackSnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef mediump_umat3x3 umat3x3GLM_FUNC_DECL uvec4 glm::unpackU3x10_1x2 (uint32 p)
    -

    Unsigned integer 3x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 492 of file matrix_integer.hpp.

    +

    Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint32 packU3x10_1x2(uvec4 const & v)
    +
    +vec4 unpackSnorm3x10_1x2(uint32 const & p);
    +
    +uvec4 unpackI3x10_1x2(uint32 const & p);
    - +
    - + + + + +
    typedef mediump_umat3x4 umat3x4GLM_FUNC_DECL float glm::unpackUnorm1x16 (uint16 p)
    -

    Unsigned integer 3x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 496 of file matrix_integer.hpp.

    +

    First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.

    +

    Then, the value is converted to a normalized floating-point value to generate the returned scalar.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm1x16: f / 65535.0

    +
    See also
    GLM_GTC_packing
    +
    +vec2 unpackUnorm2x16(uint32 p)
    +
    +vec4 unpackUnorm4x16(uint64 p)
    +
    +GLSL unpackUnorm2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef mediump_umat4 umat4GLM_FUNC_DECL float glm::unpackUnorm1x8 (uint8 p)
    -

    Unsigned integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 472 of file matrix_integer.hpp.

    +

    Convert a single 8-bit integer to a normalized floating-point value.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

    +
    See also
    GLM_GTC_packing
    +
    +vec2 unpackUnorm2x8(uint16 p)
    +
    +vec4 unpackUnorm4x8(uint32 p)
    +
    +GLSL unpackUnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef mediump_umat4x2 umat4x2GLM_FUNC_DECL vec2 glm::unpackUnorm2x8 (uint16 p)
    -

    Unsigned integer 4x2 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 500 of file matrix_integer.hpp.

    +

    First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +float unpackUnorm1x8(uint8 v)
    +
    +vec4 unpackUnorm4x8(uint32 p)
    +
    +GLSL unpackUnorm4x8 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - +
    - + + + + +
    typedef mediump_umat4x3 umat4x3GLM_FUNC_DECL vec4 glm::unpackUnorm3x10_1x2 (uint32 p)
    -

    Unsigned integer 4x3 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 504 of file matrix_integer.hpp.

    +

    First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +uint32 packSnorm3x10_1x2(vec4 const & v)
    +
    +vec4 unpackInorm3x10_1x2(uint32 const & p))
    +
    +uvec4 unpackI3x10_1x2(uint32 const & p)
    +
    +uvec4 unpackU3x10_1x2(uint32 const & p)
    - +
    - + + + + +
    typedef mediump_umat4x4 umat4x4GLM_FUNC_DECL vec4 glm::unpackUnorm4x16 (uint64 p)
    -

    Unsigned integer 4x4 matrix.

    -
    See Also
    GLM_GTC_matrix_integer
    - -

    Definition at line 508 of file matrix_integer.hpp.

    +

    First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.

    +

    Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

    +

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnormx4x16: f / 65535.0

    +

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    +
    See also
    GLM_GTC_packing
    +
    +float unpackUnorm1x16(uint16 p)
    +
    +vec2 unpackUnorm2x16(uint32 p)
    +
    +GLSL unpackUnorm2x16 man page
    +
    +GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    @@ -1953,7 +970,7 @@ mediump >  diff --git a/doc/api/a00175.html b/doc/api/a00175.html index 31dfc585..f26dd392 100644 --- a/doc/api/a00175.html +++ b/doc/api/a00175.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_matrix_inverse + +0.9.6: GLM_GTC_quaternion @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,83 +39,840 @@
    -
    GLM_GTC_matrix_inverse
    +
    GLM_GTC_quaternion
    - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_QUALIFIER genType affineInverse (genType const &m)
     
    template<typename genType >
    GLM_FUNC_QUALIFIER
    -genType::value_type 
    inverseTranspose (genType const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T angle (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > angleAxis (T const &angle, tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > axis (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > conjugate (tquat< T, P > const &q)
     
    template<typename T , precision P, template< typename, precision > class quatType>
    GLM_FUNC_DECL T dot (quatType< T, P > const &x, quatType< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > equal (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > eulerAngles (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > greaterThan (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > greaterThanEqual (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > inverse (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T length (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > lerp (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > lessThan (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > lessThanEqual (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > mat3_cast (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > mat4_cast (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > mix (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > normalize (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > notEqual (tquat< T, P > const &x, tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T pitch (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > quat_cast (tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > quat_cast (tmat4x4< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T roll (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > rotate (tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > slerp (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T yaw (tquat< T, P > const &x)
     

    Detailed Description

    -

    Defines additional matrix inverting functions.

    -

    <glm/gtc/matrix_inverse.hpp> need to be included to use these functionalities.

    +

    Defines a templated quaternion type and several quaternion operations.

    +

    <glm/gtc/quaternion.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + +
    GLM_FUNC_QUALIFIER genType glm::affineInverse GLM_FUNC_DECL T glm::angle (genType const & m)tquat< T, P > const & x)
    -

    Fast matrix inverse for affine matrix.

    -
    Parameters
    - - -
    mInput matrix to invert.
    -
    -
    -
    Template Parameters
    - - -
    genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
    -
    -
    -
    See Also
    GLM_GTC_matrix_inverse
    +

    Returns the quaternion rotation angle.

    +
    See also
    GLM_GTC_quaternion
    - +
    - + - - + + + + + + + + + + + + + + +
    GLM_FUNC_QUALIFIER genType::value_type glm::inverseTranspose GLM_FUNC_DECL tquat<T, P> glm::angleAxis (genType const & m)T const & angle,
    tvec3< T, P > const & axis 
    )
    +
    + +

    Build a quaternion from an angle and a normalized axis.

    +
    Parameters
    + + + +
    angleAngle expressed in radians.
    axisAxis of the quaternion, must be normalized.
    +
    +
    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::axis (tquat< T, P > const & x)
    -

    Compute the inverse transpose of a matrix.

    +

    Returns the q rotation axis.

    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::conjugate (tquat< T, P > const & q)
    +
    + +

    Returns the q conjugate.

    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::dot (quatType< T, P > const & x,
    quatType< T, P > const & y 
    )
    +
    + +

    Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...

    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<bool, P> glm::equal (tquat< T, P > const & x,
    tquat< T, P > const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x == y.

    +
    Template Parameters
    + + +
    quatTypeFloating-point quaternion types.
    +
    +
    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::eulerAngles (tquat< T, P > const & x)
    +
    + +

    Returns euler angles, yitch as x, yaw as y, roll as z.

    +

    The result is expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise.

    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<bool, P> glm::greaterThan (tquat< T, P > const & x,
    tquat< T, P > const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x > y.

    +
    Template Parameters
    + + +
    quatTypeFloating-point quaternion types.
    +
    +
    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<bool, P> glm::greaterThanEqual (tquat< T, P > const & x,
    tquat< T, P > const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x >= y.

    +
    Template Parameters
    + + +
    quatTypeFloating-point quaternion types.
    +
    +
    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::inverse (tquat< T, P > const & q)
    +
    + +

    Returns the q inverse.

    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::length (tquat< T, P > const & q)
    +
    + +

    Returns the length of the quaternion.

    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::lerp (tquat< T, P > const & x,
    tquat< T, P > const & y,
    T const & a 
    )
    +
    + +

    Linear interpolation of two quaternions.

    +

    The interpolation is oriented.

    Parameters
    - + + +
    mInput matrix to invert transpose.
    xA quaternion
    yA quaternion
    aInterpolation factor. The interpolation is defined in the range [0, 1].
    Template Parameters
    - +
    genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
    TValue type used to build the quaternion. Supported: half, float or double.
    -
    See Also
    GLM_GTC_matrix_inverse
    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<bool, P> glm::lessThan (tquat< T, P > const & x,
    tquat< T, P > const & y 
    )
    +
    + +

    Returns the component-wise comparison result of x < y.

    +
    Template Parameters
    + + +
    quatTypeFloating-point quaternion types.
    +
    +
    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<bool, P> glm::lessThanEqual (tquat< T, P > const & x,
    tquat< T, P > const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x <= y.

    +
    Template Parameters
    + + +
    quatTypeFloating-point quaternion types.
    +
    +
    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat3x3<T, P> glm::mat3_cast (tquat< T, P > const & x)
    +
    + +

    Converts a quaternion to a 3 * 3 matrix.

    +
    See also
    GLM_GTC_quaternion
    + +

    Referenced by glm::toMat3().

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::mat4_cast (tquat< T, P > const & x)
    +
    + +

    Converts a quaternion to a 4 * 4 matrix.

    +
    See also
    GLM_GTC_quaternion
    + +

    Referenced by glm::toMat4().

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::mix (tquat< T, P > const & x,
    tquat< T, P > const & y,
    T const & a 
    )
    +
    + +

    Spherical linear interpolation of two quaternions.

    +

    The interpolation is oriented and the rotation is performed at constant speed. For short path spherical linear interpolation, use the slerp function.

    +
    Parameters
    + + + + +
    xA quaternion
    yA quaternion
    aInterpolation factor. The interpolation is defined beyond the range [0, 1].
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the quaternion. Supported: half, float or double.
    +
    +
    +
    See also
    GLM_GTC_quaternion
    +
    +- slerp(tquat<T, P> const & x, tquat<T, P> const & y, T const & a)
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::normalize (tquat< T, P > const & q)
    +
    + +

    Returns the normalized quaternion.

    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<bool, P> glm::notEqual (tquat< T, P > const & x,
    tquat< T, P > const & y 
    )
    +
    + +

    Returns the component-wise comparison of result x != y.

    +
    Template Parameters
    + + +
    quatTypeFloating-point quaternion types.
    +
    +
    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::pitch (tquat< T, P > const & x)
    +
    + +

    Returns pitch value of euler angles expressed in radians.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::quat_cast (tmat3x3< T, P > const & x)
    +
    + +

    Converts a 3 * 3 matrix to a quaternion.

    +
    See also
    GLM_GTC_quaternion
    + +

    Referenced by glm::toQuat().

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::quat_cast (tmat4x4< T, P > const & x)
    +
    + +

    Converts a 4 * 4 matrix to a quaternion.

    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::roll (tquat< T, P > const & x)
    +
    + +

    Returns roll value of euler angles expressed in radians.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::rotate (tquat< T, P > const & q,
    T const & angle,
    tvec3< T, P > const & axis 
    )
    +
    + +

    Rotates a quaternion from a vector of 3 components axis and an angle.

    +
    Parameters
    + + + + +
    qSource orientation
    angleAngle expressed in radians.
    axisAxis of the rotation
    +
    +
    +
    See also
    GLM_GTC_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::slerp (tquat< T, P > const & x,
    tquat< T, P > const & y,
    T const & a 
    )
    +
    + +

    Spherical linear interpolation of two quaternions.

    +

    The interpolation always take the short path and the rotation is performed at constant speed.

    +
    Parameters
    + + + + +
    xA quaternion
    yA quaternion
    aInterpolation factor. The interpolation is defined beyond the range [0, 1].
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the quaternion. Supported: half, float or double.
    +
    +
    +
    See also
    GLM_GTC_quaternion
    +

    Spherical linear interpolation of two quaternions.

    + +

    Definition at line 72 of file compatibility.hpp.

    + +

    References glm::mix().

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::yaw (tquat< T, P > const & x)
    +
    + +

    Returns yaw value of euler angles expressed in radians.

    +
    See also
    GLM_GTX_quaternion
    @@ -126,7 +881,7 @@ genType::value_type  diff --git a/doc/api/a00176.html b/doc/api/a00176.html index c9e08f50..73ebefc7 100644 --- a/doc/api/a00176.html +++ b/doc/api/a00176.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_matrix_transform + +0.9.6: GLM_GTC_random @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,834 +39,125 @@
    -
    GLM_GTC_matrix_transform
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    frustum (T const &left, T const &right, T const &bottom, T const &top, T const &near, T const &far)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    infinitePerspective (T fovy, T aspect, T near)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    lookAt (detail::tvec3< T, P > const &eye, detail::tvec3< T, P > const &center, detail::tvec3< T, P > const &up)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    ortho (T const &left, T const &right, T const &bottom, T const &top, T const &zNear, T const &zFar)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    ortho (T const &left, T const &right, T const &bottom, T const &top)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    perspective (T const &fovy, T const &aspect, T const &near, T const &far)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    perspectiveFov (T const &fov, T const &width, T const &height, T const &near, T const &far)
     
    template<typename T , precision P, typename U >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    pickMatrix (detail::tvec2< T, P > const &center, detail::tvec2< T, P > const &delta, detail::tvec4< U, P > const &viewport)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > project (detail::tvec3< T, P > const &obj, detail::tmat4x4< T, P > const &model, detail::tmat4x4< T, P > const &proj, detail::tvec4< U, P > const &viewport)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    rotate (detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    scale (detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    translate (detail::tmat4x4< T, P > const &m, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    tweakedInfinitePerspective (T fovy, T aspect, T near)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > unProject (detail::tvec3< T, P > const &win, detail::tmat4x4< T, P > const &model, detail::tmat4x4< T, P > const &proj, detail::tvec4< U, P > const &viewport)
     
    template<typename T >
    GLM_FUNC_DECL tvec3< T, defaultp > ballRand (T Radius)
     
    template<typename T >
    GLM_FUNC_DECL tvec2< T, defaultp > circularRand (T Radius)
     
    template<typename T >
    GLM_FUNC_DECL tvec2< T, defaultp > diskRand (T Radius)
     
    template<typename genType >
    GLM_FUNC_DECL genType gaussRand (genType Mean, genType Deviation)
     
    template<typename genTYpe >
    GLM_FUNC_DECL genTYpe linearRand (genTYpe Min, genTYpe Max)
     
    template<typename T >
    GLM_FUNC_DECL tvec3< T, defaultp > sphericalRand (T Radius)
     

    Detailed Description

    -

    Defines functions that generate common transformation matrices.

    -

    The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.

    -

    <glm/gtc/matrix_transform.hpp> need to be included to use these functionalities.

    +

    Generate random number from various distribution methods.

    +

    <glm/gtc/random.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::frustum (T const & left,
    T const & right,
    T const & bottom,
    T const & top,
    T const & near,
    T const & far 
    )
    -
    - -

    Creates a frustum matrix.

    -
    Parameters
    - - - - - - - -
    left
    right
    bottom
    top
    near
    far
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    - -
    -
    - -
    -
    - - - + - - - - + - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::infinitePerspective GLM_FUNC_DECL tvec3<T, defaultp> glm::ballRand ( fovy,
    Radius) aspect,
    near 
    )
    -

    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite.

    +

    Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius.

    Parameters
    - - - +
    fovyExpressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    aspect
    near
    Radius
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    +
    See also
    GLM_GTC_random
    - +
    - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::lookAt (detail::tvec3< T, P > const & eye,
    detail::tvec3< T, P > const & center,
    detail::tvec3< T, P > const & up 
    )
    -
    - -

    Build a look at view matrix.

    -
    Parameters
    - - - - -
    eyePosition of the camera
    centerPosition where the camera is looking at
    upNormalized up vector, how the camera is oriented. Typically (0, 0, 1)
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    -
    -- frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal)
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, defaultp> glm::ortho (T const & left,
    T const & right,
    T const & bottom,
    T const & top,
    T const & zNear,
    T const & zFar 
    )
    -
    - -

    Creates a matrix for an orthographic parallel viewing volume.

    -
    Parameters
    - - - - - - - -
    left
    right
    bottom
    top
    zNear
    zFar
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    -
    -- glm::ortho(T const & left, T const & right, T const & bottom, T const & top)
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, defaultp> glm::ortho (T const & left,
    T const & right,
    T const & bottom,
    T const & top 
    )
    -
    - -

    Creates a matrix for projecting two-dimensional coordinates onto the screen.

    -
    Parameters
    - - - - - -
    left
    right
    bottom
    top
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    -
    -- glm::ortho(T const & left, T const & right, T const & bottom, T const & top, T const & zNear, T const & zFar)
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::perspective (T const & fovy,
    T const & aspect,
    T const & near,
    T const & far 
    )
    -
    - -

    Creates a matrix for a symetric perspective-view frustum.

    -
    Parameters
    - - - - - -
    fovyExpressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    aspect
    near
    far
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::perspectiveFov (T const & fov,
    T const & width,
    T const & height,
    T const & near,
    T const & far 
    )
    -
    - -

    Builds a perspective projection matrix based on a field of view.

    -
    Parameters
    - - - - - - -
    fovExpressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    width
    height
    near
    far
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::pickMatrix (detail::tvec2< T, P > const & center,
    detail::tvec2< T, P > const & delta,
    detail::tvec4< U, P > const & viewport 
    )
    -
    - -

    Define a picking region.

    -
    Parameters
    - - - - -
    center
    delta
    viewport
    -
    -
    -
    Template Parameters
    - - - -
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tvec3<T, P> glm::project (detail::tvec3< T, P > const & obj,
    detail::tmat4x4< T, P > const & model,
    detail::tmat4x4< T, P > const & proj,
    detail::tvec4< U, P > const & viewport 
    )
    -
    - -

    Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.

    -
    Parameters
    - - - - - -
    obj
    model
    proj
    viewport
    -
    -
    -
    Template Parameters
    - - - -
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::rotate (detail::tmat4x4< T, P > const & m,
    T const & angle,
    detail::tvec3< T, P > const & axis 
    )
    -
    - -

    Builds a rotation 4 * 4 matrix created from an axis vector and an angle.

    -
    Parameters
    - - - - -
    mInput matrix multiplied by this rotation matrix.
    angleRotation angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisRotation axis, recommanded to be normalized.
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Supported: half, float or double.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    -
    -GLM_GTX_transform
    -
    -- rotate(T angle, T x, T y, T z)
    -
    -- rotate(detail::tmat4x4<T, P> const & m, T angle, T x, T y, T z)
    -
    -- rotate(T angle, detail::tvec3<T, P> const & v)
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::scale (detail::tmat4x4< T, P > const & m,
    detail::tvec3< T, P > const & v 
    )
    -
    - -

    Builds a scale 4 * 4 matrix created from 3 scalars.

    -
    Parameters
    - - - -
    mInput matrix multiplied by this scale matrix.
    vRatio of scaling for each axis.
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    -
    -GLM_GTX_transform
    -
    -- scale(T x, T y, T z) scale(T const & x, T const & y, T const & z)
    -
    -- scale(detail::tmat4x4<T, P> const & m, T x, T y, T z)
    -
    -- scale(detail::tvec3<T, P> const & v)
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::translate (detail::tmat4x4< T, P > const & m,
    detail::tvec3< T, P > const & v 
    )
    -
    - -

    Builds a translation 4 * 4 matrix created from a vector of 3 components.

    -
    Parameters
    - - - -
    mInput matrix multiplied by this translation matrix.
    vCoordinates of a translation vector.
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    * #include <glm/glm.hpp>
    -
    * #include <glm/gtc/matrix_transform.hpp>
    -
    * ...
    - -
    * // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f
    -
    * // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f
    -
    * // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f
    -
    * // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f
    -
    *
    -
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    -
    -GLM_GTX_transform
    -
    -- translate(T x, T y, T z)
    -
    -- translate(detail::tmat4x4<T, P> const & m, T x, T y, T z)
    -
    -- translate(detail::tvec3<T, P> const & v)
    - -
    -
    - -
    -
    - - - + - - - - + - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::tweakedInfinitePerspective GLM_FUNC_DECL tvec2<T, defaultp> glm::circularRand ( fovy,
    Radius) aspect,
    near 
    )
    -

    Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.

    +

    Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius.

    Parameters
    - - - +
    fovyExpressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    aspect
    near
    Radius
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See Also
    GLM_GTC_matrix_transform
    +
    See also
    GLM_GTC_random
    - +
    - + - - + + + + +
    GLM_FUNC_DECL detail::tvec3<T, P> glm::unProject GLM_FUNC_DECL tvec2<T, defaultp> glm::diskRand (detail::tvec3< T, P > const & win, Radius)
    +
    + +

    Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius.

    +
    Parameters
    + + +
    Radius
    +
    +
    +
    See also
    GLM_GTC_random
    + +
    +
    + +
    +
    + + + + + + - - - - - - - - - - - - - - + + @@ -878,24 +167,82 @@ Functions
    GLM_FUNC_DECL genType glm::gaussRand (genType Mean,
    detail::tmat4x4< T, P > const & model,
    detail::tmat4x4< T, P > const & proj,
    detail::tvec4< U, P > const & viewport genType Deviation 
    -

    Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.

    +

    Generate random numbers in the interval [Min, Max], according a gaussian distribution.

    Parameters
    - - - - + + +
    win
    model
    proj
    viewport
    Mean
    Deviation
    +
    +
    +
    See also
    GLM_GTC_random
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genTYpe glm::linearRand (genTYpe Min,
    genTYpe Max 
    )
    +
    + +

    Generate random numbers in the interval [Min, Max], according a linear distribution.

    +
    Parameters
    + + +
    Min
    Max
    Template Parameters
    - - +
    TNative type used for the computation. Currently supported: half (not recommanded), float or double.
    UCurrently supported: Floating-point types and integer types.
    genTypeValue type. Currently supported: half (not recommanded), float or double scalars and vectors.
    -
    See Also
    GLM_GTC_matrix_transform
    +
    See also
    GLM_GTC_random
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, defaultp> glm::sphericalRand (Radius)
    +
    + +

    Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius.

    +
    Parameters
    + + +
    Radius
    +
    +
    +
    See also
    GLM_GTC_random
    @@ -904,7 +251,7 @@ Functions diff --git a/doc/api/a00177.html b/doc/api/a00177.html index 38543e5a..53e8d5eb 100644 --- a/doc/api/a00177.html +++ b/doc/api/a00177.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_noise + +0.9.6: GLM_GTC_reciprocal @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,89 +39,281 @@
    -
    +
    GLM_GTC_reciprocal
    - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    perlin (vecType< T, P > const &p)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    perlin (vecType< T, P > const &p, vecType< T, P > const &rep)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    simplex (vecType< T, P > const &p)
     
    template<typename genType >
    GLM_FUNC_DECL genType acot (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acoth (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsc (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsch (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asec (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asech (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType cot (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType coth (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType csc (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType csch (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sec (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sech (genType const &angle)
     

    Detailed Description

    -

    Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf <glm/gtc/noise.hpp> need to be included to use these functionalities.

    +

    Define secant, cosecant and cotangent functions.

    +

    <glm/gtc/reciprocal.hpp> need to be included to use these features.

    Function Documentation

    - +
    - + - - + +
    T glm::perlin GLM_FUNC_DECL genType glm::acot (vecType< T, P > const & p)genType const & x)
    -

    Classic perlin noise.

    -
    See Also
    GLM_GTC_noise
    +

    Inverse cotangent function.

    +
    See also
    GLM_GTC_reciprocal
    - +
    - + - - - - - - - - - - - - - - -
    T glm::perlin GLM_FUNC_DECL genType glm::acoth (vecType< T, P > const & p,
    vecType< T, P > const & rep 
    )
    -
    - -

    Periodic perlin noise.

    -
    See Also
    GLM_GTC_noise
    - -
    -
    - -
    -
    - - - - - - + +
    T glm::simplex (vecType< T, P > const & p)genType const & x)
    -

    Simplex noise.

    -
    See Also
    GLM_GTC_noise
    +

    Inverse cotangent hyperbolic function.

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::acsc (genType const & x)
    +
    + +

    Inverse cosecant function.

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::acsch (genType const & x)
    +
    + +

    Inverse cosecant hyperbolic function.

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::asec (genType const & x)
    +
    + +

    Inverse secant function.

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::asech (genType const & x)
    +
    + +

    Inverse secant hyperbolic function.

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::cot (genType const & angle)
    +
    + +

    Cotangent function.

    +

    adjacent / opposite or 1 / tan(x)

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::coth (genType const & angle)
    +
    + +

    Cotangent hyperbolic function.

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::csc (genType const & angle)
    +
    + +

    Cosecant function.

    +

    hypotenuse / opposite or 1 / sin(x)

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::csch (genType const & angle)
    +
    + +

    Cosecant hyperbolic function.

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::sec (genType const & angle)
    +
    + +

    Secant function.

    +

    hypotenuse / adjacent or 1 / cos(x)

    +
    See also
    GLM_GTC_reciprocal
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::sech (genType const & angle)
    +
    + +

    Secant hyperbolic function.

    +
    See also
    GLM_GTC_reciprocal
    @@ -132,7 +322,7 @@ Functions diff --git a/doc/api/a00178.html b/doc/api/a00178.html index ef31c709..eb9d2072 100644 --- a/doc/api/a00178.html +++ b/doc/api/a00178.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_packing + +0.9.6: GLM_GTC_round @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,929 +39,556 @@
    -
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    GLM_FUNC_DECL uint32 packF2x11_1x10 (vec3 const &v)
     
    GLM_FUNC_DECL uint16 packHalf1x16 (float const &v)
     
    GLM_FUNC_DECL uint64 packHalf4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packI3x10_1x2 (ivec4 const &v)
     
    GLM_FUNC_DECL uint16 packSnorm1x16 (float const &v)
     
    GLM_FUNC_DECL uint8 packSnorm1x8 (float const &s)
     
    GLM_FUNC_DECL uint16 packSnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packSnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packSnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL uint32 packU3x10_1x2 (uvec4 const &v)
     
    GLM_FUNC_DECL uint16 packUnorm1x16 (float const &v)
     
    GLM_FUNC_DECL uint8 packUnorm1x8 (float const &v)
     
    GLM_FUNC_DECL uint16 packUnorm2x8 (vec2 const &v)
     
    GLM_FUNC_DECL uint32 packUnorm3x10_1x2 (vec4 const &v)
     
    GLM_FUNC_DECL uint64 packUnorm4x16 (vec4 const &v)
     
    GLM_FUNC_DECL vec3 unpackF2x11_1x10 (uint32 const &p)
     
    GLM_FUNC_DECL float unpackHalf1x16 (uint16 const &v)
     
    GLM_FUNC_DECL vec4 unpackHalf4x16 (uint64 const &p)
     
    GLM_FUNC_DECL ivec4 unpackI3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL float unpackSnorm1x16 (uint16 const &p)
     
    GLM_FUNC_DECL float unpackSnorm1x8 (uint8 const &p)
     
    GLM_FUNC_DECL vec2 unpackSnorm2x8 (uint16 const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL vec4 unpackSnorm4x16 (uint64 const &p)
     
    GLM_FUNC_DECL uvec4 unpackU3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL float unpackUnorm1x16 (uint16 const &p)
     
    GLM_FUNC_DECL float unpackUnorm1x8 (uint8 const &p)
     
    GLM_FUNC_DECL vec2 unpackUnorm2x8 (uint16 const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2 (uint32 const &p)
     
    GLM_FUNC_DECL vec4 unpackUnorm4x16 (uint64 const &p)
     
    template<typename genType >
    GLM_FUNC_DECL genType ceilMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > ceilMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType ceilPowerOfTwo (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > ceilPowerOfTwo (vecType< T, P > const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType floorMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > floorMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType floorPowerOfTwo (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > floorPowerOfTwo (vecType< T, P > const &value)
     
    template<typename genIUType >
    GLM_FUNC_DECL bool isMultiple (genIUType Value, genIUType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isMultiple (vecType< T, P > const &Value, T Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isMultiple (vecType< T, P > const &Value, vecType< T, P > const &Multiple)
     
    template<typename genIUType >
    GLM_FUNC_DECL bool isPowerOfTwo (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isPowerOfTwo (vecType< T, P > const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType roundMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > roundMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType roundPowerOfTwo (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > roundPowerOfTwo (vecType< T, P > const &value)
     

    Detailed Description

    -

    This extension provides a set of function to convert vertors to packed formats.

    -

    <glm/gtc/packing.hpp> need to be included to use these features.

    +

    rounding value to specific boundings

    +

    <glm/gtc/round.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint32 glm::packF2x11_1x10 GLM_FUNC_DECL genType glm::ceilMultiple (vec3 const & v)genType Source,
    genType Multiple 
    )
    +
    + +

    Higher multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTC_round
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::ceilMultiple (vecType< T, P > const & Source,
    vecType< T, P > const & Multiple 
    )
    +
    + +

    Higher multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTC_round
    + +
    +
    + +
    +
    + + + + + +
    GLM_FUNC_DECL genIUType glm::ceilPowerOfTwo (genIUType Value)
    -

    First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.

    -

    Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -vec3 unpackF2x11_1x10(uint32 const & p)
    +

    Return the power of two number which value is just higher the input value, round up to a power of two.

    +
    See also
    GLM_GTC_round
    - +
    - + - - + +
    GLM_FUNC_DECL uint16 glm::packHalf1x16 GLM_FUNC_DECL vecType<T, P> glm::ceilPowerOfTwo (float const & v)vecType< T, P > const & value)
    -

    Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer.

    -
    See Also
    GLM_GTC_packing
    -
    -uint32 packHalf2x16(vec2 const & v)
    -
    -uint64 packHalf4x16(vec4 const & v)
    -
    -GLSL packHalf2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +

    Return the power of two number which value is just higher the input value, round up to a power of two.

    +
    See also
    GLM_GTC_round
    - +
    - + - - + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint64 glm::packHalf4x16 GLM_FUNC_DECL genType glm::floorMultiple (vec4 const & v)genType Source,
    genType Multiple 
    )
    +
    + +

    Lower multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTC_round
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::floorMultiple (vecType< T, P > const & Source,
    vecType< T, P > const & Multiple 
    )
    +
    + +

    Lower multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTC_round
    + +
    +
    + +
    +
    + + + + + +
    GLM_FUNC_DECL genIUType glm::floorPowerOfTwo (genIUType Value)
    -

    Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer.

    -

    The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint16 packHalf1x16(float const & v)
    -
    -uint32 packHalf2x16(vec2 const & v)
    -
    -GLSL packHalf2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +

    Return the power of two number which value is just lower the input value, round down to a power of two.

    +
    See also
    GLM_GTC_round
    - +
    - + - - + +
    GLM_FUNC_DECL uint32 glm::packI3x10_1x2 GLM_FUNC_DECL vecType<T, P> glm::floorPowerOfTwo (ivec4 const & v)vecType< T, P > const & value)
    -

    Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.

    -

    The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint32 packI3x10_1x2(uvec4 const & v)
    -
    -uint32 packSnorm3x10_1x2(vec4 const & v)
    -
    -uint32 packUnorm3x10_1x2(vec4 const & v)
    -
    -ivec4 unpackI3x10_1x2(uint32 const & p)
    +

    Return the power of two number which value is just lower the input value, round down to a power of two.

    +
    See also
    GLM_GTC_round
    - +
    - + - - + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint16 glm::packSnorm1x16 GLM_FUNC_DECL bool glm::isMultiple (float const & v)genIUType Value,
    genIUType Multiple 
    )
    +
    + +

    Return true if the 'Value' is a multiple of 'Multiple'.

    +
    See also
    GLM_GTC_round
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<bool, P> glm::isMultiple (vecType< T, P > const & Value,
    Multiple 
    )
    +
    + +

    Return true if the 'Value' is a multiple of 'Multiple'.

    +
    See also
    GLM_GTC_round
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<bool, P> glm::isMultiple (vecType< T, P > const & Value,
    vecType< T, P > const & Multiple 
    )
    +
    + +

    Return true if the 'Value' is a multiple of 'Multiple'.

    +
    See also
    GLM_GTC_round
    + +
    +
    + +
    +
    + + + + + +
    GLM_FUNC_DECL bool glm::isPowerOfTwo (genIUType Value)
    -

    First, converts the normalized floating-point value v into 16-bit integer value.

    -

    Then, the results are packed into the returned 16-bit unsigned integer.

    -

    The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 32767.0)

    -
    See Also
    GLM_GTC_packing
    -
    -uint32 packSnorm2x16(vec2 const & v)
    -
    -uint64 packSnorm4x16(vec4 const & v)
    -
    -GLSL packSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +

    Return true if the value is a power of two number.

    +
    See also
    GLM_GTC_round
    - +
    - + - - + +
    GLM_FUNC_DECL uint8 glm::packSnorm1x8 GLM_FUNC_DECL vecType<bool, P> glm::isPowerOfTwo (float const & s)vecType< T, P > const & value)
    -

    First, converts the normalized floating-point value v into 8-bit integer value.

    -

    Then, the results are packed into the returned 8-bit unsigned integer.

    -

    The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 127.0)

    -
    See Also
    GLM_GTC_packing
    -
    -uint16 packSnorm2x8(vec2 const & v)
    -
    -uint32 packSnorm4x8(vec4 const & v)
    -
    -GLSL packSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +

    Return true if the value is a power of two number.

    +
    See also
    GLM_GTC_round
    - +
    - + - - + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint16 glm::packSnorm2x8 GLM_FUNC_DECL genType glm::roundMultiple (vec2 const & v)genType Source,
    genType Multiple 
    )
    +
    + +

    Lower multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTC_round
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::roundMultiple (vecType< T, P > const & Source,
    vecType< T, P > const & Multiple 
    )
    +
    + +

    Lower multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTC_round
    + +
    +
    + +
    +
    + + + + + +
    GLM_FUNC_DECL genIUType glm::roundPowerOfTwo (genIUType Value)
    -

    First, converts each component of the normalized floating-point value v into 8-bit integer values.

    -

    Then, the results are packed into the returned 16-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 127.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint8 packSnorm1x8(float const & v)
    -
    -uint32 packSnorm4x8(vec4 const & v)
    -
    -GLSL packSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +

    Return the power of two number which value is the closet to the input value.

    +
    See also
    GLM_GTC_round
    - +
    - + - - + +
    GLM_FUNC_DECL uint32 glm::packSnorm3x10_1x2 GLM_FUNC_DECL vecType<T, P> glm::roundPowerOfTwo (vec4 const & v)vecType< T, P > const & value)
    -

    First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.

    -

    Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0)

    -

    The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -vec4 unpackSnorm3x10_1x2(uint32 const & p)
    -
    -uint32 packUnorm3x10_1x2(vec4 const & v)
    -
    -uint32 packU3x10_1x2(uvec4 const & v)
    -
    -uint32 packI3x10_1x2(ivec4 const & v)
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint64 glm::packSnorm4x16 (vec4 const & v)
    -
    - -

    First, converts each component of the normalized floating-point value v into 16-bit integer values.

    -

    Then, the results are packed into the returned 64-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 32767.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint16 packSnorm1x16(float const & v)
    -
    -uint32 packSnorm2x16(vec2 const & v)
    -
    -GLSL packSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint32 glm::packU3x10_1x2 (uvec4 const & v)
    -
    - -

    Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.

    -

    The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint32 packI3x10_1x2(ivec4 const & v)
    -
    -uint32 packSnorm3x10_1x2(vec4 const & v)
    -
    -uint32 packUnorm3x10_1x2(vec4 const & v)
    -
    -ivec4 unpackU3x10_1x2(uint32 const & p)
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint16 glm::packUnorm1x16 (float const & v)
    -
    - -

    First, converts the normalized floating-point value v into a 16-bit integer value.

    -

    Then, the results are packed into the returned 16-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packUnorm1x16: round(clamp(c, 0, +1) * 65535.0)

    -
    See Also
    GLM_GTC_packing
    -
    -uint16 packSnorm1x16(float const & v)
    -
    -uint64 packSnorm4x16(vec4 const & v)
    -
    -GLSL packUnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint8 glm::packUnorm1x8 (float const & v)
    -
    - -

    First, converts the normalized floating-point value v into a 8-bit integer value.

    -

    Then, the results are packed into the returned 8-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packUnorm1x8: round(clamp(c, 0, +1) * 255.0)

    -
    See Also
    GLM_GTC_packing
    -
    -uint16 packUnorm2x8(vec2 const & v)
    -
    -uint32 packUnorm4x8(vec4 const & v)
    -
    -GLSL packUnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint16 glm::packUnorm2x8 (vec2 const & v)
    -
    - -

    First, converts each component of the normalized floating-point value v into 8-bit integer values.

    -

    Then, the results are packed into the returned 16-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packUnorm2x8: round(clamp(c, 0, +1) * 255.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint8 packUnorm1x8(float const & v)
    -
    -uint32 packUnorm4x8(vec4 const & v)
    -
    -GLSL packUnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint32 glm::packUnorm3x10_1x2 (vec4 const & v)
    -
    - -

    First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.

    -

    Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. Then, the results are packed into the returned 32-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0)

    -

    The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -vec4 unpackUnorm3x10_1x2(uint32 const & p)
    -
    -uint32 packUnorm3x10_1x2(vec4 const & v)
    -
    -uint32 packU3x10_1x2(uvec4 const & v)
    -
    -uint32 packI3x10_1x2(ivec4 const & v)
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uint64 glm::packUnorm4x16 (vec4 const & v)
    -
    - -

    First, converts each component of the normalized floating-point value v into 16-bit integer values.

    -

    Then, the results are packed into the returned 64-bit unsigned integer.

    -

    The conversion for component c of v to fixed point is done as follows: packUnorm4x16: round(clamp(c, 0, +1) * 65535.0)

    -

    The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint16 packUnorm1x16(float const & v)
    -
    -uint32 packUnorm2x16(vec2 const & v)
    -
    -GLSL packUnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec3 glm::unpackF2x11_1x10 (uint32 const & p)
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .

    -

    Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint32 packF2x11_1x10(vec3 const & v)
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL float glm::unpackHalf1x16 (uint16 const & v)
    -
    - -

    Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values.

    -
    See Also
    GLM_GTC_packing
    -
    -vec2 unpackHalf2x16(uint32 const & v)
    -
    -vec4 unpackHalf4x16(uint64 const & v)
    -
    -GLSL unpackHalf2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec4 glm::unpackHalf4x16 (uint64 const & p)
    -
    - -

    Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.

    -

    The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.

    -
    See Also
    GLM_GTC_packing
    -
    -float unpackHalf1x16(uint16 const & v)
    -
    -vec2 unpackHalf2x16(uint32 const & v)
    -
    -GLSL unpackHalf2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL ivec4 glm::unpackI3x10_1x2 (uint32 const & p)
    -
    - -

    Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint32 packU3x10_1x2(uvec4 const & v)
    -
    -vec4 unpackSnorm3x10_1x2(uint32 const & p);
    -
    -uvec4 unpackI3x10_1x2(uint32 const & p);
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL float glm::unpackSnorm1x16 (uint16 const & p)
    -
    - -

    First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned scalar.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x16: clamp(f / 32767.0, -1, +1)

    -
    See Also
    GLM_GTC_packing
    -
    -vec2 unpackSnorm2x16(uint32 p)
    -
    -vec4 unpackSnorm4x16(uint64 p)
    -
    -GLSL unpackSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL float glm::unpackSnorm1x8 (uint8 const & p)
    -
    - -

    First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.

    -

    Then, the value is converted to a normalized floating-point value to generate the returned scalar.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x8: clamp(f / 127.0, -1, +1)

    -
    See Also
    GLM_GTC_packing
    -
    -vec2 unpackSnorm2x8(uint16 p)
    -
    -vec4 unpackSnorm4x8(uint32 p)
    -
    -GLSL unpackSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec2 glm::unpackSnorm2x8 (uint16 const & p)
    -
    - -

    First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x8: clamp(f / 127.0, -1, +1)

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -float unpackSnorm1x8(uint8 p)
    -
    -vec4 unpackSnorm4x8(uint32 p)
    -
    -GLSL unpackSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec4 glm::unpackSnorm3x10_1x2 (uint32 const & p)
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint32 packSnorm3x10_1x2(vec4 const & v)
    -
    -vec4 unpackUnorm3x10_1x2(uint32 const & p))
    -
    -uvec4 unpackI3x10_1x2(uint32 const & p)
    -
    -uvec4 unpackU3x10_1x2(uint32 const & p)
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec4 glm::unpackSnorm4x16 (uint64 const & p)
    -
    - -

    First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x16: clamp(f / 32767.0, -1, +1)

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -float unpackSnorm1x16(uint16 p)
    -
    -vec2 unpackSnorm2x16(uint32 p)
    -
    -GLSL unpackSnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL uvec4 glm::unpackU3x10_1x2 (uint32 const & p)
    -
    - -

    Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint32 packU3x10_1x2(uvec4 const & v)
    -
    -vec4 unpackSnorm3x10_1x2(uint32 const & p);
    -
    -uvec4 unpackI3x10_1x2(uint32 const & p);
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL float glm::unpackUnorm1x16 (uint16 const & p)
    -
    - -

    First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.

    -

    Then, the value is converted to a normalized floating-point value to generate the returned scalar.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm1x16: f / 65535.0

    -
    See Also
    GLM_GTC_packing
    -
    -vec2 unpackUnorm2x16(uint32 p)
    -
    -vec4 unpackUnorm4x16(uint64 p)
    -
    -GLSL unpackUnorm2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL float glm::unpackUnorm1x8 (uint8 const & p)
    -
    - -

    Convert a single 8-bit integer to a normalized floating-point value.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

    -
    See Also
    GLM_GTC_packing
    -
    -vec2 unpackUnorm2x8(uint16 p)
    -
    -vec4 unpackUnorm4x8(uint32 p)
    -
    -GLSL unpackUnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec2 glm::unpackUnorm2x8 (uint16 const & p)
    -
    - -

    First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -float unpackUnorm1x8(uint8 v)
    -
    -vec4 unpackUnorm4x8(uint32 p)
    -
    -GLSL unpackUnorm4x8 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec4 glm::unpackUnorm3x10_1x2 (uint32 const & p)
    -
    - -

    First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -uint32 packSnorm3x10_1x2(vec4 const & v)
    -
    -vec4 unpackInorm3x10_1x2(uint32 const & p))
    -
    -uvec4 unpackI3x10_1x2(uint32 const & p)
    -
    -uvec4 unpackU3x10_1x2(uint32 const & p)
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL vec4 glm::unpackUnorm4x16 (uint64 const & p)
    -
    - -

    First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.

    -

    Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

    -

    The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnormx4x16: f / 65535.0

    -

    The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

    -
    See Also
    GLM_GTC_packing
    -
    -float unpackUnorm1x16(uint16 p)
    -
    -vec2 unpackUnorm2x16(uint32 p)
    -
    -GLSL unpackUnorm2x16 man page
    -
    -GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
    +

    Return the power of two number which value is the closet to the input value.

    +
    See also
    GLM_GTC_round
    @@ -972,7 +597,7 @@ float unpackUnorm1x16(uint16 p) diff --git a/doc/api/a00179.html b/doc/api/a00179.html index fc0f1180..aeb54528 100644 --- a/doc/api/a00179.html +++ b/doc/api/a00179.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_quaternion + +0.9.6: GLM_GTC_type_precision @@ -16,9 +16,9 @@ + @@ -26,863 +26,8781 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GLM_GTC_quaternion
    +
    GLM_GTC_type_precision
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Functions

    template<typename T , precision P>
    GLM_FUNC_DECL T angle (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > angleAxis (T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > axis (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > conjugate (detail::tquat< T, P > const &q)
     
    template<typename T , precision P, template< typename, precision > class quatType>
    GLM_FUNC_DECL T dot (quatType< T, P > const &x, quatType< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    equal (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec3< T, P > eulerAngles (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    greaterThan (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    greaterThanEqual (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > inverse (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T length (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > lerp (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    lessThan (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    lessThanEqual (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat3x3
    -< T, P > 
    mat3_cast (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tmat4x4
    -< T, P > 
    mat4_cast (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > mix (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > normalize (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tvec4
    -< bool, P > 
    notEqual (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T pitch (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > quat_cast (detail::tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > quat_cast (detail::tmat4x4< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T roll (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > rotate (detail::tquat< T, P > const &q, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL detail::tquat< T, P > slerp (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T yaw (detail::tquat< T, P > const &x)
     

    +Typedefs

    typedef highp_float32_t f32
     
    typedef f32mat2x2 f32mat2
     
    typedef highp_f32mat2x2 f32mat2x2
     
    typedef highp_f32mat2x3 f32mat2x3
     
    typedef highp_f32mat2x4 f32mat2x4
     
    typedef f32mat3x3 f32mat3
     
    typedef highp_f32mat3x2 f32mat3x2
     
    typedef highp_f32mat3x3 f32mat3x3
     
    typedef highp_f32mat3x4 f32mat3x4
     
    typedef f32mat4x4 f32mat4
     
    typedef highp_f32mat4x2 f32mat4x2
     
    typedef highp_f32mat4x3 f32mat4x3
     
    typedef highp_f32mat4x4 f32mat4x4
     
    typedef highp_f32quat f32quat
     
    typedef highp_f32vec1 f32vec1
     
    typedef highp_f32vec2 f32vec2
     
    typedef highp_f32vec3 f32vec3
     
    typedef highp_f32vec4 f32vec4
     
    typedef highp_float64_t f64
     
    typedef f64mat2x2 f64mat2
     
    typedef highp_f64mat2x2 f64mat2x2
     
    typedef highp_f64mat2x3 f64mat2x3
     
    typedef highp_f64mat2x4 f64mat2x4
     
    typedef f64mat3x3 f64mat3
     
    typedef highp_f64mat3x2 f64mat3x2
     
    typedef highp_f64mat3x3 f64mat3x3
     
    typedef highp_f64mat3x4 f64mat3x4
     
    typedef f64mat4x4 f64mat4
     
    typedef highp_f64mat4x2 f64mat4x2
     
    typedef highp_f64mat4x3 f64mat4x3
     
    typedef highp_f64mat4x4 f64mat4x4
     
    typedef highp_f64quat f64quat
     
    typedef highp_f64vec1 f64vec1
     
    typedef highp_f64vec2 f64vec2
     
    typedef highp_f64vec3 f64vec3
     
    typedef highp_f64vec4 f64vec4
     
    typedef float float32
     
    typedef highp_float32_t float32_t
     
    typedef double float64
     
    typedef highp_float64_t float64_t
     
    typedef fmat2x2 fmat2
     
    typedef highp_f32mat2x2 fmat2x2
     
    typedef highp_f32mat2x3 fmat2x3
     
    typedef highp_f32mat2x4 fmat2x4
     
    typedef fmat3x3 fmat3
     
    typedef highp_f32mat3x2 fmat3x2
     
    typedef highp_f32mat3x3 fmat3x3
     
    typedef highp_f32mat3x4 fmat3x4
     
    typedef fmat4x4 fmat4
     
    typedef highp_f32mat4x2 fmat4x2
     
    typedef highp_f32mat4x3 fmat4x3
     
    typedef highp_f32mat4x4 fmat4x4
     
    typedef quat fquat
     
    typedef highp_f32vec1 fvec1
     
    typedef highp_f32vec2 fvec2
     
    typedef highp_f32vec3 fvec3
     
    typedef highp_f32vec4 fvec4
     
    typedef float32 highp_f32
     
    typedef highp_f32mat2x2 highp_f32mat2
     
    typedef tmat2x2< f32, highp > highp_f32mat2x2
     
    typedef tmat2x3< f32, highp > highp_f32mat2x3
     
    typedef tmat2x4< f32, highp > highp_f32mat2x4
     
    typedef highp_f32mat3x3 highp_f32mat3
     
    typedef tmat3x2< f32, highp > highp_f32mat3x2
     
    typedef tmat3x3< f32, highp > highp_f32mat3x3
     
    typedef tmat3x4< f32, highp > highp_f32mat3x4
     
    typedef highp_f32mat4x4 highp_f32mat4
     
    typedef tmat4x2< f32, highp > highp_f32mat4x2
     
    typedef tmat4x3< f32, highp > highp_f32mat4x3
     
    typedef tmat4x4< f32, highp > highp_f32mat4x4
     
    typedef tquat< f32, highp > highp_f32quat
     
    typedef tvec1< f32, highp > highp_f32vec1
     
    typedef tvec2< f32, highp > highp_f32vec2
     
    typedef tvec3< f32, highp > highp_f32vec3
     
    typedef tvec4< f32, highp > highp_f32vec4
     
    typedef float64 highp_f64
     
    typedef highp_f64mat2x2 highp_f64mat2
     
    typedef tmat2x2< f64, highp > highp_f64mat2x2
     
    typedef tmat2x3< f64, highp > highp_f64mat2x3
     
    typedef tmat2x4< f64, highp > highp_f64mat2x4
     
    typedef highp_f64mat3x3 highp_f64mat3
     
    typedef tmat3x2< f64, highp > highp_f64mat3x2
     
    typedef tmat3x3< f64, highp > highp_f64mat3x3
     
    typedef tmat3x4< f64, highp > highp_f64mat3x4
     
    typedef highp_f64mat4x4 highp_f64mat4
     
    typedef tmat4x2< f64, highp > highp_f64mat4x2
     
    typedef tmat4x3< f64, highp > highp_f64mat4x3
     
    typedef tmat4x4< f64, highp > highp_f64mat4x4
     
    typedef tquat< f64, highp > highp_f64quat
     
    typedef tvec1< f64, highp > highp_f64vec1
     
    typedef tvec2< f64, highp > highp_f64vec2
     
    typedef tvec3< f64, highp > highp_f64vec3
     
    typedef tvec4< f64, highp > highp_f64vec4
     
    typedef detail::float32 highp_float32
     
    typedef detail::float32 highp_float32_t
     
    typedef detail::float64 highp_float64
     
    typedef detail::float64 highp_float64_t
     
    typedef highp_fmat2x2 highp_fmat2
     
    typedef tmat2x2< f32, highp > highp_fmat2x2
     
    typedef tmat2x3< f32, highp > highp_fmat2x3
     
    typedef tmat2x4< f32, highp > highp_fmat2x4
     
    typedef highp_fmat3x3 highp_fmat3
     
    typedef tmat3x2< f32, highp > highp_fmat3x2
     
    typedef tmat3x3< f32, highp > highp_fmat3x3
     
    typedef tmat3x4< f32, highp > highp_fmat3x4
     
    typedef highp_fmat4x4 highp_fmat4
     
    typedef tmat4x2< f32, highp > highp_fmat4x2
     
    typedef tmat4x3< f32, highp > highp_fmat4x3
     
    typedef tmat4x4< f32, highp > highp_fmat4x4
     
    typedef tvec1< float, highp > highp_fvec1
     
    typedef tvec2< float, highp > highp_fvec2
     
    typedef tvec3< float, highp > highp_fvec3
     
    typedef tvec4< float, highp > highp_fvec4
     
    typedef detail::int16 highp_i16
     
    typedef tvec1< i16, highp > highp_i16vec1
     
    typedef tvec2< i16, highp > highp_i16vec2
     
    typedef tvec3< i16, highp > highp_i16vec3
     
    typedef tvec4< i16, highp > highp_i16vec4
     
    typedef detail::int32 highp_i32
     
    typedef tvec1< i32, highp > highp_i32vec1
     
    typedef tvec2< i32, highp > highp_i32vec2
     
    typedef tvec3< i32, highp > highp_i32vec3
     
    typedef tvec4< i32, highp > highp_i32vec4
     
    typedef detail::int64 highp_i64
     
    typedef tvec1< i64, highp > highp_i64vec1
     
    typedef tvec2< i64, highp > highp_i64vec2
     
    typedef tvec3< i64, highp > highp_i64vec3
     
    typedef tvec4< i64, highp > highp_i64vec4
     
    typedef detail::int8 highp_i8
     
    typedef tvec1< i8, highp > highp_i8vec1
     
    typedef tvec2< i8, highp > highp_i8vec2
     
    typedef tvec3< i8, highp > highp_i8vec3
     
    typedef tvec4< i8, highp > highp_i8vec4
     
    typedef detail::int16 highp_int16
     
    typedef detail::int16 highp_int16_t
     
    typedef detail::int32 highp_int32
     
    typedef detail::int32 highp_int32_t
     
    typedef detail::int64 highp_int64
     
    typedef detail::int64 highp_int64_t
     
    typedef detail::int8 highp_int8
     
    typedef detail::int8 highp_int8_t
     
    typedef detail::uint16 highp_u16
     
    typedef tvec1< u16, highp > highp_u16vec1
     
    typedef tvec2< u16, highp > highp_u16vec2
     
    typedef tvec3< u16, highp > highp_u16vec3
     
    typedef tvec4< u16, highp > highp_u16vec4
     
    typedef detail::uint32 highp_u32
     
    typedef tvec1< u32, highp > highp_u32vec1
     
    typedef tvec2< u32, highp > highp_u32vec2
     
    typedef tvec3< u32, highp > highp_u32vec3
     
    typedef tvec4< u32, highp > highp_u32vec4
     
    typedef detail::uint64 highp_u64
     
    typedef tvec1< u64, highp > highp_u64vec1
     
    typedef tvec2< u64, highp > highp_u64vec2
     
    typedef tvec3< u64, highp > highp_u64vec3
     
    typedef tvec4< u64, highp > highp_u64vec4
     
    typedef detail::uint8 highp_u8
     
    typedef tvec1< u8, highp > highp_u8vec1
     
    typedef tvec2< u8, highp > highp_u8vec2
     
    typedef tvec3< u8, highp > highp_u8vec3
     
    typedef tvec4< u8, highp > highp_u8vec4
     
    typedef detail::uint16 highp_uint16
     
    typedef detail::uint16 highp_uint16_t
     
    typedef detail::uint32 highp_uint32
     
    typedef detail::uint32 highp_uint32_t
     
    typedef detail::uint64 highp_uint64
     
    typedef detail::uint64 highp_uint64_t
     
    typedef detail::uint8 highp_uint8
     
    typedef detail::uint8 highp_uint8_t
     
    typedef tvec1< float, highp > highp_vec1
     
    typedef detail::int16 i16
     
    typedef highp_i16vec1 i16vec1
     
    typedef highp_i16vec2 i16vec2
     
    typedef highp_i16vec3 i16vec3
     
    typedef highp_i16vec4 i16vec4
     
    typedef detail::int32 i32
     
    typedef highp_i32vec1 i32vec1
     
    typedef highp_i32vec2 i32vec2
     
    typedef highp_i32vec3 i32vec3
     
    typedef highp_i32vec4 i32vec4
     
    typedef detail::int64 i64
     
    typedef highp_i64vec1 i64vec1
     
    typedef highp_i64vec2 i64vec2
     
    typedef highp_i64vec3 i64vec3
     
    typedef highp_i64vec4 i64vec4
     
    typedef detail::int8 i8
     
    typedef highp_i8vec1 i8vec1
     
    typedef highp_i8vec2 i8vec2
     
    typedef highp_i8vec3 i8vec3
     
    typedef highp_i8vec4 i8vec4
     
    typedef detail::int16 int16
     
    typedef detail::int16 int16_t
     
    typedef detail::int32 int32
     
    typedef detail::int32 int32_t
     
    typedef detail::int64 int64
     
    typedef detail::int64 int64_t
     
    typedef detail::int8 int8
     
    typedef detail::int8 int8_t
     
    typedef float32 lowp_f32
     
    typedef lowp_f32mat2x2 lowp_f32mat2
     
    typedef tmat2x2< f32, lowp > lowp_f32mat2x2
     
    typedef tmat2x3< f32, lowp > lowp_f32mat2x3
     
    typedef tmat2x4< f32, lowp > lowp_f32mat2x4
     
    typedef lowp_f32mat3x3 lowp_f32mat3
     
    typedef tmat3x2< f32, lowp > lowp_f32mat3x2
     
    typedef tmat3x3< f32, lowp > lowp_f32mat3x3
     
    typedef tmat3x4< f32, lowp > lowp_f32mat3x4
     
    typedef lowp_f32mat4x4 lowp_f32mat4
     
    typedef tmat4x2< f32, lowp > lowp_f32mat4x2
     
    typedef tmat4x3< f32, lowp > lowp_f32mat4x3
     
    typedef tmat4x4< f32, lowp > lowp_f32mat4x4
     
    typedef tquat< f32, lowp > lowp_f32quat
     
    typedef tvec1< f32, lowp > lowp_f32vec1
     
    typedef tvec2< f32, lowp > lowp_f32vec2
     
    typedef tvec3< f32, lowp > lowp_f32vec3
     
    typedef tvec4< f32, lowp > lowp_f32vec4
     
    typedef float64 lowp_f64
     
    typedef lowp_f64mat2x2 lowp_f64mat2
     
    typedef tmat2x2< f64, lowp > lowp_f64mat2x2
     
    typedef tmat2x3< f64, lowp > lowp_f64mat2x3
     
    typedef tmat2x4< f64, lowp > lowp_f64mat2x4
     
    typedef lowp_f64mat3x3 lowp_f64mat3
     
    typedef tmat3x2< f64, lowp > lowp_f64mat3x2
     
    typedef tmat3x3< f64, lowp > lowp_f64mat3x3
     
    typedef tmat3x4< f64, lowp > lowp_f64mat3x4
     
    typedef lowp_f64mat4x4 lowp_f64mat4
     
    typedef tmat4x2< f64, lowp > lowp_f64mat4x2
     
    typedef tmat4x3< f64, lowp > lowp_f64mat4x3
     
    typedef tmat4x4< f64, lowp > lowp_f64mat4x4
     
    typedef tquat< f64, lowp > lowp_f64quat
     
    typedef tvec1< f64, lowp > lowp_f64vec1
     
    typedef tvec2< f64, lowp > lowp_f64vec2
     
    typedef tvec3< f64, lowp > lowp_f64vec3
     
    typedef tvec4< f64, lowp > lowp_f64vec4
     
    typedef detail::float32 lowp_float32
     
    typedef detail::float32 lowp_float32_t
     
    typedef detail::float64 lowp_float64
     
    typedef detail::float64 lowp_float64_t
     
    typedef lowp_fmat2x2 lowp_fmat2
     
    typedef tmat2x2< f32, lowp > lowp_fmat2x2
     
    typedef tmat2x3< f32, lowp > lowp_fmat2x3
     
    typedef tmat2x4< f32, lowp > lowp_fmat2x4
     
    typedef lowp_fmat3x3 lowp_fmat3
     
    typedef tmat3x2< f32, lowp > lowp_fmat3x2
     
    typedef tmat3x3< f32, lowp > lowp_fmat3x3
     
    typedef tmat3x4< f32, lowp > lowp_fmat3x4
     
    typedef lowp_fmat4x4 lowp_fmat4
     
    typedef tmat4x2< f32, lowp > lowp_fmat4x2
     
    typedef tmat4x3< f32, lowp > lowp_fmat4x3
     
    typedef tmat4x4< f32, lowp > lowp_fmat4x4
     
    typedef tvec1< float, lowp > lowp_fvec1
     
    typedef tvec2< float, lowp > lowp_fvec2
     
    typedef tvec3< float, lowp > lowp_fvec3
     
    typedef tvec4< float, lowp > lowp_fvec4
     
    typedef detail::int16 lowp_i16
     
    typedef tvec1< i16, lowp > lowp_i16vec1
     
    typedef tvec2< i16, lowp > lowp_i16vec2
     
    typedef tvec3< i16, lowp > lowp_i16vec3
     
    typedef tvec4< i16, lowp > lowp_i16vec4
     
    typedef detail::int32 lowp_i32
     
    typedef tvec1< i32, lowp > lowp_i32vec1
     
    typedef tvec2< i32, lowp > lowp_i32vec2
     
    typedef tvec3< i32, lowp > lowp_i32vec3
     
    typedef tvec4< i32, lowp > lowp_i32vec4
     
    typedef detail::int64 lowp_i64
     
    typedef tvec1< i64, lowp > lowp_i64vec1
     
    typedef tvec2< i64, lowp > lowp_i64vec2
     
    typedef tvec3< i64, lowp > lowp_i64vec3
     
    typedef tvec4< i64, lowp > lowp_i64vec4
     
    typedef detail::int8 lowp_i8
     
    typedef tvec1< i8, lowp > lowp_i8vec1
     
    typedef tvec2< i8, lowp > lowp_i8vec2
     
    typedef tvec3< i8, lowp > lowp_i8vec3
     
    typedef tvec4< i8, lowp > lowp_i8vec4
     
    typedef detail::int16 lowp_int16
     
    typedef detail::int16 lowp_int16_t
     
    typedef detail::int32 lowp_int32
     
    typedef detail::int32 lowp_int32_t
     
    typedef detail::int64 lowp_int64
     
    typedef detail::int64 lowp_int64_t
     
    typedef detail::int8 lowp_int8
     
    typedef detail::int8 lowp_int8_t
     
    typedef detail::uint16 lowp_u16
     
    typedef tvec1< u16, lowp > lowp_u16vec1
     
    typedef tvec2< u16, lowp > lowp_u16vec2
     
    typedef tvec3< u16, lowp > lowp_u16vec3
     
    typedef tvec4< u16, lowp > lowp_u16vec4
     
    typedef detail::uint32 lowp_u32
     
    typedef tvec1< u32, lowp > lowp_u32vec1
     
    typedef tvec2< u32, lowp > lowp_u32vec2
     
    typedef tvec3< u32, lowp > lowp_u32vec3
     
    typedef tvec4< u32, lowp > lowp_u32vec4
     
    typedef detail::uint64 lowp_u64
     
    typedef tvec1< u64, lowp > lowp_u64vec1
     
    typedef tvec2< u64, lowp > lowp_u64vec2
     
    typedef tvec3< u64, lowp > lowp_u64vec3
     
    typedef tvec4< u64, lowp > lowp_u64vec4
     
    typedef detail::uint8 lowp_u8
     
    typedef tvec1< u8, lowp > lowp_u8vec1
     
    typedef tvec2< u8, lowp > lowp_u8vec2
     
    typedef tvec3< u8, lowp > lowp_u8vec3
     
    typedef tvec4< u8, lowp > lowp_u8vec4
     
    typedef detail::uint16 lowp_uint16
     
    typedef detail::uint16 lowp_uint16_t
     
    typedef detail::uint32 lowp_uint32
     
    typedef detail::uint32 lowp_uint32_t
     
    typedef detail::uint64 lowp_uint64
     
    typedef detail::uint64 lowp_uint64_t
     
    typedef detail::uint8 lowp_uint8
     
    typedef detail::uint8 lowp_uint8_t
     
    typedef tvec1< float, lowp > lowp_vec1
     
    typedef float32 mediump_f32
     
    typedef mediump_f32mat2x2 mediump_f32mat2
     
    typedef tmat2x2< f32, mediump > mediump_f32mat2x2
     
    typedef tmat2x3< f32, mediump > mediump_f32mat2x3
     
    typedef tmat2x4< f32, mediump > mediump_f32mat2x4
     
    typedef mediump_f32mat3x3 mediump_f32mat3
     
    typedef tmat3x2< f32, mediump > mediump_f32mat3x2
     
    typedef tmat3x3< f32, mediump > mediump_f32mat3x3
     
    typedef tmat3x4< f32, mediump > mediump_f32mat3x4
     
    typedef mediump_f32mat4x4 mediump_f32mat4
     
    typedef tmat4x2< f32, mediump > mediump_f32mat4x2
     
    typedef tmat4x3< f32, mediump > mediump_f32mat4x3
     
    typedef tmat4x4< f32, mediump > mediump_f32mat4x4
     
    typedef tquat< f32, mediump > mediump_f32quat
     
    typedef tvec1< f32, mediump > mediump_f32vec1
     
    typedef tvec2< f32, mediump > mediump_f32vec2
     
    typedef tvec3< f32, mediump > mediump_f32vec3
     
    typedef tvec4< f32, mediump > mediump_f32vec4
     
    typedef float64 mediump_f64
     
    typedef mediump_f64mat2x2 mediump_f64mat2
     
    typedef tmat2x2< f64, mediump > mediump_f64mat2x2
     
    typedef tmat2x3< f64, mediump > mediump_f64mat2x3
     
    typedef tmat2x4< f64, mediump > mediump_f64mat2x4
     
    typedef mediump_f64mat3x3 mediump_f64mat3
     
    typedef tmat3x2< f64, mediump > mediump_f64mat3x2
     
    typedef tmat3x3< f64, mediump > mediump_f64mat3x3
     
    typedef tmat3x4< f64, mediump > mediump_f64mat3x4
     
    typedef mediump_f64mat4x4 mediump_f64mat4
     
    typedef tmat4x2< f64, mediump > mediump_f64mat4x2
     
    typedef tmat4x3< f64, mediump > mediump_f64mat4x3
     
    typedef tmat4x4< f64, mediump > mediump_f64mat4x4
     
    typedef tquat< f64, mediump > mediump_f64quat
     
    typedef tvec1< f64, mediump > mediump_f64vec1
     
    typedef tvec2< f64, mediump > mediump_f64vec2
     
    typedef tvec3< f64, mediump > mediump_f64vec3
     
    typedef tvec4< f64, mediump > mediump_f64vec4
     
    typedef detail::float32 mediump_float32
     
    typedef detail::float32 mediump_float32_t
     
    typedef detail::float64 mediump_float64
     
    typedef detail::float64 mediump_float64_t
     
    typedef mediump_fmat2x2 mediump_fmat2
     
    typedef tmat2x2< f32, mediump > mediump_fmat2x2
     
    typedef tmat2x3< f32, mediump > mediump_fmat2x3
     
    typedef tmat2x4< f32, mediump > mediump_fmat2x4
     
    typedef mediump_fmat3x3 mediump_fmat3
     
    typedef tmat3x2< f32, mediump > mediump_fmat3x2
     
    typedef tmat3x3< f32, mediump > mediump_fmat3x3
     
    typedef tmat3x4< f32, mediump > mediump_fmat3x4
     
    typedef mediump_fmat4x4 mediump_fmat4
     
    typedef tmat4x2< f32, mediump > mediump_fmat4x2
     
    typedef tmat4x3< f32, mediump > mediump_fmat4x3
     
    typedef tmat4x4< f32, mediump > mediump_fmat4x4
     
    typedef tvec1< float, mediump > mediump_fvec1
     
    typedef tvec2< float, mediump > mediump_fvec2
     
    typedef tvec3< float, mediump > mediump_fvec3
     
    typedef tvec4< float, mediump > mediump_fvec4
     
    typedef detail::int16 mediump_i16
     
    typedef tvec1< i16, mediump > mediump_i16vec1
     
    typedef tvec2< i16, mediump > mediump_i16vec2
     
    typedef tvec3< i16, mediump > mediump_i16vec3
     
    typedef tvec4< i16, mediump > mediump_i16vec4
     
    typedef detail::int32 mediump_i32
     
    typedef tvec1< i32, mediump > mediump_i32vec1
     
    typedef tvec2< i32, mediump > mediump_i32vec2
     
    typedef tvec3< i32, mediump > mediump_i32vec3
     
    typedef tvec4< i32, mediump > mediump_i32vec4
     
    typedef detail::int64 mediump_i64
     
    typedef tvec1< i64, mediump > mediump_i64vec1
     
    typedef tvec2< i64, mediump > mediump_i64vec2
     
    typedef tvec3< i64, mediump > mediump_i64vec3
     
    typedef tvec4< i64, mediump > mediump_i64vec4
     
    typedef detail::int8 mediump_i8
     
    typedef tvec1< i8, mediump > mediump_i8vec1
     
    typedef tvec2< i8, mediump > mediump_i8vec2
     
    typedef tvec3< i8, mediump > mediump_i8vec3
     
    typedef tvec4< i8, mediump > mediump_i8vec4
     
    typedef detail::int16 mediump_int16
     
    typedef detail::int16 mediump_int16_t
     
    typedef detail::int32 mediump_int32
     
    typedef detail::int32 mediump_int32_t
     
    typedef detail::int64 mediump_int64
     
    typedef detail::int64 mediump_int64_t
     
    typedef detail::int8 mediump_int8
     
    typedef detail::int8 mediump_int8_t
     
    typedef detail::uint16 mediump_u16
     
    typedef tvec1< u16, mediump > mediump_u16vec1
     
    typedef tvec2< u16, mediump > mediump_u16vec2
     
    typedef tvec3< u16, mediump > mediump_u16vec3
     
    typedef tvec4< u16, mediump > mediump_u16vec4
     
    typedef detail::uint32 mediump_u32
     
    typedef tvec1< u32, mediump > mediump_u32vec1
     
    typedef tvec2< u32, mediump > mediump_u32vec2
     
    typedef tvec3< u32, mediump > mediump_u32vec3
     
    typedef tvec4< u32, mediump > mediump_u32vec4
     
    typedef detail::uint64 mediump_u64
     
    typedef tvec1< u64, mediump > mediump_u64vec1
     
    typedef tvec2< u64, mediump > mediump_u64vec2
     
    typedef tvec3< u64, mediump > mediump_u64vec3
     
    typedef tvec4< u64, mediump > mediump_u64vec4
     
    typedef detail::uint8 mediump_u8
     
    typedef tvec1< u8, mediump > mediump_u8vec1
     
    typedef tvec2< u8, mediump > mediump_u8vec2
     
    typedef tvec3< u8, mediump > mediump_u8vec3
     
    typedef tvec4< u8, mediump > mediump_u8vec4
     
    typedef detail::uint16 mediump_uint16
     
    typedef detail::uint16 mediump_uint16_t
     
    typedef detail::uint32 mediump_uint32
     
    typedef detail::uint32 mediump_uint32_t
     
    typedef detail::uint64 mediump_uint64
     
    typedef detail::uint64 mediump_uint64_t
     
    typedef detail::uint8 mediump_uint8
     
    typedef detail::uint8 mediump_uint8_t
     
    typedef tvec1< float, mediump > mediump_vec1
     
    typedef detail::uint16 u16
     
    typedef highp_u16vec1 u16vec1
     
    typedef highp_u16vec2 u16vec2
     
    typedef highp_u16vec3 u16vec3
     
    typedef highp_u16vec4 u16vec4
     
    typedef detail::uint32 u32
     
    typedef highp_u32vec1 u32vec1
     
    typedef highp_u32vec2 u32vec2
     
    typedef highp_u32vec3 u32vec3
     
    typedef highp_u32vec4 u32vec4
     
    typedef detail::uint64 u64
     
    typedef highp_u64vec1 u64vec1
     
    typedef highp_u64vec2 u64vec2
     
    typedef highp_u64vec3 u64vec3
     
    typedef highp_u64vec4 u64vec4
     
    typedef detail::uint8 u8
     
    typedef highp_u8vec1 u8vec1
     
    typedef highp_u8vec2 u8vec2
     
    typedef highp_u8vec3 u8vec3
     
    typedef highp_u8vec4 u8vec4
     
    typedef detail::uint16 uint16
     
    typedef detail::uint16 uint16_t
     
    typedef detail::uint32 uint32
     
    typedef detail::uint32 uint32_t
     
    typedef detail::uint64 uint64
     
    typedef detail::uint64 uint64_t
     
    typedef detail::uint8 uint8
     
    typedef detail::uint8 uint8_t
     

    Detailed Description

    -

    Defines a templated quaternion type and several quaternion operations.

    -

    <glm/gtc/quaternion.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Defines specific C++-based precision types.

    +

    Precision types defines types based on GLSL's precision qualifiers. This extension defines types based on explicitly-sized C++ data types.

    +

    <glm/gtc/type_precision.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    +
    - - - - - +
    GLM_FUNC_DECL T glm::angle (detail::tquat< T, P > const & x)typedef float32 f32
    -

    Returns the quaternion rotation angle.

    -
    See Also
    GLM_GTC_quaternion
    +

    Default 32 bit single-precision floating-point scalar.

    +

    32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1533 of file fwd.hpp.

    - +
    - - - - - - - - - - - - - - - +
    GLM_FUNC_DECL detail::tquat<T, P> glm::angleAxis (T const & angle,
    detail::tvec3< T, P > const & axis 
    )typedef tmat2x2< f32, defaultp > f32mat2
    -

    Build a quaternion from an angle and a normalized axis.

    -
    Parameters
    - - - -
    angleAngle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisAxis of the quaternion, must be normalized.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL detail::tvec3<T, P> glm::axis (detail::tquat< T, P > const & x)
    -
    - -

    Returns the q rotation axis.

    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL detail::tquat<T, P> glm::conjugate (detail::tquat< T, P > const & q)
    -
    - -

    Returns the q conjugate.

    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL T glm::dot (quatType< T, P > const & x,
    quatType< T, P > const & y 
    )
    -
    - -

    Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...

    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tvec4<bool, P> glm::equal (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y 
    )
    -
    - -

    Returns the component-wise comparison of result x == y.

    -
    Template Parameters
    - - -
    quatTypeFloating-point quaternion types.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL detail::tvec3<T, P> glm::eulerAngles (detail::tquat< T, P > const & x)
    -
    - -

    Returns euler angles, yitch as x, yaw as y, roll as z.

    -

    The result is expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise.

    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tvec4<bool, P> glm::greaterThan (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y 
    )
    -
    - -

    Returns the component-wise comparison of result x > y.

    -
    Template Parameters
    - - -
    quatTypeFloating-point quaternion types.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tvec4<bool, P> glm::greaterThanEqual (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y 
    )
    -
    - -

    Returns the component-wise comparison of result x >= y.

    -
    Template Parameters
    - - -
    quatTypeFloating-point quaternion types.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL detail::tquat<T, P> glm::inverse (detail::tquat< T, P > const & q)
    -
    - -

    Returns the q inverse.

    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL T glm::length (detail::tquat< T, P > const & q)
    -
    - -

    Returns the length of the quaternion.

    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tquat<T, P> glm::lerp (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y,
    T const & a 
    )
    -
    - -

    Linear interpolation of two quaternions.

    -

    The interpolation is oriented.

    -
    Parameters
    - - - - -
    xA quaternion
    yA quaternion
    aInterpolation factor. The interpolation is defined in the range [0, 1].
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the quaternion. Supported: half, float or double.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tvec4<bool, P> glm::lessThan (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y 
    )
    -
    - -

    Returns the component-wise comparison result of x < y.

    -
    Template Parameters
    - - -
    quatTypeFloating-point quaternion types.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tvec4<bool, P> glm::lessThanEqual (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y 
    )
    -
    - -

    Returns the component-wise comparison of result x <= y.

    -
    Template Parameters
    - - -
    quatTypeFloating-point quaternion types.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL detail::tmat3x3<T, P> glm::mat3_cast (detail::tquat< T, P > const & x)
    -
    - -

    Converts a quaternion to a 3 * 3 matrix.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Referenced by glm::toMat3().

    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL detail::tmat4x4<T, P> glm::mat4_cast (detail::tquat< T, P > const & x)
    -
    - -

    Converts a quaternion to a 4 * 4 matrix.

    -
    See Also
    GLM_GTC_quaternion
    - -

    Referenced by glm::toMat4().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL detail::tquat<T, P> glm::mix (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y,
    T const & a 
    )
    -
    - -

    Spherical linear interpolation of two quaternions.

    -

    The interpolation is oriented and the rotation is performed at constant speed. For short path spherical linear interpolation, use the slerp function.

    -
    Parameters
    - - - - -
    xA quaternion
    yA quaternion
    aInterpolation factor. The interpolation is defined beyond the range [0, 1].
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the quaternion. Supported: half, float or double.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    +

    Default single-precision floating-point 2x2 matrix.

    +

    Single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision
    -- slerp(detail::tquat<T, P> const & x, detail::tquat<T, P> const & y, T const & a)
    +GLM_GTC_type_precision Single-precision floating-point 2x2 matrix. +
    +GLM_GTC_type_precision
    + +

    Definition at line 2477 of file fwd.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL detail::tquat<T, P> glm::normalize (detail::tquat< T, P > const & q)typedef tmat2x2< f32, defaultp > f32mat2x2
    -

    Returns the normalized quaternion.

    -
    See Also
    GLM_GTC_quaternion
    +

    Default single-precision floating-point 2x2 matrix.

    +

    Single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision
    +
    +GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2441 of file fwd.hpp.

    - +
    - - - - - - - - - - - - - - - +
    GLM_FUNC_DECL detail::tvec4<bool, P> glm::notEqual (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y 
    )typedef tmat2x3< f32, defaultp > f32mat2x3
    -

    Returns the component-wise comparison of result x != y.

    -
    Template Parameters
    - - -
    quatTypeFloating-point quaternion types.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    +

    Default single-precision floating-point 2x3 matrix.

    +

    Single-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2445 of file fwd.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL T glm::pitch (detail::tquat< T, P > const & x)typedef tmat2x4< f32, defaultp > f32mat2x4
    -

    Returns pitch value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise.

    -
    See Also
    GLM_GTX_quaternion
    +

    Default single-precision floating-point 2x4 matrix.

    +

    Single-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2449 of file fwd.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL detail::tquat<T, P> glm::quat_cast (detail::tmat3x3< T, P > const & x)typedef tmat3x3< f32, defaultp > f32mat3
    -

    Converts a 3 * 3 matrix to a quaternion.

    -
    See Also
    GLM_GTC_quaternion
    +

    Default single-precision floating-point 3x3 matrix.

    +

    Single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    -

    Referenced by glm::toQuat().

    +

    Definition at line 2481 of file fwd.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL detail::tquat<T, P> glm::quat_cast (detail::tmat4x4< T, P > const & x)typedef tmat3x2< f32, defaultp > f32mat3x2
    -

    Converts a 4 * 4 matrix to a quaternion.

    -
    See Also
    GLM_GTC_quaternion
    +

    Default single-precision floating-point 3x2 matrix.

    +

    Single-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2453 of file fwd.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL T glm::roll (detail::tquat< T, P > const & x)typedef tmat3x3< f32, defaultp > f32mat3x3
    -

    Returns roll value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise.

    -
    See Also
    GLM_GTX_quaternion
    +

    Default single-precision floating-point 3x3 matrix.

    +

    Single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2457 of file fwd.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    GLM_FUNC_DECL detail::tquat<T, P> glm::rotate (detail::tquat< T, P > const & q,
    T const & angle,
    detail::tvec3< T, P > const & axis 
    )typedef tmat3x4< f32, defaultp > f32mat3x4
    -

    Rotates a quaternion from a vector of 3 components axis and an angle.

    -
    Parameters
    - - - - -
    qSource orientation
    angleAngle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisAxis of the rotation
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    +

    Default single-precision floating-point 3x4 matrix.

    +

    Single-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2461 of file fwd.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    GLM_FUNC_DECL detail::tquat<T, P> glm::slerp (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y,
    T const & a 
    )typedef tmat4x4< f32, defaultp > f32mat4
    -

    Spherical linear interpolation of two quaternions.

    -

    The interpolation always take the short path and the rotation is performed at constant speed.

    -
    Parameters
    - - - - -
    xA quaternion
    yA quaternion
    aInterpolation factor. The interpolation is defined beyond the range [0, 1].
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the quaternion. Supported: half, float or double.
    -
    -
    -
    See Also
    GLM_GTC_quaternion
    -

    Spherical linear interpolation of two quaternions.

    +

    Default single-precision floating-point 4x4 matrix.

    +

    Single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    -

    Definition at line 73 of file compatibility.hpp.

    - -

    References glm::mix().

    +

    Definition at line 2485 of file fwd.hpp.

    - +
    - - - - - +
    GLM_FUNC_DECL T glm::yaw (detail::tquat< T, P > const & x)typedef tmat4x2< f32, defaultp > f32mat4x2
    -

    Returns yaw value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise.

    -
    See Also
    GLM_GTX_quaternion
    +

    Default single-precision floating-point 4x2 matrix.

    +

    Single-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2465 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3< f32, defaultp > f32mat4x3
    +
    + +

    Default single-precision floating-point 4x3 matrix.

    +

    Single-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2469 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< f32, defaultp > f32mat4x4
    +
    + +

    Default single-precision floating-point 4x4 matrix.

    +

    Single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2473 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tquat< f32, defaultp > f32quat
    +
    + +

    Default single-precision floating-point quaternion.

    +

    Single-precision floating-point quaternion.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2489 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< f32, defaultp > f32vec1
    +
    + +

    Default single-precision floating-point vector of 1 components.

    +

    Single-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2425 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< f32, defaultp > f32vec2
    +
    + +

    Default single-precision floating-point vector of 2 components.

    +

    Single-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2429 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< f32, defaultp > f32vec3
    +
    + +

    Default single-precision floating-point vector of 3 components.

    +

    Single-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2433 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< f32, defaultp > f32vec4
    +
    + +

    Default single-precision floating-point vector of 4 components.

    +

    Single-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2437 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef float64 f64
    +
    + +

    Default 64 bit double-precision floating-point scalar.

    +

    64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1537 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< f64, defaultp > f64mat2
    +
    + +

    Default double-precision floating-point 2x2 matrix.

    +

    Double-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision
    +
    +GLM_GTC_type_precision Double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2583 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< f64, defaultp > f64mat2x2
    +
    + +

    Default double-precision floating-point 2x2 matrix.

    +

    Double-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision
    +
    +GLM_GTC_type_precision Double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2547 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3< f64, defaultp > f64mat2x3
    +
    + +

    Default double-precision floating-point 2x3 matrix.

    +

    Double-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2551 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4< f64, defaultp > f64mat2x4
    +
    + +

    Default double-precision floating-point 2x4 matrix.

    +

    Double-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2555 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< f64, defaultp > f64mat3
    +
    + +

    Default double-precision floating-point 3x3 matrix.

    +

    Double-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2587 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2< f64, defaultp > f64mat3x2
    +
    + +

    Default double-precision floating-point 3x2 matrix.

    +

    Double-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2559 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< f64, defaultp > f64mat3x3
    +
    + +

    Default double-precision floating-point 3x3 matrix.

    +

    Double-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2563 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4< f64, defaultp > f64mat3x4
    +
    + +

    Default double-precision floating-point 3x4 matrix.

    +

    Double-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2567 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< f64, defaultp > f64mat4
    +
    + +

    Default double-precision floating-point 4x4 matrix.

    +

    Double-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2591 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2< f64, defaultp > f64mat4x2
    +
    + +

    Default double-precision floating-point 4x2 matrix.

    +

    Double-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2571 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3< f64, defaultp > f64mat4x3
    +
    + +

    Default double-precision floating-point 4x3 matrix.

    +

    Double-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2575 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< f64, defaultp > f64mat4x4
    +
    + +

    Default double-precision floating-point 4x4 matrix.

    +

    Double-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2579 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tquat< f64, defaultp > f64quat
    +
    + +

    Default double-precision floating-point quaternion.

    +

    Double-precision floating-point quaternion.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2595 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< f64, defaultp > f64vec1
    +
    + +

    Default double-precision floating-point vector of 1 components.

    +

    Double-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2531 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< f64, defaultp > f64vec2
    +
    + +

    Default double-precision floating-point vector of 2 components.

    +

    Double-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2535 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< f64, defaultp > f64vec3
    +
    + +

    Default double-precision floating-point vector of 3 components.

    +

    Double-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2539 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< f64, defaultp > f64vec4
    +
    + +

    Default double-precision floating-point vector of 4 components.

    +

    Double-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2543 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 float32
    +
    + +

    Default 32 bit single-precision floating-point scalar.

    +

    32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 80 of file type_float.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 float32_t
    +
    + +

    Default 32 bit single-precision floating-point scalar.

    +

    32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1525 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 float64
    +
    + +

    Default 64 bit double-precision floating-point scalar.

    +

    64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 81 of file type_float.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 float64_t
    +
    + +

    Default 64 bit double-precision floating-point scalar.

    +

    64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1529 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< f32, defaultp > fmat2
    +
    + +

    Default single-precision floating-point 2x2 matrix.

    +

    Single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision
    +
    +GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2407 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2< f32, defaultp > fmat2x2
    +
    + +

    Default single-precision floating-point 2x2 matrix.

    +

    Single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision
    +
    +GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2371 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3< f32, defaultp > fmat2x3
    +
    + +

    Default single-precision floating-point 2x3 matrix.

    +

    Single-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2375 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4< f32, defaultp > fmat2x4
    +
    + +

    Default single-precision floating-point 2x4 matrix.

    +

    Single-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2379 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< f32, defaultp > fmat3
    +
    + +

    Default single-precision floating-point 3x3 matrix.

    +

    Single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2411 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2< f32, defaultp > fmat3x2
    +
    + +

    Default single-precision floating-point 3x2 matrix.

    +

    Single-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2383 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3< f32, defaultp > fmat3x3
    +
    + +

    Default single-precision floating-point 3x3 matrix.

    +

    Single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2387 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4< f32, defaultp > fmat3x4
    +
    + +

    Default single-precision floating-point 3x4 matrix.

    +

    Single-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2391 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< f32, defaultp > fmat4
    +
    + +

    Default single-precision floating-point 4x4 matrix.

    +

    Single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2415 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2< f32, defaultp > fmat4x2
    +
    + +

    Default single-precision floating-point 4x2 matrix.

    +

    Single-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2395 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3< f32, defaultp > fmat4x3
    +
    + +

    Default single-precision floating-point 4x3 matrix.

    +

    Single-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2399 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4< f32, defaultp > fmat4x4
    +
    + +

    Default single-precision floating-point 4x4 matrix.

    +

    Single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2403 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_fquat fquat
    +
    + +

    Quaternion of default single-precision floating-point numbers.

    +

    Default single-precision floating-point quaternion.

    +
    See also
    GLM_GTC_quaternion
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 86 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< float, defaultp > fvec1
    +
    + +

    Default single-precision floating-point vector of 1 components.

    +

    Single-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2355 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< float, defaultp > fvec2
    +
    + +

    Default single-precision floating-point vector of 2 components.

    +

    Single-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2359 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< float, defaultp > fvec3
    +
    + +

    Default single-precision floating-point vector of 3 components.

    +

    Single-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2363 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< float, defaultp > fvec4
    +
    + +

    Default single-precision floating-point vector of 4 components.

    +

    Single-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2367 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef float32 highp_f32
    +
    + +

    High 32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1455 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_f32mat2x2 highp_f32mat2
    +
    + +

    High single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision High single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2072 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<f32, highp> highp_f32mat2x2
    +
    + +

    High single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision High single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2032 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<f32, highp> highp_f32mat2x3
    +
    + +

    High single-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2036 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<f32, highp> highp_f32mat2x4
    +
    + +

    High single-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2040 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_f32mat3x3 highp_f32mat3
    +
    + +

    High single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2076 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<f32, highp> highp_f32mat3x2
    +
    + +

    High single-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2044 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<f32, highp> highp_f32mat3x3
    +
    + +

    High single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2048 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<f32, highp> highp_f32mat3x4
    +
    + +

    High single-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2052 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_f32mat4x4 highp_f32mat4
    +
    + +

    High single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2080 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<f32, highp> highp_f32mat4x2
    +
    + +

    High single-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2056 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<f32, highp> highp_f32mat4x3
    +
    + +

    High single-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2060 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<f32, highp> highp_f32mat4x4
    +
    + +

    High single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2064 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tquat<f32, highp> highp_f32quat
    +
    + +

    High single-precision floating-point quaternion.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2273 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<f32, highp> highp_f32vec1
    +
    + +

    High single-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1674 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<f32, highp> highp_f32vec2
    +
    + +

    High single-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1678 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<f32, highp> highp_f32vec3
    +
    + +

    High single-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1682 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<f32, highp> highp_f32vec4
    +
    + +

    High single-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1686 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef float64 highp_f64
    +
    + +

    High 64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1459 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_f64mat2x2 highp_f64mat2
    +
    + +

    High double-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision High double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2242 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<f64, highp> highp_f64mat2x2
    +
    + +

    High double-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision High double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2202 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<f64, highp> highp_f64mat2x3
    +
    + +

    High double-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2206 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<f64, highp> highp_f64mat2x4
    +
    + +

    High double-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2210 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_f64mat3x3 highp_f64mat3
    +
    + +

    High double-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2246 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<f64, highp> highp_f64mat3x2
    +
    + +

    High double-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2214 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<f64, highp> highp_f64mat3x3
    +
    + +

    High double-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2218 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<f64, highp> highp_f64mat3x4
    +
    + +

    High double-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2222 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_f64mat4x4 highp_f64mat4
    +
    + +

    High double-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2250 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<f64, highp> highp_f64mat4x2
    +
    + +

    High double-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2226 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<f64, highp> highp_f64mat4x3
    +
    + +

    High double-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2230 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<f64, highp> highp_f64mat4x4
    +
    + +

    High double-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2234 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tquat<f64, highp> highp_f64quat
    +
    + +

    High double-precision floating-point quaternion.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2277 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<f64, highp> highp_f64vec1
    +
    + +

    High double-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1723 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<f64, highp> highp_f64vec2
    +
    + +

    High double-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1727 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<f64, highp> highp_f64vec3
    +
    + +

    High double-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1731 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<f64, highp> highp_f64vec4
    +
    + +

    High double-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1735 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 highp_float32
    +
    + +

    High 32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1439 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 highp_float32_t
    +
    + +

    High 32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1447 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 highp_float64
    +
    + +

    High 64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1443 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 highp_float64_t
    +
    + +

    High 64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1451 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_fmat2x2 highp_fmat2
    +
    + +

    High single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision High single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 1901 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<f32, highp> highp_fmat2x2
    +
    + +

    High single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision High single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 1861 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<f32, highp> highp_fmat2x3
    +
    + +

    High single-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1865 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<f32, highp> highp_fmat2x4
    +
    + +

    High single-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1869 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_fmat3x3 highp_fmat3
    +
    + +

    High single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1905 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<f32, highp> highp_fmat3x2
    +
    + +

    High single-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1873 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<f32, highp> highp_fmat3x3
    +
    + +

    High single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1877 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<f32, highp> highp_fmat3x4
    +
    + +

    High single-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1881 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_fmat4x4 highp_fmat4
    +
    + +

    High single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1909 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<f32, highp> highp_fmat4x2
    +
    + +

    High single-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1885 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<f32, highp> highp_fmat4x3
    +
    + +

    High single-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1889 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<f32, highp> highp_fmat4x4
    +
    + +

    High single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1893 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<float, highp> highp_fvec1
    +
    + +

    High single-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1625 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<float, highp> highp_fvec2
    +
    + +

    High Single-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1629 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<float, highp> highp_fvec3
    +
    + +

    High Single-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1633 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<float, highp> highp_fvec4
    +
    + +

    High Single-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1637 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 highp_i16
    +
    + +

    High precision 16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 260 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<i16, highp> highp_i16vec1
    +
    + +

    High precision 16 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 444 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<i16, highp> highp_i16vec2
    +
    + +

    High precision 16 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 448 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<i16, highp> highp_i16vec3
    +
    + +

    High precision 16 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 452 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<i16, highp> highp_i16vec4
    +
    + +

    High precision 16 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 456 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 highp_i32
    +
    + +

    High precision 32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 264 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< i32, highp > highp_i32vec1
    +
    + +

    High precision 32 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 524 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< i32, highp > highp_i32vec2
    +
    + +

    High precision 32 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 528 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< i32, highp > highp_i32vec3
    +
    + +

    High precision 32 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 532 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< i32, highp > highp_i32vec4
    +
    + +

    High precision 32 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 536 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 highp_i64
    +
    + +

    High precision 64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 268 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<i64, highp> highp_i64vec1
    +
    + +

    High precision 64 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 683 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<i64, highp> highp_i64vec2
    +
    + +

    High precision 64 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 687 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<i64, highp> highp_i64vec3
    +
    + +

    High precision 64 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 691 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<i64, highp> highp_i64vec4
    +
    + +

    High precision 64 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 695 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 highp_i8
    +
    + +

    High precision 8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 256 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<i8, highp> highp_i8vec1
    +
    + +

    High precision 8 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 365 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<i8, highp> highp_i8vec2
    +
    + +

    High precision 8 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 369 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<i8, highp> highp_i8vec3
    +
    + +

    High precision 8 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 373 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<i8, highp> highp_i8vec4
    +
    + +

    High precision 8 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 377 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 highp_int16
    +
    + +

    High precision 16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 228 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 highp_int16_t
    +
    + +

    High precision 16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 244 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 highp_int32
    +
    + +

    High precision 32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 232 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 highp_int32_t
    +
    + +

    32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 248 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 highp_int64
    +
    + +

    High precision 64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 236 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 highp_int64_t
    +
    + +

    High precision 64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 252 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 highp_int8
    +
    + +

    High precision 8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 224 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 highp_int8_t
    +
    + +

    High precision 8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 240 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 highp_u16
    +
    + +

    Medium precision 16 bit unsigned integer type.

    +

    High precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 869 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<u16, highp> highp_u16vec1
    +
    + +

    High precision 16 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1053 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<u16, highp> highp_u16vec2
    +
    + +

    High precision 16 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1057 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<u16, highp> highp_u16vec3
    +
    + +

    High precision 16 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1061 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<u16, highp> highp_u16vec4
    +
    + +

    High precision 16 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1065 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 highp_u32
    +
    + +

    Medium precision 32 bit unsigned integer type.

    +

    High precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 873 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< u32, highp > highp_u32vec1
    +
    + +

    High precision 32 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1133 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< u32, highp > highp_u32vec2
    +
    + +

    High precision 32 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1137 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< u32, highp > highp_u32vec3
    +
    + +

    High precision 32 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1141 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< u32, highp > highp_u32vec4
    +
    + +

    High precision 32 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1145 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 highp_u64
    +
    + +

    Medium precision 64 bit unsigned integer type.

    +

    High precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 877 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<u64, highp> highp_u64vec1
    +
    + +

    High precision 64 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1292 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<u64, highp> highp_u64vec2
    +
    + +

    High precision 64 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1296 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<u64, highp> highp_u64vec3
    +
    + +

    High precision 64 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1300 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<u64, highp> highp_u64vec4
    +
    + +

    High precision 64 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1304 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 highp_u8
    +
    + +

    Medium precision 8 bit unsigned integer type.

    +

    High precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 865 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<u8, highp> highp_u8vec1
    +
    + +

    High precision 8 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 974 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<u8, highp> highp_u8vec2
    +
    + +

    High precision 8 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 978 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<u8, highp> highp_u8vec3
    +
    + +

    High precision 8 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 982 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<u8, highp> highp_u8vec4
    +
    + +

    High precision 8 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 986 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 highp_uint16
    +
    + +

    Medium precision 16 bit unsigned integer type.

    +

    High precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 837 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 highp_uint16_t
    +
    + +

    Medium precision 16 bit unsigned integer type.

    +

    High precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 853 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 highp_uint32
    +
    + +

    Medium precision 32 bit unsigned integer type.

    +

    High precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 841 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 highp_uint32_t
    +
    + +

    Medium precision 32 bit unsigned integer type.

    +

    High precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 857 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 highp_uint64
    +
    + +

    Medium precision 64 bit unsigned integer type.

    +

    High precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 845 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 highp_uint64_t
    +
    + +

    Medium precision 64 bit unsigned integer type.

    +

    High precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 861 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 highp_uint8
    +
    + +

    Medium precision 8 bit unsigned integer type.

    +

    High precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 833 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 highp_uint8_t
    +
    + +

    Medium precision 8 bit unsigned integer type.

    +

    High precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 849 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_vec1_t highp_vec1
    +
    + +

    High single-precision floating-point vector of 1 component.

    +

    1 component vector of high precision floating-point numbers.

    +
    See also
    GLM_GTC_type_precision
    +

    There is no guarantee on the actual precision.

    See also
    GLM_GTC_vec1 extension.
    + +

    Definition at line 1609 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 i16
    +
    + +

    16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 317 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< i16, defaultp > i16vec1
    +
    + +

    Default precision 16 bit signed integer scalar type.

    +

    16 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 472 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< i16, defaultp > i16vec2
    +
    + +

    Default precision 16 bit signed integer vector of 2 components type.

    +

    16 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 476 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< i16, defaultp > i16vec3
    +
    + +

    Default precision 16 bit signed integer vector of 3 components type.

    +

    16 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 480 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< i16, defaultp > i16vec4
    +
    + +

    Default precision 16 bit signed integer vector of 4 components type.

    +

    16 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 484 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 i32
    +
    + +

    32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 321 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< i32, defaultp > i32vec1
    +
    + +

    Default precision 32 bit signed integer scalar type.

    +

    32 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 551 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< i32, defaultp > i32vec2
    +
    + +

    Default precision 32 bit signed integer vector of 2 components type.

    +

    32 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 555 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< i32, defaultp > i32vec3
    +
    + +

    Default precision 32 bit signed integer vector of 3 components type.

    +

    32 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 559 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< i32, defaultp > i32vec4
    +
    + +

    Default precision 32 bit signed integer vector of 4 components type.

    +

    32 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 563 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 i64
    +
    + +

    64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 325 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< i64, defaultp > i64vec1
    +
    + +

    Default precision 64 bit signed integer scalar type.

    +

    64 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 710 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< i64, defaultp > i64vec2
    +
    + +

    Default precision 64 bit signed integer vector of 2 components type.

    +

    64 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 714 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< i64, defaultp > i64vec3
    +
    + +

    Default precision 64 bit signed integer vector of 3 components type.

    +

    64 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 718 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< i64, defaultp > i64vec4
    +
    + +

    Default precision 64 bit signed integer vector of 4 components type.

    +

    64 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 722 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 i8
    +
    + +

    8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 313 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< i8, defaultp > i8vec1
    +
    + +

    Default precision 8 bit signed integer scalar type.

    +

    8 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 392 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< i8, defaultp > i8vec2
    +
    + +

    Default precision 8 bit signed integer vector of 2 components type.

    +

    8 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 396 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< i8, defaultp > i8vec3
    +
    + +

    Default precision 8 bit signed integer vector of 3 components type.

    +

    8 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 400 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< i8, defaultp > i8vec4
    +
    + +

    Default precision 8 bit signed integer vector of 4 components type.

    +

    8 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 404 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 int16
    +
    + +

    16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 221 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 int16_t
    +
    + +

    16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 300 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 int32
    +
    + +

    32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 222 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 int32_t
    +
    + +

    32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 304 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 int64
    +
    + +

    64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 223 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 int64_t
    +
    + +

    64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 308 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 int8
    +
    + +

    8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 220 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 int8_t
    +
    + +

    8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 296 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef float32 lowp_f32
    +
    + +

    Low 32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1356 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_f32mat2x2 lowp_f32mat2
    +
    + +

    Low single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 1958 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<f32, lowp> lowp_f32mat2x2
    +
    + +

    Low single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 1918 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<f32, lowp> lowp_f32mat2x3
    +
    + +

    Low single-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1922 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<f32, lowp> lowp_f32mat2x4
    +
    + +

    Low single-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1926 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_f32mat3x3 lowp_f32mat3
    +
    + +

    Low single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1962 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<f32, lowp> lowp_f32mat3x2
    +
    + +

    Low single-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1930 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<f32, lowp> lowp_f32mat3x3
    +
    + +

    Low single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1934 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<f32, lowp> lowp_f32mat3x4
    +
    + +

    Low single-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1938 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_f32mat4x4 lowp_f32mat4
    +
    + +

    Low single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1966 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<f32, lowp> lowp_f32mat4x2
    +
    + +

    Low single-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1942 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<f32, lowp> lowp_f32mat4x3
    +
    + +

    Low single-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1946 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<f32, lowp> lowp_f32mat4x4
    +
    + +

    Low single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1950 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tquat<f32, lowp> lowp_f32quat
    +
    + +

    Low single-precision floating-point quaternion.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2257 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<f32, lowp> lowp_f32vec1
    +
    + +

    Low single-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1642 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<f32, lowp> lowp_f32vec2
    +
    + +

    Low single-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1646 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<f32, lowp> lowp_f32vec3
    +
    + +

    Low single-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1650 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<f32, lowp> lowp_f32vec4
    +
    + +

    Low single-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1654 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef float64 lowp_f64
    +
    + +

    Low 64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1360 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_f64mat2x2 lowp_f64mat2
    +
    + +

    Low double-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Low double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2129 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<f64, lowp> lowp_f64mat2x2
    +
    + +

    Low double-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Low double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2089 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<f64, lowp> lowp_f64mat2x3
    +
    + +

    Low double-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2093 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<f64, lowp> lowp_f64mat2x4
    +
    + +

    Low double-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2097 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_f64mat3x3 lowp_f64mat3
    +
    + +

    Low double-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2133 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<f64, lowp> lowp_f64mat3x2
    +
    + +

    Low double-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2101 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<f64, lowp> lowp_f64mat3x3
    +
    + +

    Low double-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2105 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<f64, lowp> lowp_f64mat3x4
    +
    + +

    Low double-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2109 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_f64mat4x4 lowp_f64mat4
    +
    + +

    Low double-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2137 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<f64, lowp> lowp_f64mat4x2
    +
    + +

    Low double-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2113 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<f64, lowp> lowp_f64mat4x3
    +
    + +

    Low double-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2117 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<f64, lowp> lowp_f64mat4x4
    +
    + +

    Low double-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2121 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tquat<f64, lowp> lowp_f64quat
    +
    + +

    Low double-precision floating-point quaternion.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2261 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<f64, lowp> lowp_f64vec1
    +
    + +

    Low double-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1691 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<f64, lowp> lowp_f64vec2
    +
    + +

    Low double-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1695 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<f64, lowp> lowp_f64vec3
    +
    + +

    Low double-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1699 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<f64, lowp> lowp_f64vec4
    +
    + +

    Low double-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1703 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 lowp_float32
    +
    + +

    Low 32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1340 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 lowp_float32_t
    +
    + +

    Low 32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1348 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 lowp_float64
    +
    + +

    Low 64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1344 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 lowp_float64_t
    +
    + +

    Low 64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1352 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_fmat2x2 lowp_fmat2
    +
    + +

    Low single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 1787 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<f32, lowp> lowp_fmat2x2
    +
    + +

    Low single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 1747 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<f32, lowp> lowp_fmat2x3
    +
    + +

    Low single-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1751 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<f32, lowp> lowp_fmat2x4
    +
    + +

    Low single-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1755 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_fmat3x3 lowp_fmat3
    +
    + +

    Low single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1791 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<f32, lowp> lowp_fmat3x2
    +
    + +

    Low single-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1759 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<f32, lowp> lowp_fmat3x3
    +
    + +

    Low single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1763 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<f32, lowp> lowp_fmat3x4
    +
    + +

    Low single-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1767 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_fmat4x4 lowp_fmat4
    +
    + +

    Low single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1795 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<f32, lowp> lowp_fmat4x2
    +
    + +

    Low single-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1771 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<f32, lowp> lowp_fmat4x3
    +
    + +

    Low single-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1775 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<f32, lowp> lowp_fmat4x4
    +
    + +

    Low single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1779 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<float, lowp> lowp_fvec1
    +
    + +

    Low single-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1559 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<float, lowp> lowp_fvec2
    +
    + +

    Low single-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1563 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<float, lowp> lowp_fvec3
    +
    + +

    Low single-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1567 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<float, lowp> lowp_fvec4
    +
    + +

    Low single-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1571 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 lowp_i16
    +
    + +

    Low precision 16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 164 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<i16, lowp> lowp_i16vec1
    +
    + +

    Low precision 16 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 410 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<i16, lowp> lowp_i16vec2
    +
    + +

    Low precision 16 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 414 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<i16, lowp> lowp_i16vec3
    +
    + +

    Low precision 16 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 418 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<i16, lowp> lowp_i16vec4
    +
    + +

    Low precision 16 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 422 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 lowp_i32
    +
    + +

    Low precision 32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 168 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< i32, lowp > lowp_i32vec1
    +
    + +

    Low precision 32 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 490 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< i32, lowp > lowp_i32vec2
    +
    + +

    Low precision 32 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 494 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< i32, lowp > lowp_i32vec3
    +
    + +

    Low precision 32 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 498 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< i32, lowp > lowp_i32vec4
    +
    + +

    Low precision 32 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 502 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 lowp_i64
    +
    + +

    Low precision 64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 172 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<i64, lowp> lowp_i64vec1
    +
    + +

    Low precision 64 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 649 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<i64, lowp> lowp_i64vec2
    +
    + +

    Low precision 64 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 653 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<i64, lowp> lowp_i64vec3
    +
    + +

    Low precision 64 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 657 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<i64, lowp> lowp_i64vec4
    +
    + +

    Low precision 64 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 661 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 lowp_i8
    +
    + +

    Low precision 8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 160 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<i8, lowp> lowp_i8vec1
    +
    + +

    Low precision 8 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 331 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<i8, lowp> lowp_i8vec2
    +
    + +

    Low precision 8 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 335 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<i8, lowp> lowp_i8vec3
    +
    + +

    Low precision 8 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 339 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<i8, lowp> lowp_i8vec4
    +
    + +

    Low precision 8 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 343 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 lowp_int16
    +
    + +

    Low precision 16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 132 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 lowp_int16_t
    +
    + +

    Low precision 16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 148 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 lowp_int32
    +
    + +

    Low precision 32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 136 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 lowp_int32_t
    +
    + +

    Low precision 32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 152 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 lowp_int64
    +
    + +

    Low precision 64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 140 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 lowp_int64_t
    +
    + +

    Low precision 64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 156 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 lowp_int8
    +
    + +

    Low precision 8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 128 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 lowp_int8_t
    +
    + +

    Low precision 8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 144 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 lowp_u16
    +
    + +

    Low precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 769 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<u16, lowp> lowp_u16vec1
    +
    + +

    Low precision 16 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1019 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<u16, lowp> lowp_u16vec2
    +
    + +

    Low precision 16 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1023 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<u16, lowp> lowp_u16vec3
    +
    + +

    Low precision 16 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1027 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<u16, lowp> lowp_u16vec4
    +
    + +

    Low precision 16 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1031 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 lowp_u32
    +
    + +

    Low precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 773 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< u32, lowp > lowp_u32vec1
    +
    + +

    Low precision 32 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1099 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< u32, lowp > lowp_u32vec2
    +
    + +

    Low precision 32 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1103 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< u32, lowp > lowp_u32vec3
    +
    + +

    Low precision 32 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1107 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< u32, lowp > lowp_u32vec4
    +
    + +

    Low precision 32 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1111 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 lowp_u64
    +
    + +

    Low precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 777 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<u64, lowp> lowp_u64vec1
    +
    + +

    Low precision 64 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1258 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<u64, lowp> lowp_u64vec2
    +
    + +

    Low precision 64 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1262 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<u64, lowp> lowp_u64vec3
    +
    + +

    Low precision 64 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1266 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<u64, lowp> lowp_u64vec4
    +
    + +

    Low precision 64 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1270 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 lowp_u8
    +
    + +

    Low precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 765 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<u8, lowp> lowp_u8vec1
    +
    + +

    Low precision 8 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 940 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<u8, lowp> lowp_u8vec2
    +
    + +

    Low precision 8 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 944 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<u8, lowp> lowp_u8vec3
    +
    + +

    Low precision 8 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 948 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<u8, lowp> lowp_u8vec4
    +
    + +

    Low precision 8 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 952 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 lowp_uint16
    +
    + +

    Low precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 735 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 lowp_uint16_t
    +
    + +

    Low precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 752 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 lowp_uint32
    +
    + +

    Low precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 739 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 lowp_uint32_t
    +
    + +

    Low precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 756 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 lowp_uint64
    +
    + +

    Low precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 743 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 lowp_uint64_t
    +
    + +

    Low precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 760 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 lowp_uint8
    +
    + +

    Low precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 731 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 lowp_uint8_t
    +
    + +

    Low precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 748 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef lowp_vec1_t lowp_vec1
    +
    + +

    Low single-precision floating-point vector of 1 component.

    +

    1 component vector of low precision floating-point numbers.

    +
    See also
    GLM_GTC_type_precision
    +

    There is no guarantee on the actual precision.

    See also
    GLM_GTC_vec1 extension.
    + +

    Definition at line 1543 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef float32 mediump_f32
    +
    + +

    Medium 32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1430 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_f32mat2x2 mediump_f32mat2
    +
    + +

    Medium single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Medium single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2015 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<f32, mediump> mediump_f32mat2x2
    +
    + +

    High single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 1975 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<f32, mediump> mediump_f32mat2x3
    +
    + +

    Medium single-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1979 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<f32, mediump> mediump_f32mat2x4
    +
    + +

    Medium single-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1983 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_f32mat3x3 mediump_f32mat3
    +
    + +

    Medium single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2019 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<f32, mediump> mediump_f32mat3x2
    +
    + +

    Medium single-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1987 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<f32, mediump> mediump_f32mat3x3
    +
    + +

    Medium single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1991 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<f32, mediump> mediump_f32mat3x4
    +
    + +

    Medium single-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1995 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_f32mat4x4 mediump_f32mat4
    +
    + +

    Medium single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2023 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<f32, mediump> mediump_f32mat4x2
    +
    + +

    Medium single-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1999 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<f32, mediump> mediump_f32mat4x3
    +
    + +

    Medium single-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2003 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<f32, mediump> mediump_f32mat4x4
    +
    + +

    Medium single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2007 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tquat<f32, mediump> mediump_f32quat
    +
    + +

    Medium single-precision floating-point quaternion.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2265 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<f32, mediump> mediump_f32vec1
    +
    + +

    Medium single-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1658 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<f32, mediump> mediump_f32vec2
    +
    + +

    Medium single-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1662 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<f32, mediump> mediump_f32vec3
    +
    + +

    Medium single-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1666 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<f32, mediump> mediump_f32vec4
    +
    + +

    Medium single-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1670 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef float64 mediump_f64
    +
    + +

    Medium 64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1434 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_f64mat2x2 mediump_f64mat2
    +
    + +

    Medium double-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Medium double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2186 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<f64, mediump> mediump_f64mat2x2
    +
    + +

    Medium double-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Medium double-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 2146 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<f64, mediump> mediump_f64mat2x3
    +
    + +

    Medium double-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2150 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<f64, mediump> mediump_f64mat2x4
    +
    + +

    Medium double-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2154 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_f64mat3x3 mediump_f64mat3
    +
    + +

    Medium double-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2190 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<f64, mediump> mediump_f64mat3x2
    +
    + +

    Medium double-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2158 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<f64, mediump> mediump_f64mat3x3
    +
    + +

    Medium double-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2162 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<f64, mediump> mediump_f64mat3x4
    +
    + +

    Medium double-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2166 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_f64mat4x4 mediump_f64mat4
    +
    + +

    Medium double-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2194 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<f64, mediump> mediump_f64mat4x2
    +
    + +

    Medium double-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2170 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<f64, mediump> mediump_f64mat4x3
    +
    + +

    Medium double-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2174 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<f64, mediump> mediump_f64mat4x4
    +
    + +

    Medium double-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2178 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tquat<f64, mediump> mediump_f64quat
    +
    + +

    Medium double-precision floating-point quaternion.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 2269 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<f64, mediump> mediump_f64vec1
    +
    + +

    Medium double-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1707 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<f64, mediump> mediump_f64vec2
    +
    + +

    Medium double-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1711 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<f64, mediump> mediump_f64vec3
    +
    + +

    Medium double-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1715 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<f64, mediump> mediump_f64vec4
    +
    + +

    Medium double-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1719 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 mediump_float32
    +
    + +

    Medium 32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1414 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float32 mediump_float32_t
    +
    + +

    Medium 32 bit single-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1422 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 mediump_float64
    +
    + +

    Medium 64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1418 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::float64 mediump_float64_t
    +
    + +

    Medium 64 bit double-precision floating-point scalar.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1426 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_fmat2x2 mediump_fmat2
    +
    + +

    Medium single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Medium single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 1844 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x2<f32, mediump> mediump_fmat2x2
    +
    + +

    Medium single-precision floating-point 1x1 matrix.

    +
    See also
    GLM_GTC_type_precision Medium single-precision floating-point 2x2 matrix.
    +
    +GLM_GTC_type_precision
    + +

    Definition at line 1804 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x3<f32, mediump> mediump_fmat2x3
    +
    + +

    Medium single-precision floating-point 2x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1808 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat2x4<f32, mediump> mediump_fmat2x4
    +
    + +

    Medium single-precision floating-point 2x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1812 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_fmat3x3 mediump_fmat3
    +
    + +

    Medium single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1848 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x2<f32, mediump> mediump_fmat3x2
    +
    + +

    Medium single-precision floating-point 3x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1816 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x3<f32, mediump> mediump_fmat3x3
    +
    + +

    Medium single-precision floating-point 3x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1820 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat3x4<f32, mediump> mediump_fmat3x4
    +
    + +

    Medium single-precision floating-point 3x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1824 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_fmat4x4 mediump_fmat4
    +
    + +

    Medium single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1852 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x2<f32, mediump> mediump_fmat4x2
    +
    + +

    Medium single-precision floating-point 4x2 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1828 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x3<f32, mediump> mediump_fmat4x3
    +
    + +

    Medium single-precision floating-point 4x3 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1832 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tmat4x4<f32, mediump> mediump_fmat4x4
    +
    + +

    Medium single-precision floating-point 4x4 matrix.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1836 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<float, mediump> mediump_fvec1
    +
    + +

    Medium single-precision floating-point vector of 1 component.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1592 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<float, mediump> mediump_fvec2
    +
    + +

    Medium Single-precision floating-point vector of 2 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1596 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<float, mediump> mediump_fvec3
    +
    + +

    Medium Single-precision floating-point vector of 3 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1600 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<float, mediump> mediump_fvec4
    +
    + +

    Medium Single-precision floating-point vector of 4 components.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1604 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 mediump_i16
    +
    + +

    Medium precision 16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 212 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<i16, mediump> mediump_i16vec1
    +
    + +

    Medium precision 16 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 427 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<i16, mediump> mediump_i16vec2
    +
    + +

    Medium precision 16 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 431 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<i16, mediump> mediump_i16vec3
    +
    + +

    Medium precision 16 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 435 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<i16, mediump> mediump_i16vec4
    +
    + +

    Medium precision 16 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 439 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 mediump_i32
    +
    + +

    Medium precision 32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 216 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< i32, mediump > mediump_i32vec1
    +
    + +

    Medium precision 32 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 507 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< i32, mediump > mediump_i32vec2
    +
    + +

    Medium precision 32 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 511 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< i32, mediump > mediump_i32vec3
    +
    + +

    Medium precision 32 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 515 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< i32, mediump > mediump_i32vec4
    +
    + +

    Medium precision 32 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 519 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 mediump_i64
    +
    + +

    Medium precision 64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 220 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<i64, mediump> mediump_i64vec1
    +
    + +

    Medium precision 64 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 666 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<i64, mediump> mediump_i64vec2
    +
    + +

    Medium precision 64 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 670 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<i64, mediump> mediump_i64vec3
    +
    + +

    Medium precision 64 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 674 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<i64, mediump> mediump_i64vec4
    +
    + +

    Medium precision 64 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 678 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 mediump_i8
    +
    + +

    Medium precision 8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 208 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<i8, mediump> mediump_i8vec1
    +
    + +

    Medium precision 8 bit signed integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 348 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<i8, mediump> mediump_i8vec2
    +
    + +

    Medium precision 8 bit signed integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 352 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<i8, mediump> mediump_i8vec3
    +
    + +

    Medium precision 8 bit signed integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 356 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<i8, mediump> mediump_i8vec4
    +
    + +

    Medium precision 8 bit signed integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 360 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 mediump_int16
    +
    + +

    Medium precision 16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 180 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int16 mediump_int16_t
    +
    + +

    Medium precision 16 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 196 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 mediump_int32
    +
    + +

    Medium precision 32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 184 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int32 mediump_int32_t
    +
    + +

    Medium precision 32 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 200 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 mediump_int64
    +
    + +

    Medium precision 64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 188 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int64 mediump_int64_t
    +
    + +

    Medium precision 64 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 204 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 mediump_int8
    +
    + +

    Medium precision 8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 176 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::int8 mediump_int8_t
    +
    + +

    Medium precision 8 bit signed integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 192 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 mediump_u16
    +
    + +

    Medium precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 819 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<u16, mediump> mediump_u16vec1
    +
    + +

    Medium precision 16 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1036 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<u16, mediump> mediump_u16vec2
    +
    + +

    Medium precision 16 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1040 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<u16, mediump> mediump_u16vec3
    +
    + +

    Medium precision 16 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1044 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<u16, mediump> mediump_u16vec4
    +
    + +

    Medium precision 16 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1048 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 mediump_u32
    +
    + +

    Medium precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 823 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< u32, mediump > mediump_u32vec1
    +
    + +

    Medium precision 32 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1116 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< u32, mediump > mediump_u32vec2
    +
    + +

    Medium precision 32 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1120 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< u32, mediump > mediump_u32vec3
    +
    + +

    Medium precision 32 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1124 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< u32, mediump > mediump_u32vec4
    +
    + +

    Medium precision 32 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1128 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 mediump_u64
    +
    + +

    Medium precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 827 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<u64, mediump> mediump_u64vec1
    +
    + +

    Medium precision 64 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1275 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<u64, mediump> mediump_u64vec2
    +
    + +

    Medium precision 64 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1279 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<u64, mediump> mediump_u64vec3
    +
    + +

    Medium precision 64 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1283 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<u64, mediump> mediump_u64vec4
    +
    + +

    Medium precision 64 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1287 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 mediump_u8
    +
    + +

    Medium precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 815 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<u8, mediump> mediump_u8vec1
    +
    + +

    Medium precision 8 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 957 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<u8, mediump> mediump_u8vec2
    +
    + +

    Medium precision 8 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 961 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<u8, mediump> mediump_u8vec3
    +
    + +

    Medium precision 8 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 965 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<u8, mediump> mediump_u8vec4
    +
    + +

    Medium precision 8 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 969 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 mediump_uint16
    +
    + +

    Medium precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 787 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 mediump_uint16_t
    +
    + +

    Medium precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 803 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 mediump_uint32
    +
    + +

    Medium precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 791 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 mediump_uint32_t
    +
    + +

    Medium precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 807 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 mediump_uint64
    +
    + +

    Medium precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 795 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 mediump_uint64_t
    +
    + +

    Medium precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 811 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 mediump_uint8
    +
    + +

    Medium precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 783 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 mediump_uint8_t
    +
    + +

    Medium precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 799 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef mediump_vec1_t mediump_vec1
    +
    + +

    Medium single-precision floating-point vector of 1 component.

    +

    1 component vector of medium precision floating-point numbers.

    +
    See also
    GLM_GTC_type_precision
    +

    There is no guarantee on the actual precision.

    See also
    GLM_GTC_vec1 extension.
    + +

    Definition at line 1576 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 u16
    +
    + +

    16 bit unsigned integer type.

    +

    Default precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 926 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< u16, defaultp > u16vec1
    +
    + +

    Default precision 16 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1081 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< u16, defaultp > u16vec2
    +
    + +

    Default precision 16 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1085 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< u16, defaultp > u16vec3
    +
    + +

    Default precision 16 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1089 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< u16, defaultp > u16vec4
    +
    + +

    Default precision 16 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1093 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 u32
    +
    + +

    32 bit unsigned integer type.

    +

    Default precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 930 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< u32, defaultp > u32vec1
    +
    + +

    Default precision 32 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1160 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< u32, defaultp > u32vec2
    +
    + +

    Default precision 32 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1164 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< u32, defaultp > u32vec3
    +
    + +

    Default precision 32 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1168 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< u32, defaultp > u32vec4
    +
    + +

    Default precision 32 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1172 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 u64
    +
    + +

    64 bit unsigned integer type.

    +

    Default precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 934 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< u64, defaultp > u64vec1
    +
    + +

    Default precision 64 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1319 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< u64, defaultp > u64vec2
    +
    + +

    Default precision 64 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1323 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< u64, defaultp > u64vec3
    +
    + +

    Default precision 64 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1327 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< u64, defaultp > u64vec4
    +
    + +

    Default precision 64 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1331 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 u8
    +
    + +

    8 bit unsigned integer type.

    +

    Default precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 922 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1< u8, defaultp > u8vec1
    +
    + +

    Default precision 8 bit unsigned integer scalar type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1001 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2< u8, defaultp > u8vec2
    +
    + +

    Default precision 8 bit unsigned integer vector of 2 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1005 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3< u8, defaultp > u8vec3
    +
    + +

    Default precision 8 bit unsigned integer vector of 3 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1009 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4< u8, defaultp > u8vec4
    +
    + +

    Default precision 8 bit unsigned integer vector of 4 components type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 1013 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 uint16
    +
    + +

    16 bit unsigned integer type.

    +

    Default precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 226 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint16 uint16_t
    +
    + +

    16 bit unsigned integer type.

    +

    Default precision 16 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 909 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 uint32
    +
    + +

    32 bit unsigned integer type.

    +

    Default precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 227 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint32 uint32_t
    +
    + +

    32 bit unsigned integer type.

    +

    Default precision 32 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 913 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 uint64
    +
    + +

    64 bit unsigned integer type.

    +

    Default precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 228 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint64 uint64_t
    +
    + +

    64 bit unsigned integer type.

    +

    Default precision 64 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 917 of file fwd.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 uint8
    +
    + +

    8 bit unsigned integer type.

    +

    Default precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 225 of file type_int.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef detail::uint8 uint8_t
    +
    + +

    8 bit unsigned integer type.

    +

    Default precision 8 bit unsigned integer type.

    +
    See also
    GLM_GTC_type_precision
    + +

    Definition at line 905 of file fwd.hpp.

    @@ -891,7 +8809,7 @@ Functions diff --git a/doc/api/a00180.html b/doc/api/a00180.html index f7944c46..c57066e1 100644 --- a/doc/api/a00180.html +++ b/doc/api/a00180.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_random + +0.9.6: GLM_GTC_type_ptr @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,214 +39,411 @@
    -
    +
    GLM_GTC_type_ptr
    - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    GLM_FUNC_DECL detail::tvec3< T,
    -defaultp > 
    ballRand (T const &Radius)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec2< T,
    -defaultp > 
    circularRand (T const &Radius)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec2< T,
    -defaultp > 
    diskRand (T const &Radius)
     
    template<typename genType >
    GLM_FUNC_DECL genType gaussRand (genType const &Mean, genType const &Deviation)
     
    template<typename genType >
    GLM_FUNC_DECL genType linearRand (genType const &Min, genType const &Max)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec3< T,
    -defaultp > 
    sphericalRand (T const &Radius)
     
    template<typename T >
    GLM_FUNC_DECL tmat2x2< T,
    +defaultp > 
    make_mat2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat2x2< T,
    +defaultp > 
    make_mat2x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat2x3< T,
    +defaultp > 
    make_mat2x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat2x4< T,
    +defaultp > 
    make_mat2x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x3< T,
    +defaultp > 
    make_mat3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x2< T,
    +defaultp > 
    make_mat3x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x3< T,
    +defaultp > 
    make_mat3x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x4< T,
    +defaultp > 
    make_mat3x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    make_mat4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x2< T,
    +defaultp > 
    make_mat4x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x3< T,
    +defaultp > 
    make_mat4x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    make_mat4x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tquat< T, defaultp > make_quat (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tvec2< T, defaultp > make_vec2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tvec3< T, defaultp > make_vec3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL tvec4< T, defaultp > make_vec4 (T const *const ptr)
     
    template<typename genType >
    GLM_FUNC_DECL
    +genType::value_type const * 
    value_ptr (genType const &vec)
     

    Detailed Description

    -

    Generate random number from various distribution methods.

    -

    <glm/gtc/random.hpp> need to be included to use these functionalities.

    +

    Handles the interaction between pointers and vector, matrix types.

    +

    This extension defines an overloaded function, glm::value_ptr, which takes any of the core template types. It returns a pointer to the memory layout of the object. Matrix types store their values in column-major order.

    +

    This is useful for uploading data to matrices or copying data to buffer objects.

    +

    Example:

    #include <glm/glm.hpp>
    + +
    +
    glm::vec3 aVector(3);
    +
    glm::mat4 someMatrix(1.0);
    +
    +
    glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));
    +
    glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix));
    +

    <glm/gtc/type_ptr.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + +
    GLM_FUNC_DECL detail::tvec3<T, defaultp> glm::ballRand GLM_FUNC_DECL tmat2x2<T, defaultp> glm::make_mat2 (T const & Radius)T const *const ptr)
    -

    Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius.

    -
    Parameters
    - - -
    Radius
    -
    -
    -
    See Also
    GLM_GTC_random
    +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    - +
    - + - - + +
    GLM_FUNC_DECL detail::tvec2<T, defaultp> glm::circularRand GLM_FUNC_DECL tmat2x2<T, defaultp> glm::make_mat2x2 (T const & Radius)T const *const ptr)
    -

    Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius.

    -
    Parameters
    - - -
    Radius
    -
    -
    -
    See Also
    GLM_GTC_random
    +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    - +
    - + - - + +
    GLM_FUNC_DECL detail::tvec2<T, defaultp> glm::diskRand GLM_FUNC_DECL tmat2x3<T, defaultp> glm::make_mat2x3 (T const & Radius)T const *const ptr)
    -

    Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius.

    -
    Parameters
    - - -
    Radius
    -
    -
    -
    See Also
    GLM_GTC_random
    +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    - +
    - + + + + + + +
    GLM_FUNC_DECL genType glm::gaussRand GLM_FUNC_DECL tmat2x4<T, defaultp> glm::make_mat2x4 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat3x3<T, defaultp> glm::make_mat3 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat3x2<T, defaultp> glm::make_mat3x2 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat3x3<T, defaultp> glm::make_mat3x3 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat3x4<T, defaultp> glm::make_mat3x4 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::make_mat4 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat4x2<T, defaultp> glm::make_mat4x2 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat4x3<T, defaultp> glm::make_mat4x3 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::make_mat4x4 (T const *const ptr)
    +
    + +

    Build a matrix from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tquat<T, defaultp> glm::make_quat (T const *const ptr)
    +
    + +

    Build a quaternion from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec2<T, defaultp> glm::make_vec2 (T const *const ptr)
    +
    + +

    Build a vector from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, defaultp> glm::make_vec3 (T const *const ptr)
    +
    + +

    Build a vector from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec4<T, defaultp> glm::make_vec4 (T const *const ptr)
    +
    + +

    Build a vector from a pointer.

    +
    See also
    GLM_GTC_type_ptr
    + +
    +
    + +
    +
    + + + - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType::value_type const* glm::value_ptr ( genType const & Mean,
    genType const & Deviation 
    )
    -
    - -

    Generate random numbers in the interval [Min, Max], according a gaussian distribution.

    -
    Parameters
    - - - -
    Mean
    Deviation
    -
    -
    -
    See Also
    GLM_GTC_random
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::linearRand (genType const & Min,
    genType const & Max 
    )
    -
    - -

    Generate random numbers in the interval [Min, Max], according a linear distribution.

    -
    Parameters
    - - - -
    Min
    Max
    -
    -
    -
    Template Parameters
    - - -
    genTypeValue type. Currently supported: half (not recommanded), float or double scalars and vectors.
    -
    -
    -
    See Also
    GLM_GTC_random
    - -
    -
    - -
    -
    - - - - - - +
    GLM_FUNC_DECL detail::tvec3<T, defaultp> glm::sphericalRand (T const & Radius)vec)
    -

    Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius.

    -
    Parameters
    - - -
    Radius
    -
    -
    -
    See Also
    GLM_GTC_random
    +

    Return the constant address to the data of the input parameter.

    +
    See also
    GLM_GTC_type_ptr
    @@ -257,7 +452,7 @@ defaultp >  diff --git a/doc/api/a00181.html b/doc/api/a00181.html index f9253c02..8f6fd41c 100644 --- a/doc/api/a00181.html +++ b/doc/api/a00181.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_reciprocal + +0.9.6: GLM_GTC_ulp @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,59 +39,99 @@
    -
    GLM_GTC_reciprocal
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType acot (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acoth (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsc (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType acsch (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asec (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType asech (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType cot (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType coth (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType csc (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType csch (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sec (genType const &angle)
     
    template<typename genType >
    GLM_FUNC_DECL genType sech (genType const &angle)
     
    template<typename T >
    GLM_FUNC_DECL uint float_distance (T const &x, T const &y)
     
    template<typename T , template< typename > class vecType>
    GLM_FUNC_DECL vecType< uint > float_distance (vecType< T > const &x, vecType< T > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x, uint const &Distance)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x, uint const &Distance)
     

    Detailed Description

    -

    Define secant, cosecant and cotangent functions.

    -

    <glm/gtc/reciprocal.hpp> need to be included to use these features.

    +

    Allow the measurement of the accuracy of a function against a reference implementation.

    +

    This extension works on floating-point data and provide results in ULP. <glm/gtc/ulp.hpp> need to be included to use these features.

    Function Documentation

    - +
    - + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::acot GLM_FUNC_DECL uint glm::float_distance (T const & x,
    T const & y 
    )
    +
    + +

    Return the distance in the number of ULP between 2 scalars.

    +
    See also
    GLM_GTC_ulp
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<uint> glm::float_distance (vecType< T > const & x,
    vecType< T > const & y 
    )
    +
    + +

    Return the distance in the number of ULP between 2 vectors.

    +
    See also
    GLM_GTC_ulp
    + +
    +
    + +
    +
    + + + @@ -102,17 +140,46 @@ Functions
    GLM_FUNC_DECL genType glm::next_float ( genType const &  x)
    -

    Inverse cotangent function.

    -
    See Also
    GLM_GTC_reciprocal
    +

    Return the next ULP value(s) after the input value(s).

    +
    See also
    GLM_GTC_ulp
    - +
    - + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::acoth GLM_FUNC_DECL genType glm::next_float (genType const & x,
    uint const & Distance 
    )
    +
    + +

    Return the value(s) ULP distance after the input value(s).

    +
    See also
    GLM_GTC_ulp
    + +
    +
    + +
    +
    + + + @@ -121,201 +188,37 @@ Functions
    GLM_FUNC_DECL genType glm::prev_float ( genType const &  x)
    -

    Inverse cotangent hyperbolic function.

    -
    See Also
    GLM_GTC_reciprocal
    +

    Return the previous ULP value(s) before the input value(s).

    +
    See also
    GLM_GTC_ulp
    - +
    - + - - + -
    GLM_FUNC_DECL genType glm::acsc GLM_FUNC_DECL genType glm::prev_float ( genType const & x)x,
    -
    - -

    Inverse cosecant function.

    -
    See Also
    GLM_GTC_reciprocal
    - -
    -
    - -
    -
    - - - - - + + + -
    GLM_FUNC_DECL genType glm::acsch (genType const & x) uint const & Distance 
    -
    - -

    Inverse cosecant hyperbolic function.

    -
    See Also
    GLM_GTC_reciprocal
    - -
    -
    - -
    -
    - - - - - + +
    GLM_FUNC_DECL genType glm::asec (genType const & x) )
    -

    Inverse secant function.

    -
    See Also
    GLM_GTC_reciprocal
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::asech (genType const & x)
    -
    - -

    Inverse secant hyperbolic function.

    -
    See Also
    GLM_GTC_reciprocal
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::cot (genType const & angle)
    -
    - -

    Cotangent function.

    -

    adjacent / opposite or 1 / tan(x)

    -
    See Also
    GLM_GTC_reciprocal
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::coth (genType const & angle)
    -
    - -

    Cotangent hyperbolic function.

    -
    See Also
    GLM_GTC_reciprocal
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::csc (genType const & angle)
    -
    - -

    Cosecant function.

    -

    hypotenuse / opposite or 1 / sin(x)

    -
    See Also
    GLM_GTC_reciprocal
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::csch (genType const & angle)
    -
    - -

    Cosecant hyperbolic function.

    -
    See Also
    GLM_GTC_reciprocal
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::sec (genType const & angle)
    -
    - -

    Secant function.

    -

    hypotenuse / adjacent or 1 / cos(x)

    -
    See Also
    GLM_GTC_reciprocal
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::sech (genType const & angle)
    -
    - -

    Secant hyperbolic function.

    -
    See Also
    GLM_GTC_reciprocal
    +

    Return the value(s) ULP distance before the input value(s).

    +
    See also
    GLM_GTC_ulp
    @@ -324,7 +227,7 @@ Functions diff --git a/doc/api/a00182.html b/doc/api/a00182.html index 388110e5..5e439483 100644 --- a/doc/api/a00182.html +++ b/doc/api/a00182.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_type_precision + +0.9.6: GLM_GTC_vec1 @@ -16,9 +16,9 @@ + @@ -26,8933 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    -
    GLM_GTC_type_precision
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    typedef highp_float32_t f32
     
    typedef f32mat2x2 f32mat2
     
    typedef highp_f32mat2x2 f32mat2x2
     
    typedef highp_f32mat2x3 f32mat2x3
     
    typedef highp_f32mat2x4 f32mat2x4
     
    typedef f32mat3x3 f32mat3
     
    typedef highp_f32mat3x2 f32mat3x2
     
    typedef highp_f32mat3x3 f32mat3x3
     
    typedef highp_f32mat3x4 f32mat3x4
     
    typedef f32mat4x4 f32mat4
     
    typedef highp_f32mat4x2 f32mat4x2
     
    typedef highp_f32mat4x3 f32mat4x3
     
    typedef highp_f32mat4x4 f32mat4x4
     
    typedef highp_f32quat f32quat
     
    typedef highp_f32vec1 f32vec1
     
    typedef highp_f32vec2 f32vec2
     
    typedef highp_f32vec3 f32vec3
     
    typedef highp_f32vec4 f32vec4
     
    typedef highp_float64_t f64
     
    typedef f64mat2x2 f64mat2
     
    typedef highp_f64mat2x2 f64mat2x2
     
    typedef highp_f64mat2x3 f64mat2x3
     
    typedef highp_f64mat2x4 f64mat2x4
     
    typedef f64mat3x3 f64mat3
     
    typedef highp_f64mat3x2 f64mat3x2
     
    typedef highp_f64mat3x3 f64mat3x3
     
    typedef highp_f64mat3x4 f64mat3x4
     
    typedef f64mat4x4 f64mat4
     
    typedef highp_f64mat4x2 f64mat4x2
     
    typedef highp_f64mat4x3 f64mat4x3
     
    typedef highp_f64mat4x4 f64mat4x4
     
    typedef highp_f64quat f64quat
     
    typedef highp_f64vec1 f64vec1
     
    typedef highp_f64vec2 f64vec2
     
    typedef highp_f64vec3 f64vec3
     
    typedef highp_f64vec4 f64vec4
     
    typedef float float32
     
    typedef highp_float32_t float32_t
     
    typedef double float64
     
    typedef highp_float64_t float64_t
     
    typedef fmat2x2 fmat2
     
    typedef highp_f32mat2x2 fmat2x2
     
    typedef highp_f32mat2x3 fmat2x3
     
    typedef highp_f32mat2x4 fmat2x4
     
    typedef fmat3x3 fmat3
     
    typedef highp_f32mat3x2 fmat3x2
     
    typedef highp_f32mat3x3 fmat3x3
     
    typedef highp_f32mat3x4 fmat3x4
     
    typedef fmat4x4 fmat4
     
    typedef highp_f32mat4x2 fmat4x2
     
    typedef highp_f32mat4x3 fmat4x3
     
    typedef highp_f32mat4x4 fmat4x4
     
    typedef quat fquat
     
    typedef highp_f32vec1 fvec1
     
    typedef highp_f32vec2 fvec2
     
    typedef highp_f32vec3 fvec3
     
    typedef highp_f32vec4 fvec4
     
    typedef float32 highp_f32
     
    typedef highp_f32mat2x2 highp_f32mat2
     
    typedef detail::tmat2x2< f32,
    -highp > 
    highp_f32mat2x2
     
    typedef detail::tmat2x3< f32,
    -highp > 
    highp_f32mat2x3
     
    typedef detail::tmat2x4< f32,
    -highp > 
    highp_f32mat2x4
     
    typedef highp_f32mat3x3 highp_f32mat3
     
    typedef detail::tmat3x2< f32,
    -highp > 
    highp_f32mat3x2
     
    typedef detail::tmat3x3< f32,
    -highp > 
    highp_f32mat3x3
     
    typedef detail::tmat3x4< f32,
    -highp > 
    highp_f32mat3x4
     
    typedef highp_f32mat4x4 highp_f32mat4
     
    typedef detail::tmat4x2< f32,
    -highp > 
    highp_f32mat4x2
     
    typedef detail::tmat4x3< f32,
    -highp > 
    highp_f32mat4x3
     
    typedef detail::tmat4x4< f32,
    -highp > 
    highp_f32mat4x4
     
    typedef detail::tquat< f32, highp > highp_f32quat
     
    typedef detail::tvec1< f32, highp > highp_f32vec1
     
    typedef detail::tvec2< f32, highp > highp_f32vec2
     
    typedef detail::tvec3< f32, highp > highp_f32vec3
     
    typedef detail::tvec4< f32, highp > highp_f32vec4
     
    typedef float64 highp_f64
     
    typedef highp_f64mat2x2 highp_f64mat2
     
    typedef detail::tmat2x2< f64,
    -highp > 
    highp_f64mat2x2
     
    typedef detail::tmat2x3< f64,
    -highp > 
    highp_f64mat2x3
     
    typedef detail::tmat2x4< f64,
    -highp > 
    highp_f64mat2x4
     
    typedef highp_f64mat3x3 highp_f64mat3
     
    typedef detail::tmat3x2< f64,
    -highp > 
    highp_f64mat3x2
     
    typedef detail::tmat3x3< f64,
    -highp > 
    highp_f64mat3x3
     
    typedef detail::tmat3x4< f64,
    -highp > 
    highp_f64mat3x4
     
    typedef highp_f64mat4x4 highp_f64mat4
     
    typedef detail::tmat4x2< f64,
    -highp > 
    highp_f64mat4x2
     
    typedef detail::tmat4x3< f64,
    -highp > 
    highp_f64mat4x3
     
    typedef detail::tmat4x4< f64,
    -highp > 
    highp_f64mat4x4
     
    typedef detail::tquat< f64, highp > highp_f64quat
     
    typedef detail::tvec1< f64, highp > highp_f64vec1
     
    typedef detail::tvec2< f64, highp > highp_f64vec2
     
    typedef detail::tvec3< f64, highp > highp_f64vec3
     
    typedef detail::tvec4< f64, highp > highp_f64vec4
     
    typedef detail::float32 highp_float32
     
    typedef detail::float32 highp_float32_t
     
    typedef detail::float64 highp_float64
     
    typedef detail::float64 highp_float64_t
     
    typedef highp_fmat2x2 highp_fmat2
     
    typedef detail::tmat2x2< f32,
    -highp > 
    highp_fmat2x2
     
    typedef detail::tmat2x3< f32,
    -highp > 
    highp_fmat2x3
     
    typedef detail::tmat2x4< f32,
    -highp > 
    highp_fmat2x4
     
    typedef highp_fmat3x3 highp_fmat3
     
    typedef detail::tmat3x2< f32,
    -highp > 
    highp_fmat3x2
     
    typedef detail::tmat3x3< f32,
    -highp > 
    highp_fmat3x3
     
    typedef detail::tmat3x4< f32,
    -highp > 
    highp_fmat3x4
     
    typedef highp_fmat4x4 highp_fmat4
     
    typedef detail::tmat4x2< f32,
    -highp > 
    highp_fmat4x2
     
    typedef detail::tmat4x3< f32,
    -highp > 
    highp_fmat4x3
     
    typedef detail::tmat4x4< f32,
    -highp > 
    highp_fmat4x4
     
    typedef detail::tvec1< float,
    -highp > 
    highp_fvec1
     
    typedef detail::tvec2< float,
    -highp > 
    highp_fvec2
     
    typedef detail::tvec3< float,
    -highp > 
    highp_fvec3
     
    typedef detail::tvec4< float,
    -highp > 
    highp_fvec4
     
    typedef detail::int16 highp_i16
     
    typedef detail::tvec1< i16, highp > highp_i16vec1
     
    typedef detail::tvec2< i16, highp > highp_i16vec2
     
    typedef detail::tvec3< i16, highp > highp_i16vec3
     
    typedef detail::tvec4< i16, highp > highp_i16vec4
     
    typedef detail::int32 highp_i32
     
    typedef detail::tvec1< i32, highp > highp_i32vec1
     
    typedef detail::tvec2< i32, highp > highp_i32vec2
     
    typedef detail::tvec3< i32, highp > highp_i32vec3
     
    typedef detail::tvec4< i32, highp > highp_i32vec4
     
    typedef detail::int64 highp_i64
     
    typedef detail::tvec1< i64, highp > highp_i64vec1
     
    typedef detail::tvec2< i64, highp > highp_i64vec2
     
    typedef detail::tvec3< i64, highp > highp_i64vec3
     
    typedef detail::tvec4< i64, highp > highp_i64vec4
     
    typedef detail::int8 highp_i8
     
    typedef detail::tvec1< i8, highp > highp_i8vec1
     
    typedef detail::tvec2< i8, highp > highp_i8vec2
     
    typedef detail::tvec3< i8, highp > highp_i8vec3
     
    typedef detail::tvec4< i8, highp > highp_i8vec4
     
    typedef detail::int16 highp_int16
     
    typedef detail::int16 highp_int16_t
     
    typedef detail::int32 highp_int32
     
    typedef detail::int32 highp_int32_t
     
    typedef detail::int64 highp_int64
     
    typedef detail::int64 highp_int64_t
     
    typedef detail::int8 highp_int8
     
    typedef detail::int8 highp_int8_t
     
    typedef detail::uint16 highp_u16
     
    typedef detail::tvec1< u16, highp > highp_u16vec1
     
    typedef detail::tvec2< u16, highp > highp_u16vec2
     
    typedef detail::tvec3< u16, highp > highp_u16vec3
     
    typedef detail::tvec4< u16, highp > highp_u16vec4
     
    typedef detail::uint32 highp_u32
     
    typedef detail::tvec1< u32, highp > highp_u32vec1
     
    typedef detail::tvec2< u32, highp > highp_u32vec2
     
    typedef detail::tvec3< u32, highp > highp_u32vec3
     
    typedef detail::tvec4< u32, highp > highp_u32vec4
     
    typedef detail::uint64 highp_u64
     
    typedef detail::tvec1< u64, highp > highp_u64vec1
     
    typedef detail::tvec2< u64, highp > highp_u64vec2
     
    typedef detail::tvec3< u64, highp > highp_u64vec3
     
    typedef detail::tvec4< u64, highp > highp_u64vec4
     
    typedef detail::uint8 highp_u8
     
    typedef detail::tvec1< u8, highp > highp_u8vec1
     
    typedef detail::tvec2< u8, highp > highp_u8vec2
     
    typedef detail::tvec3< u8, highp > highp_u8vec3
     
    typedef detail::tvec4< u8, highp > highp_u8vec4
     
    typedef detail::uint16 highp_uint16
     
    typedef detail::uint16 highp_uint16_t
     
    typedef detail::uint32 highp_uint32
     
    typedef detail::uint32 highp_uint32_t
     
    typedef detail::uint64 highp_uint64
     
    typedef detail::uint64 highp_uint64_t
     
    typedef detail::uint8 highp_uint8
     
    typedef detail::uint8 highp_uint8_t
     
    typedef detail::tvec1< float,
    -highp > 
    highp_vec1
     
    typedef detail::int16 i16
     
    typedef highp_i16vec1 i16vec1
     
    typedef highp_i16vec2 i16vec2
     
    typedef highp_i16vec3 i16vec3
     
    typedef highp_i16vec4 i16vec4
     
    typedef detail::int32 i32
     
    typedef highp_i32vec1 i32vec1
     
    typedef highp_i32vec2 i32vec2
     
    typedef highp_i32vec3 i32vec3
     
    typedef highp_i32vec4 i32vec4
     
    typedef detail::int64 i64
     
    typedef highp_i64vec1 i64vec1
     
    typedef highp_i64vec2 i64vec2
     
    typedef highp_i64vec3 i64vec3
     
    typedef highp_i64vec4 i64vec4
     
    typedef detail::int8 i8
     
    typedef highp_i8vec1 i8vec1
     
    typedef highp_i8vec2 i8vec2
     
    typedef highp_i8vec3 i8vec3
     
    typedef highp_i8vec4 i8vec4
     
    typedef detail::int16 int16
     
    typedef detail::int16 int16_t
     
    typedef detail::int32 int32
     
    typedef detail::int32 int32_t
     
    typedef detail::int64 int64
     
    typedef detail::int64 int64_t
     
    typedef detail::int8 int8
     
    typedef detail::int8 int8_t
     
    typedef float32 lowp_f32
     
    typedef lowp_f32mat2x2 lowp_f32mat2
     
    typedef detail::tmat2x2< f32,
    -lowp > 
    lowp_f32mat2x2
     
    typedef detail::tmat2x3< f32,
    -lowp > 
    lowp_f32mat2x3
     
    typedef detail::tmat2x4< f32,
    -lowp > 
    lowp_f32mat2x4
     
    typedef lowp_f32mat3x3 lowp_f32mat3
     
    typedef detail::tmat3x2< f32,
    -lowp > 
    lowp_f32mat3x2
     
    typedef detail::tmat3x3< f32,
    -lowp > 
    lowp_f32mat3x3
     
    typedef detail::tmat3x4< f32,
    -lowp > 
    lowp_f32mat3x4
     
    typedef lowp_f32mat4x4 lowp_f32mat4
     
    typedef detail::tmat4x2< f32,
    -lowp > 
    lowp_f32mat4x2
     
    typedef detail::tmat4x3< f32,
    -lowp > 
    lowp_f32mat4x3
     
    typedef detail::tmat4x4< f32,
    -lowp > 
    lowp_f32mat4x4
     
    typedef detail::tquat< f32, lowp > lowp_f32quat
     
    typedef detail::tvec1< f32, lowp > lowp_f32vec1
     
    typedef detail::tvec2< f32, lowp > lowp_f32vec2
     
    typedef detail::tvec3< f32, lowp > lowp_f32vec3
     
    typedef detail::tvec4< f32, lowp > lowp_f32vec4
     
    typedef float64 lowp_f64
     
    typedef lowp_f64mat2x2 lowp_f64mat2
     
    typedef detail::tmat2x2< f64,
    -lowp > 
    lowp_f64mat2x2
     
    typedef detail::tmat2x3< f64,
    -lowp > 
    lowp_f64mat2x3
     
    typedef detail::tmat2x4< f64,
    -lowp > 
    lowp_f64mat2x4
     
    typedef lowp_f64mat3x3 lowp_f64mat3
     
    typedef detail::tmat3x2< f64,
    -lowp > 
    lowp_f64mat3x2
     
    typedef detail::tmat3x3< f64,
    -lowp > 
    lowp_f64mat3x3
     
    typedef detail::tmat3x4< f64,
    -lowp > 
    lowp_f64mat3x4
     
    typedef lowp_f64mat4x4 lowp_f64mat4
     
    typedef detail::tmat4x2< f64,
    -lowp > 
    lowp_f64mat4x2
     
    typedef detail::tmat4x3< f64,
    -lowp > 
    lowp_f64mat4x3
     
    typedef detail::tmat4x4< f64,
    -lowp > 
    lowp_f64mat4x4
     
    typedef detail::tquat< f64, lowp > lowp_f64quat
     
    typedef detail::tvec1< f64, lowp > lowp_f64vec1
     
    typedef detail::tvec2< f64, lowp > lowp_f64vec2
     
    typedef detail::tvec3< f64, lowp > lowp_f64vec3
     
    typedef detail::tvec4< f64, lowp > lowp_f64vec4
     
    typedef detail::float32 lowp_float32
     
    typedef detail::float32 lowp_float32_t
     
    typedef detail::float64 lowp_float64
     
    typedef detail::float64 lowp_float64_t
     
    typedef lowp_fmat2x2 lowp_fmat2
     
    typedef detail::tmat2x2< f32,
    -lowp > 
    lowp_fmat2x2
     
    typedef detail::tmat2x3< f32,
    -lowp > 
    lowp_fmat2x3
     
    typedef detail::tmat2x4< f32,
    -lowp > 
    lowp_fmat2x4
     
    typedef lowp_fmat3x3 lowp_fmat3
     
    typedef detail::tmat3x2< f32,
    -lowp > 
    lowp_fmat3x2
     
    typedef detail::tmat3x3< f32,
    -lowp > 
    lowp_fmat3x3
     
    typedef detail::tmat3x4< f32,
    -lowp > 
    lowp_fmat3x4
     
    typedef lowp_fmat4x4 lowp_fmat4
     
    typedef detail::tmat4x2< f32,
    -lowp > 
    lowp_fmat4x2
     
    typedef detail::tmat4x3< f32,
    -lowp > 
    lowp_fmat4x3
     
    typedef detail::tmat4x4< f32,
    -lowp > 
    lowp_fmat4x4
     
    typedef detail::tvec1< float,
    -lowp > 
    lowp_fvec1
     
    typedef detail::tvec2< float,
    -lowp > 
    lowp_fvec2
     
    typedef detail::tvec3< float,
    -lowp > 
    lowp_fvec3
     
    typedef detail::tvec4< float,
    -lowp > 
    lowp_fvec4
     
    typedef detail::int16 lowp_i16
     
    typedef detail::tvec1< i16, lowp > lowp_i16vec1
     
    typedef detail::tvec2< i16, lowp > lowp_i16vec2
     
    typedef detail::tvec3< i16, lowp > lowp_i16vec3
     
    typedef detail::tvec4< i16, lowp > lowp_i16vec4
     
    typedef detail::int32 lowp_i32
     
    typedef detail::tvec1< i32, lowp > lowp_i32vec1
     
    typedef detail::tvec2< i32, lowp > lowp_i32vec2
     
    typedef detail::tvec3< i32, lowp > lowp_i32vec3
     
    typedef detail::tvec4< i32, lowp > lowp_i32vec4
     
    typedef detail::int64 lowp_i64
     
    typedef detail::tvec1< i64, lowp > lowp_i64vec1
     
    typedef detail::tvec2< i64, lowp > lowp_i64vec2
     
    typedef detail::tvec3< i64, lowp > lowp_i64vec3
     
    typedef detail::tvec4< i64, lowp > lowp_i64vec4
     
    typedef detail::int8 lowp_i8
     
    typedef detail::tvec1< i8, lowp > lowp_i8vec1
     
    typedef detail::tvec2< i8, lowp > lowp_i8vec2
     
    typedef detail::tvec3< i8, lowp > lowp_i8vec3
     
    typedef detail::tvec4< i8, lowp > lowp_i8vec4
     
    typedef detail::int16 lowp_int16
     
    typedef detail::int16 lowp_int16_t
     
    typedef detail::int32 lowp_int32
     
    typedef detail::int32 lowp_int32_t
     
    typedef detail::int64 lowp_int64
     
    typedef detail::int64 lowp_int64_t
     
    typedef detail::int8 lowp_int8
     
    typedef detail::int8 lowp_int8_t
     
    typedef detail::uint16 lowp_u16
     
    typedef detail::tvec1< u16, lowp > lowp_u16vec1
     
    typedef detail::tvec2< u16, lowp > lowp_u16vec2
     
    typedef detail::tvec3< u16, lowp > lowp_u16vec3
     
    typedef detail::tvec4< u16, lowp > lowp_u16vec4
     
    typedef detail::uint32 lowp_u32
     
    typedef detail::tvec1< u32, lowp > lowp_u32vec1
     
    typedef detail::tvec2< u32, lowp > lowp_u32vec2
     
    typedef detail::tvec3< u32, lowp > lowp_u32vec3
     
    typedef detail::tvec4< u32, lowp > lowp_u32vec4
     
    typedef detail::uint64 lowp_u64
     
    typedef detail::tvec1< u64, lowp > lowp_u64vec1
     
    typedef detail::tvec2< u64, lowp > lowp_u64vec2
     
    typedef detail::tvec3< u64, lowp > lowp_u64vec3
     
    typedef detail::tvec4< u64, lowp > lowp_u64vec4
     
    typedef detail::uint8 lowp_u8
     
    typedef detail::tvec1< u8, lowp > lowp_u8vec1
     
    typedef detail::tvec2< u8, lowp > lowp_u8vec2
     
    typedef detail::tvec3< u8, lowp > lowp_u8vec3
     
    typedef detail::tvec4< u8, lowp > lowp_u8vec4
     
    typedef detail::uint16 lowp_uint16
     
    typedef detail::uint16 lowp_uint16_t
     
    typedef detail::uint32 lowp_uint32
     
    typedef detail::uint32 lowp_uint32_t
     
    typedef detail::uint64 lowp_uint64
     
    typedef detail::uint64 lowp_uint64_t
     
    typedef detail::uint8 lowp_uint8
     
    typedef detail::uint8 lowp_uint8_t
     
    typedef detail::tvec1< float,
    -lowp > 
    lowp_vec1
     
    typedef float32 mediump_f32
     
    typedef mediump_f32mat2x2 mediump_f32mat2
     
    typedef detail::tmat2x2< f32,
    -mediump > 
    mediump_f32mat2x2
     
    typedef detail::tmat2x3< f32,
    -mediump > 
    mediump_f32mat2x3
     
    typedef detail::tmat2x4< f32,
    -mediump > 
    mediump_f32mat2x4
     
    typedef mediump_f32mat3x3 mediump_f32mat3
     
    typedef detail::tmat3x2< f32,
    -mediump > 
    mediump_f32mat3x2
     
    typedef detail::tmat3x3< f32,
    -mediump > 
    mediump_f32mat3x3
     
    typedef detail::tmat3x4< f32,
    -mediump > 
    mediump_f32mat3x4
     
    typedef mediump_f32mat4x4 mediump_f32mat4
     
    typedef detail::tmat4x2< f32,
    -mediump > 
    mediump_f32mat4x2
     
    typedef detail::tmat4x3< f32,
    -mediump > 
    mediump_f32mat4x3
     
    typedef detail::tmat4x4< f32,
    -mediump > 
    mediump_f32mat4x4
     
    typedef detail::tquat< f32,
    -mediump > 
    mediump_f32quat
     
    typedef detail::tvec1< f32,
    -mediump > 
    mediump_f32vec1
     
    typedef detail::tvec2< f32,
    -mediump > 
    mediump_f32vec2
     
    typedef detail::tvec3< f32,
    -mediump > 
    mediump_f32vec3
     
    typedef detail::tvec4< f32,
    -mediump > 
    mediump_f32vec4
     
    typedef float64 mediump_f64
     
    typedef mediump_f64mat2x2 mediump_f64mat2
     
    typedef detail::tmat2x2< f64,
    -mediump > 
    mediump_f64mat2x2
     
    typedef detail::tmat2x3< f64,
    -mediump > 
    mediump_f64mat2x3
     
    typedef detail::tmat2x4< f64,
    -mediump > 
    mediump_f64mat2x4
     
    typedef mediump_f64mat3x3 mediump_f64mat3
     
    typedef detail::tmat3x2< f64,
    -mediump > 
    mediump_f64mat3x2
     
    typedef detail::tmat3x3< f64,
    -mediump > 
    mediump_f64mat3x3
     
    typedef detail::tmat3x4< f64,
    -mediump > 
    mediump_f64mat3x4
     
    typedef mediump_f64mat4x4 mediump_f64mat4
     
    typedef detail::tmat4x2< f64,
    -mediump > 
    mediump_f64mat4x2
     
    typedef detail::tmat4x3< f64,
    -mediump > 
    mediump_f64mat4x3
     
    typedef detail::tmat4x4< f64,
    -mediump > 
    mediump_f64mat4x4
     
    typedef detail::tquat< f64,
    -mediump > 
    mediump_f64quat
     
    typedef detail::tvec1< f64,
    -mediump > 
    mediump_f64vec1
     
    typedef detail::tvec2< f64,
    -mediump > 
    mediump_f64vec2
     
    typedef detail::tvec3< f64,
    -mediump > 
    mediump_f64vec3
     
    typedef detail::tvec4< f64,
    -mediump > 
    mediump_f64vec4
     
    typedef detail::float32 mediump_float32
     
    typedef detail::float32 mediump_float32_t
     
    typedef detail::float64 mediump_float64
     
    typedef detail::float64 mediump_float64_t
     
    typedef mediump_fmat2x2 mediump_fmat2
     
    typedef detail::tmat2x2< f32,
    -mediump > 
    mediump_fmat2x2
     
    typedef detail::tmat2x3< f32,
    -mediump > 
    mediump_fmat2x3
     
    typedef detail::tmat2x4< f32,
    -mediump > 
    mediump_fmat2x4
     
    typedef mediump_fmat3x3 mediump_fmat3
     
    typedef detail::tmat3x2< f32,
    -mediump > 
    mediump_fmat3x2
     
    typedef detail::tmat3x3< f32,
    -mediump > 
    mediump_fmat3x3
     
    typedef detail::tmat3x4< f32,
    -mediump > 
    mediump_fmat3x4
     
    typedef mediump_fmat4x4 mediump_fmat4
     
    typedef detail::tmat4x2< f32,
    -mediump > 
    mediump_fmat4x2
     
    typedef detail::tmat4x3< f32,
    -mediump > 
    mediump_fmat4x3
     
    typedef detail::tmat4x4< f32,
    -mediump > 
    mediump_fmat4x4
     
    typedef detail::tvec1< float,
    -mediump > 
    mediump_fvec1
     
    typedef detail::tvec2< float,
    -mediump > 
    mediump_fvec2
     
    typedef detail::tvec3< float,
    -mediump > 
    mediump_fvec3
     
    typedef detail::tvec4< float,
    -mediump > 
    mediump_fvec4
     
    typedef detail::int16 mediump_i16
     
    typedef detail::tvec1< i16,
    -mediump > 
    mediump_i16vec1
     
    typedef detail::tvec2< i16,
    -mediump > 
    mediump_i16vec2
     
    typedef detail::tvec3< i16,
    -mediump > 
    mediump_i16vec3
     
    typedef detail::tvec4< i16,
    -mediump > 
    mediump_i16vec4
     
    typedef detail::int32 mediump_i32
     
    typedef detail::tvec1< i32,
    -mediump > 
    mediump_i32vec1
     
    typedef detail::tvec2< i32,
    -mediump > 
    mediump_i32vec2
     
    typedef detail::tvec3< i32,
    -mediump > 
    mediump_i32vec3
     
    typedef detail::tvec4< i32,
    -mediump > 
    mediump_i32vec4
     
    typedef detail::int64 mediump_i64
     
    typedef detail::tvec1< i64,
    -mediump > 
    mediump_i64vec1
     
    typedef detail::tvec2< i64,
    -mediump > 
    mediump_i64vec2
     
    typedef detail::tvec3< i64,
    -mediump > 
    mediump_i64vec3
     
    typedef detail::tvec4< i64,
    -mediump > 
    mediump_i64vec4
     
    typedef detail::int8 mediump_i8
     
    typedef detail::tvec1< i8,
    -mediump > 
    mediump_i8vec1
     
    typedef detail::tvec2< i8,
    -mediump > 
    mediump_i8vec2
     
    typedef detail::tvec3< i8,
    -mediump > 
    mediump_i8vec3
     
    typedef detail::tvec4< i8,
    -mediump > 
    mediump_i8vec4
     
    typedef detail::int16 mediump_int16
     
    typedef detail::int16 mediump_int16_t
     
    typedef detail::int32 mediump_int32
     
    typedef detail::int32 mediump_int32_t
     
    typedef detail::int64 mediump_int64
     
    typedef detail::int64 mediump_int64_t
     
    typedef detail::int8 mediump_int8
     
    typedef detail::int8 mediump_int8_t
     
    typedef detail::uint16 mediump_u16
     
    typedef detail::tvec1< u16,
    -mediump > 
    mediump_u16vec1
     
    typedef detail::tvec2< u16,
    -mediump > 
    mediump_u16vec2
     
    typedef detail::tvec3< u16,
    -mediump > 
    mediump_u16vec3
     
    typedef detail::tvec4< u16,
    -mediump > 
    mediump_u16vec4
     
    typedef detail::uint32 mediump_u32
     
    typedef detail::tvec1< u32,
    -mediump > 
    mediump_u32vec1
     
    typedef detail::tvec2< u32,
    -mediump > 
    mediump_u32vec2
     
    typedef detail::tvec3< u32,
    -mediump > 
    mediump_u32vec3
     
    typedef detail::tvec4< u32,
    -mediump > 
    mediump_u32vec4
     
    typedef detail::uint64 mediump_u64
     
    typedef detail::tvec1< u64,
    -mediump > 
    mediump_u64vec1
     
    typedef detail::tvec2< u64,
    -mediump > 
    mediump_u64vec2
     
    typedef detail::tvec3< u64,
    -mediump > 
    mediump_u64vec3
     
    typedef detail::tvec4< u64,
    -mediump > 
    mediump_u64vec4
     
    typedef detail::uint8 mediump_u8
     
    typedef detail::tvec1< u8,
    -mediump > 
    mediump_u8vec1
     
    typedef detail::tvec2< u8,
    -mediump > 
    mediump_u8vec2
     
    typedef detail::tvec3< u8,
    -mediump > 
    mediump_u8vec3
     
    typedef detail::tvec4< u8,
    -mediump > 
    mediump_u8vec4
     
    typedef detail::uint16 mediump_uint16
     
    typedef detail::uint16 mediump_uint16_t
     
    typedef detail::uint32 mediump_uint32
     
    typedef detail::uint32 mediump_uint32_t
     
    typedef detail::uint64 mediump_uint64
     
    typedef detail::uint64 mediump_uint64_t
     
    typedef detail::uint8 mediump_uint8
     
    typedef detail::uint8 mediump_uint8_t
     
    typedef detail::tvec1< float,
    -mediump > 
    mediump_vec1
     
    typedef detail::uint16 u16
     
    typedef highp_u16vec1 u16vec1
     
    typedef highp_u16vec2 u16vec2
     
    typedef highp_u16vec3 u16vec3
     
    typedef highp_u16vec4 u16vec4
     
    typedef detail::uint32 u32
     
    typedef highp_u32vec1 u32vec1
     
    typedef highp_u32vec2 u32vec2
     
    typedef highp_u32vec3 u32vec3
     
    typedef highp_u32vec4 u32vec4
     
    typedef detail::uint64 u64
     
    typedef highp_u64vec1 u64vec1
     
    typedef highp_u64vec2 u64vec2
     
    typedef highp_u64vec3 u64vec3
     
    typedef highp_u64vec4 u64vec4
     
    typedef detail::uint8 u8
     
    typedef highp_u8vec1 u8vec1
     
    typedef highp_u8vec2 u8vec2
     
    typedef highp_u8vec3 u8vec3
     
    typedef highp_u8vec4 u8vec4
     
    typedef detail::uint16 uint16
     
    typedef detail::uint16 uint16_t
     
    typedef detail::uint32 uint32
     
    typedef detail::uint32 uint32_t
     
    typedef detail::uint64 uint64
     
    typedef detail::uint64 uint64_t
     
    typedef detail::uint8 uint8
     
    typedef detail::uint8 uint8_t
     
    -

    Detailed Description

    -

    Defines specific C++-based precision types.

    -

    Precision types defines types based on GLSL's precision qualifiers. This extension defines types based on explicitly-sized C++ data types.

    -

    <glm/gtc/type_precision.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef float32 f32
    -
    - -

    Default 32 bit single-precision floating-point scalar.

    -

    32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1523 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< f32, defaultp > f32mat2
    -
    - -

    Default single-precision floating-point 2x2 matrix.

    -

    Single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision
    -
    -GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2475 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< f32, defaultp > f32mat2x2
    -
    - -

    Default single-precision floating-point 2x2 matrix.

    -

    Single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision
    -
    -GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2439 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3< f32, defaultp > f32mat2x3
    -
    - -

    Default single-precision floating-point 2x3 matrix.

    -

    Single-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2443 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4< f32, defaultp > f32mat2x4
    -
    - -

    Default single-precision floating-point 2x4 matrix.

    -

    Single-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2447 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< f32, defaultp > f32mat3
    -
    - -

    Default single-precision floating-point 3x3 matrix.

    -

    Single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2479 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2< f32, defaultp > f32mat3x2
    -
    - -

    Default single-precision floating-point 3x2 matrix.

    -

    Single-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2451 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< f32, defaultp > f32mat3x3
    -
    - -

    Default single-precision floating-point 3x3 matrix.

    -

    Single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2455 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4< f32, defaultp > f32mat3x4
    -
    - -

    Default single-precision floating-point 3x4 matrix.

    -

    Single-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2459 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< f32, defaultp > f32mat4
    -
    - -

    Default single-precision floating-point 4x4 matrix.

    -

    Single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2483 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2< f32, defaultp > f32mat4x2
    -
    - -

    Default single-precision floating-point 4x2 matrix.

    -

    Single-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2463 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3< f32, defaultp > f32mat4x3
    -
    - -

    Default single-precision floating-point 4x3 matrix.

    -

    Single-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2467 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< f32, defaultp > f32mat4x4
    -
    - -

    Default single-precision floating-point 4x4 matrix.

    -

    Single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2471 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat< f32, defaultp > f32quat
    -
    - -

    Default single-precision floating-point quaternion.

    -

    Single-precision floating-point quaternion.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2487 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< f32, defaultp > f32vec1
    -
    - -

    Default single-precision floating-point vector of 1 components.

    -

    Single-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2423 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< f32, defaultp > f32vec2
    -
    - -

    Default single-precision floating-point vector of 2 components.

    -

    Single-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2427 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< f32, defaultp > f32vec3
    -
    - -

    Default single-precision floating-point vector of 3 components.

    -

    Single-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2431 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< f32, defaultp > f32vec4
    -
    - -

    Default single-precision floating-point vector of 4 components.

    -

    Single-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2435 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef float64 f64
    -
    - -

    Default 64 bit double-precision floating-point scalar.

    -

    64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1527 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< f64, defaultp > f64mat2
    -
    - -

    Default double-precision floating-point 2x2 matrix.

    -

    Double-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision
    -
    -GLM_GTC_type_precision Double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2582 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< f64, defaultp > f64mat2x2
    -
    - -

    Default double-precision floating-point 2x2 matrix.

    -

    Double-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision
    -
    -GLM_GTC_type_precision Double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2546 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3< f64, defaultp > f64mat2x3
    -
    - -

    Default double-precision floating-point 2x3 matrix.

    -

    Double-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2550 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4< f64, defaultp > f64mat2x4
    -
    - -

    Default double-precision floating-point 2x4 matrix.

    -

    Double-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2554 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< f64, defaultp > f64mat3
    -
    - -

    Default double-precision floating-point 3x3 matrix.

    -

    Double-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2586 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2< f64, defaultp > f64mat3x2
    -
    - -

    Default double-precision floating-point 3x2 matrix.

    -

    Double-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2558 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< f64, defaultp > f64mat3x3
    -
    - -

    Default double-precision floating-point 3x3 matrix.

    -

    Double-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2562 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4< f64, defaultp > f64mat3x4
    -
    - -

    Default double-precision floating-point 3x4 matrix.

    -

    Double-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2566 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< f64, defaultp > f64mat4
    -
    - -

    Default double-precision floating-point 4x4 matrix.

    -

    Double-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2590 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2< f64, defaultp > f64mat4x2
    -
    - -

    Default double-precision floating-point 4x2 matrix.

    -

    Double-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2570 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3< f64, defaultp > f64mat4x3
    -
    - -

    Default double-precision floating-point 4x3 matrix.

    -

    Double-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2574 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< f64, defaultp > f64mat4x4
    -
    - -

    Default double-precision floating-point 4x4 matrix.

    -

    Double-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2578 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat< f64, defaultp > f64quat
    -
    - -

    Default double-precision floating-point quaternion.

    -

    Double-precision floating-point quaternion.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2594 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< f64, defaultp > f64vec1
    -
    - -

    Default double-precision floating-point vector of 1 components.

    -

    Double-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2530 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< f64, defaultp > f64vec2
    -
    - -

    Default double-precision floating-point vector of 2 components.

    -

    Double-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2534 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< f64, defaultp > f64vec3
    -
    - -

    Default double-precision floating-point vector of 3 components.

    -

    Double-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2538 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< f64, defaultp > f64vec4
    -
    - -

    Default double-precision floating-point vector of 4 components.

    -

    Double-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2542 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 float32
    -
    - -

    Default 32 bit single-precision floating-point scalar.

    -

    32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 81 of file type_float.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 float32_t
    -
    - -

    Default 32 bit single-precision floating-point scalar.

    -

    32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1515 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 float64
    -
    - -

    Default 64 bit double-precision floating-point scalar.

    -

    64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 82 of file type_float.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 float64_t
    -
    - -

    Default 64 bit double-precision floating-point scalar.

    -

    64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1519 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< f32, defaultp > fmat2
    -
    - -

    Default single-precision floating-point 2x2 matrix.

    -

    Single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision
    -
    -GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2405 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2< f32, defaultp > fmat2x2
    -
    - -

    Default single-precision floating-point 2x2 matrix.

    -

    Single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision
    -
    -GLM_GTC_type_precision Single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2369 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3< f32, defaultp > fmat2x3
    -
    - -

    Default single-precision floating-point 2x3 matrix.

    -

    Single-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2373 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4< f32, defaultp > fmat2x4
    -
    - -

    Default single-precision floating-point 2x4 matrix.

    -

    Single-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2377 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< f32, defaultp > fmat3
    -
    - -

    Default single-precision floating-point 3x3 matrix.

    -

    Single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2409 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2< f32, defaultp > fmat3x2
    -
    - -

    Default single-precision floating-point 3x2 matrix.

    -

    Single-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2381 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3< f32, defaultp > fmat3x3
    -
    - -

    Default single-precision floating-point 3x3 matrix.

    -

    Single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2385 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4< f32, defaultp > fmat3x4
    -
    - -

    Default single-precision floating-point 3x4 matrix.

    -

    Single-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2389 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< f32, defaultp > fmat4
    -
    - -

    Default single-precision floating-point 4x4 matrix.

    -

    Single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2413 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2< f32, defaultp > fmat4x2
    -
    - -

    Default single-precision floating-point 4x2 matrix.

    -

    Single-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2393 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3< f32, defaultp > fmat4x3
    -
    - -

    Default single-precision floating-point 4x3 matrix.

    -

    Single-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2397 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4< f32, defaultp > fmat4x4
    -
    - -

    Default single-precision floating-point 4x4 matrix.

    -

    Single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2401 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_fquat fquat
    -
    - -

    Quaternion of default single-precision floating-point numbers.

    -

    Default single-precision floating-point quaternion.

    -
    See Also
    GLM_GTC_quaternion
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 90 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< float, defaultp > fvec1
    -
    - -

    Default single-precision floating-point vector of 1 components.

    -

    Single-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2353 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< float, defaultp > fvec2
    -
    - -

    Default single-precision floating-point vector of 2 components.

    -

    Single-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2357 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< float, defaultp > fvec3
    -
    - -

    Default single-precision floating-point vector of 3 components.

    -

    Single-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2361 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< float, defaultp > fvec4
    -
    - -

    Default single-precision floating-point vector of 4 components.

    -

    Single-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2365 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef float32 highp_f32
    -
    - -

    High 32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1445 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_f32mat2x2 highp_f32mat2
    -
    - -

    High single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision High single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2068 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32, highp> highp_f32mat2x2
    -
    - -

    High single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision High single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2028 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f32, highp> highp_f32mat2x3
    -
    - -

    High single-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2032 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f32, highp> highp_f32mat2x4
    -
    - -

    High single-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2036 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_f32mat3x3 highp_f32mat3
    -
    - -

    High single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2072 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f32, highp> highp_f32mat3x2
    -
    - -

    High single-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2040 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32, highp> highp_f32mat3x3
    -
    - -

    High single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2044 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f32, highp> highp_f32mat3x4
    -
    - -

    High single-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2048 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_f32mat4x4 highp_f32mat4
    -
    - -

    High single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2076 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f32, highp> highp_f32mat4x2
    -
    - -

    High single-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2052 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f32, highp> highp_f32mat4x3
    -
    - -

    High single-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2056 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32, highp> highp_f32mat4x4
    -
    - -

    High single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2060 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<f32, highp> highp_f32quat
    -
    - -

    High single-precision floating-point quaternion.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2271 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<f32, highp> highp_f32vec1
    -
    - -

    High single-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1666 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<f32, highp> highp_f32vec2
    -
    - -

    High single-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1670 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<f32, highp> highp_f32vec3
    -
    - -

    High single-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1674 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<f32, highp> highp_f32vec4
    -
    - -

    High single-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1678 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef float64 highp_f64
    -
    - -

    High 64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1449 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_f64mat2x2 highp_f64mat2
    -
    - -

    High double-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision High double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2240 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f64, highp> highp_f64mat2x2
    -
    - -

    High double-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision High double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2200 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f64, highp> highp_f64mat2x3
    -
    - -

    High double-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2204 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f64, highp> highp_f64mat2x4
    -
    - -

    High double-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2208 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_f64mat3x3 highp_f64mat3
    -
    - -

    High double-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2244 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f64, highp> highp_f64mat3x2
    -
    - -

    High double-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2212 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f64, highp> highp_f64mat3x3
    -
    - -

    High double-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2216 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f64, highp> highp_f64mat3x4
    -
    - -

    High double-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2220 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_f64mat4x4 highp_f64mat4
    -
    - -

    High double-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2248 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f64, highp> highp_f64mat4x2
    -
    - -

    High double-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2224 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f64, highp> highp_f64mat4x3
    -
    - -

    High double-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2228 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f64, highp> highp_f64mat4x4
    -
    - -

    High double-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2232 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<f64, highp> highp_f64quat
    -
    - -

    High double-precision floating-point quaternion.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2275 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<f64, highp> highp_f64vec1
    -
    - -

    High double-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1715 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<f64, highp> highp_f64vec2
    -
    - -

    High double-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1719 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<f64, highp> highp_f64vec3
    -
    - -

    High double-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1723 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<f64, highp> highp_f64vec4
    -
    - -

    High double-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1727 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 highp_float32
    -
    - -

    High 32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1429 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 highp_float32_t
    -
    - -

    High 32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1437 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 highp_float64
    -
    - -

    High 64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1433 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 highp_float64_t
    -
    - -

    High 64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1441 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_fmat2x2 highp_fmat2
    -
    - -

    High single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision High single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 1894 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32, highp> highp_fmat2x2
    -
    - -

    High single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision High single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 1854 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f32, highp> highp_fmat2x3
    -
    - -

    High single-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1858 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f32, highp> highp_fmat2x4
    -
    - -

    High single-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1862 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_fmat3x3 highp_fmat3
    -
    - -

    High single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1898 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f32, highp> highp_fmat3x2
    -
    - -

    High single-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1866 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32, highp> highp_fmat3x3
    -
    - -

    High single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1870 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f32, highp> highp_fmat3x4
    -
    - -

    High single-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1874 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_fmat4x4 highp_fmat4
    -
    - -

    High single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1902 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f32, highp> highp_fmat4x2
    -
    - -

    High single-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1878 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f32, highp> highp_fmat4x3
    -
    - -

    High single-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1882 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32, highp> highp_fmat4x4
    -
    - -

    High single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1886 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<float, highp> highp_fvec1
    -
    - -

    High single-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1617 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<float, highp> highp_fvec2
    -
    - -

    High Single-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1621 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<float, highp> highp_fvec3
    -
    - -

    High Single-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1625 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<float, highp> highp_fvec4
    -
    - -

    High Single-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1629 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 highp_i16
    -
    - -

    High precision 16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 264 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i16, highp> highp_i16vec1
    -
    - -

    High precision 16 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 440 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i16, highp> highp_i16vec2
    -
    - -

    High precision 16 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 444 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i16, highp> highp_i16vec3
    -
    - -

    High precision 16 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 448 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i16, highp> highp_i16vec4
    -
    - -

    High precision 16 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 452 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 highp_i32
    -
    - -

    High precision 32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 268 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< i32, highp > highp_i32vec1
    -
    - -

    High precision 32 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 520 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< i32, highp > highp_i32vec2
    -
    - -

    High precision 32 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 524 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< i32, highp > highp_i32vec3
    -
    - -

    High precision 32 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 528 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< i32, highp > highp_i32vec4
    -
    - -

    High precision 32 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 532 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 highp_i64
    -
    - -

    High precision 64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 272 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i64, highp> highp_i64vec1
    -
    - -

    High precision 64 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 679 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i64, highp> highp_i64vec2
    -
    - -

    High precision 64 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 683 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i64, highp> highp_i64vec3
    -
    - -

    High precision 64 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 687 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i64, highp> highp_i64vec4
    -
    - -

    High precision 64 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 691 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 highp_i8
    -
    - -

    High precision 8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 260 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i8, highp> highp_i8vec1
    -
    - -

    High precision 8 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 361 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i8, highp> highp_i8vec2
    -
    - -

    High precision 8 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 365 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i8, highp> highp_i8vec3
    -
    - -

    High precision 8 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 369 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i8, highp> highp_i8vec4
    -
    - -

    High precision 8 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 373 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 highp_int16
    -
    - -

    High precision 16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 232 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 highp_int16_t
    -
    - -

    High precision 16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 248 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 highp_int32
    -
    - -

    High precision 32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 236 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 highp_int32_t
    -
    - -

    32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 252 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 highp_int64
    -
    - -

    High precision 64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 240 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 highp_int64_t
    -
    - -

    High precision 64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 256 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 highp_int8
    -
    - -

    High precision 8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 228 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 highp_int8_t
    -
    - -

    High precision 8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 244 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 highp_u16
    -
    - -

    Medium precision 16 bit unsigned integer type.

    -

    High precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 865 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u16, highp> highp_u16vec1
    -
    - -

    High precision 16 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1043 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u16, highp> highp_u16vec2
    -
    - -

    High precision 16 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1047 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u16, highp> highp_u16vec3
    -
    - -

    High precision 16 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1051 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u16, highp> highp_u16vec4
    -
    - -

    High precision 16 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1055 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 highp_u32
    -
    - -

    Medium precision 32 bit unsigned integer type.

    -

    High precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 869 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< u32, highp > highp_u32vec1
    -
    - -

    High precision 32 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1123 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< u32, highp > highp_u32vec2
    -
    - -

    High precision 32 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1127 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< u32, highp > highp_u32vec3
    -
    - -

    High precision 32 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1131 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< u32, highp > highp_u32vec4
    -
    - -

    High precision 32 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1135 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 highp_u64
    -
    - -

    Medium precision 64 bit unsigned integer type.

    -

    High precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 873 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u64, highp> highp_u64vec1
    -
    - -

    High precision 64 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1282 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u64, highp> highp_u64vec2
    -
    - -

    High precision 64 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1286 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u64, highp> highp_u64vec3
    -
    - -

    High precision 64 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1290 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u64, highp> highp_u64vec4
    -
    - -

    High precision 64 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1294 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 highp_u8
    -
    - -

    Medium precision 8 bit unsigned integer type.

    -

    High precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 861 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u8, highp> highp_u8vec1
    -
    - -

    High precision 8 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 964 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u8, highp> highp_u8vec2
    -
    - -

    High precision 8 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 968 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u8, highp> highp_u8vec3
    -
    - -

    High precision 8 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 972 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u8, highp> highp_u8vec4
    -
    - -

    High precision 8 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 976 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 highp_uint16
    -
    - -

    Medium precision 16 bit unsigned integer type.

    -

    High precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 833 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 highp_uint16_t
    -
    - -

    Medium precision 16 bit unsigned integer type.

    -

    High precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 849 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 highp_uint32
    -
    - -

    Medium precision 32 bit unsigned integer type.

    -

    High precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 837 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 highp_uint32_t
    -
    - -

    Medium precision 32 bit unsigned integer type.

    -

    High precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 853 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 highp_uint64
    -
    - -

    Medium precision 64 bit unsigned integer type.

    -

    High precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 841 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 highp_uint64_t
    -
    - -

    Medium precision 64 bit unsigned integer type.

    -

    High precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 857 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 highp_uint8
    -
    - -

    Medium precision 8 bit unsigned integer type.

    -

    High precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 829 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 highp_uint8_t
    -
    - -

    Medium precision 8 bit unsigned integer type.

    -

    High precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 845 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_vec1_t highp_vec1
    -
    - -

    High single-precision floating-point vector of 1 component.

    -

    1 component vector of high precision floating-point numbers.

    -
    See Also
    GLM_GTC_type_precision
    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 1601 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 i16
    -
    - -

    16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 313 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< i16, defaultp > i16vec1
    -
    - -

    Default precision 16 bit signed integer scalar type.

    -

    16 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 468 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< i16, defaultp > i16vec2
    -
    - -

    Default precision 16 bit signed integer vector of 2 components type.

    -

    16 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 472 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< i16, defaultp > i16vec3
    -
    - -

    Default precision 16 bit signed integer vector of 3 components type.

    -

    16 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 476 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< i16, defaultp > i16vec4
    -
    - -

    Default precision 16 bit signed integer vector of 4 components type.

    -

    16 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 480 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 i32
    -
    - -

    32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 317 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< i32, defaultp > i32vec1
    -
    - -

    Default precision 32 bit signed integer scalar type.

    -

    32 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 547 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< i32, defaultp > i32vec2
    -
    - -

    Default precision 32 bit signed integer vector of 2 components type.

    -

    32 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 551 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< i32, defaultp > i32vec3
    -
    - -

    Default precision 32 bit signed integer vector of 3 components type.

    -

    32 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 555 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< i32, defaultp > i32vec4
    -
    - -

    Default precision 32 bit signed integer vector of 4 components type.

    -

    32 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 559 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 i64
    -
    - -

    64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 321 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< i64, defaultp > i64vec1
    -
    - -

    Default precision 64 bit signed integer scalar type.

    -

    64 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 706 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< i64, defaultp > i64vec2
    -
    - -

    Default precision 64 bit signed integer vector of 2 components type.

    -

    64 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 710 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< i64, defaultp > i64vec3
    -
    - -

    Default precision 64 bit signed integer vector of 3 components type.

    -

    64 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 714 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< i64, defaultp > i64vec4
    -
    - -

    Default precision 64 bit signed integer vector of 4 components type.

    -

    64 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 718 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 i8
    -
    - -

    8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 309 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< i8, defaultp > i8vec1
    -
    - -

    Default precision 8 bit signed integer scalar type.

    -

    8 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 388 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< i8, defaultp > i8vec2
    -
    - -

    Default precision 8 bit signed integer vector of 2 components type.

    -

    8 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 392 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< i8, defaultp > i8vec3
    -
    - -

    Default precision 8 bit signed integer vector of 3 components type.

    -

    8 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 396 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< i8, defaultp > i8vec4
    -
    - -

    Default precision 8 bit signed integer vector of 4 components type.

    -

    8 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 400 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 int16
    -
    - -

    16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 90 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 int16_t
    -
    - -

    16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 297 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 int32
    -
    - -

    32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 91 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 int32_t
    -
    - -

    32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 301 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 int64
    -
    - -

    64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 92 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 int64_t
    -
    - -

    64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 305 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 int8
    -
    - -

    8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 89 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 int8_t
    -
    - -

    8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 293 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef float32 lowp_f32
    -
    - -

    Low 32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1346 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_f32mat2x2 lowp_f32mat2
    -
    - -

    Low single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 1951 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32, lowp> lowp_f32mat2x2
    -
    - -

    Low single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 1911 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f32, lowp> lowp_f32mat2x3
    -
    - -

    Low single-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1915 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f32, lowp> lowp_f32mat2x4
    -
    - -

    Low single-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1919 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_f32mat3x3 lowp_f32mat3
    -
    - -

    Low single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1955 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f32, lowp> lowp_f32mat3x2
    -
    - -

    Low single-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1923 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32, lowp> lowp_f32mat3x3
    -
    - -

    Low single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1927 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f32, lowp> lowp_f32mat3x4
    -
    - -

    Low single-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1931 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_f32mat4x4 lowp_f32mat4
    -
    - -

    Low single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1959 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f32, lowp> lowp_f32mat4x2
    -
    - -

    Low single-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1935 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f32, lowp> lowp_f32mat4x3
    -
    - -

    Low single-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1939 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32, lowp> lowp_f32mat4x4
    -
    - -

    Low single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1943 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<f32, lowp> lowp_f32quat
    -
    - -

    Low single-precision floating-point quaternion.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2255 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<f32, lowp> lowp_f32vec1
    -
    - -

    Low single-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1634 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<f32, lowp> lowp_f32vec2
    -
    - -

    Low single-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1638 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<f32, lowp> lowp_f32vec3
    -
    - -

    Low single-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1642 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<f32, lowp> lowp_f32vec4
    -
    - -

    Low single-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1646 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef float64 lowp_f64
    -
    - -

    Low 64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1350 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_f64mat2x2 lowp_f64mat2
    -
    - -

    Low double-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Low double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2126 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f64, lowp> lowp_f64mat2x2
    -
    - -

    Low double-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Low double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2086 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f64, lowp> lowp_f64mat2x3
    -
    - -

    Low double-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2090 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f64, lowp> lowp_f64mat2x4
    -
    - -

    Low double-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2094 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_f64mat3x3 lowp_f64mat3
    -
    - -

    Low double-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2130 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f64, lowp> lowp_f64mat3x2
    -
    - -

    Low double-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2098 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f64, lowp> lowp_f64mat3x3
    -
    - -

    Low double-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2102 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f64, lowp> lowp_f64mat3x4
    -
    - -

    Low double-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2106 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_f64mat4x4 lowp_f64mat4
    -
    - -

    Low double-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2134 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f64, lowp> lowp_f64mat4x2
    -
    - -

    Low double-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2110 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f64, lowp> lowp_f64mat4x3
    -
    - -

    Low double-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2114 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f64, lowp> lowp_f64mat4x4
    -
    - -

    Low double-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2118 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<f64, lowp> lowp_f64quat
    -
    - -

    Low double-precision floating-point quaternion.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2259 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<f64, lowp> lowp_f64vec1
    -
    - -

    Low double-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1683 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<f64, lowp> lowp_f64vec2
    -
    - -

    Low double-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1687 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<f64, lowp> lowp_f64vec3
    -
    - -

    Low double-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1691 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<f64, lowp> lowp_f64vec4
    -
    - -

    Low double-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1695 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 lowp_float32
    -
    - -

    Low 32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1330 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 lowp_float32_t
    -
    - -

    Low 32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1338 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 lowp_float64
    -
    - -

    Low 64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1334 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 lowp_float64_t
    -
    - -

    Low 64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1342 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_fmat2x2 lowp_fmat2
    -
    - -

    Low single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 1779 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32, lowp> lowp_fmat2x2
    -
    - -

    Low single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 1739 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f32, lowp> lowp_fmat2x3
    -
    - -

    Low single-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1743 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f32, lowp> lowp_fmat2x4
    -
    - -

    Low single-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1747 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_fmat3x3 lowp_fmat3
    -
    - -

    Low single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1783 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f32, lowp> lowp_fmat3x2
    -
    - -

    Low single-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1751 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32, lowp> lowp_fmat3x3
    -
    - -

    Low single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1755 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f32, lowp> lowp_fmat3x4
    -
    - -

    Low single-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1759 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_fmat4x4 lowp_fmat4
    -
    - -

    Low single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1787 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f32, lowp> lowp_fmat4x2
    -
    - -

    Low single-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1763 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f32, lowp> lowp_fmat4x3
    -
    - -

    Low single-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1767 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32, lowp> lowp_fmat4x4
    -
    - -

    Low single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1771 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<float, lowp> lowp_fvec1
    -
    - -

    Low single-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1549 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<float, lowp> lowp_fvec2
    -
    - -

    Low single-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1553 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<float, lowp> lowp_fvec3
    -
    - -

    Low single-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1557 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<float, lowp> lowp_fvec4
    -
    - -

    Low single-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1561 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 lowp_i16
    -
    - -

    Low precision 16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 168 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i16, lowp> lowp_i16vec1
    -
    - -

    Low precision 16 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 406 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i16, lowp> lowp_i16vec2
    -
    - -

    Low precision 16 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 410 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i16, lowp> lowp_i16vec3
    -
    - -

    Low precision 16 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 414 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i16, lowp> lowp_i16vec4
    -
    - -

    Low precision 16 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 418 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 lowp_i32
    -
    - -

    Low precision 32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 172 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< i32, lowp > lowp_i32vec1
    -
    - -

    Low precision 32 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 486 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< i32, lowp > lowp_i32vec2
    -
    - -

    Low precision 32 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 490 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< i32, lowp > lowp_i32vec3
    -
    - -

    Low precision 32 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 494 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< i32, lowp > lowp_i32vec4
    -
    - -

    Low precision 32 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 498 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 lowp_i64
    -
    - -

    Low precision 64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 176 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i64, lowp> lowp_i64vec1
    -
    - -

    Low precision 64 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 645 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i64, lowp> lowp_i64vec2
    -
    - -

    Low precision 64 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 649 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i64, lowp> lowp_i64vec3
    -
    - -

    Low precision 64 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 653 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i64, lowp> lowp_i64vec4
    -
    - -

    Low precision 64 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 657 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 lowp_i8
    -
    - -

    Low precision 8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 164 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i8, lowp> lowp_i8vec1
    -
    - -

    Low precision 8 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 327 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i8, lowp> lowp_i8vec2
    -
    - -

    Low precision 8 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 331 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i8, lowp> lowp_i8vec3
    -
    - -

    Low precision 8 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 335 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i8, lowp> lowp_i8vec4
    -
    - -

    Low precision 8 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 339 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 lowp_int16
    -
    - -

    Low precision 16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 136 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 lowp_int16_t
    -
    - -

    Low precision 16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 152 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 lowp_int32
    -
    - -

    Low precision 32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 140 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 lowp_int32_t
    -
    - -

    Low precision 32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 156 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 lowp_int64
    -
    - -

    Low precision 64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 144 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 lowp_int64_t
    -
    - -

    Low precision 64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 160 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 lowp_int8
    -
    - -

    Low precision 8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 132 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 lowp_int8_t
    -
    - -

    Low precision 8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 148 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 lowp_u16
    -
    - -

    Low precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 765 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u16, lowp> lowp_u16vec1
    -
    - -

    Low precision 16 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1009 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u16, lowp> lowp_u16vec2
    -
    - -

    Low precision 16 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1013 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u16, lowp> lowp_u16vec3
    -
    - -

    Low precision 16 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1017 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u16, lowp> lowp_u16vec4
    -
    - -

    Low precision 16 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1021 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 lowp_u32
    -
    - -

    Low precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 769 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< u32, lowp > lowp_u32vec1
    -
    - -

    Low precision 32 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1089 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< u32, lowp > lowp_u32vec2
    -
    - -

    Low precision 32 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1093 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< u32, lowp > lowp_u32vec3
    -
    - -

    Low precision 32 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1097 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< u32, lowp > lowp_u32vec4
    -
    - -

    Low precision 32 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1101 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 lowp_u64
    -
    - -

    Low precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 773 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u64, lowp> lowp_u64vec1
    -
    - -

    Low precision 64 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1248 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u64, lowp> lowp_u64vec2
    -
    - -

    Low precision 64 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1252 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u64, lowp> lowp_u64vec3
    -
    - -

    Low precision 64 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1256 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u64, lowp> lowp_u64vec4
    -
    - -

    Low precision 64 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1260 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 lowp_u8
    -
    - -

    Low precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 761 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u8, lowp> lowp_u8vec1
    -
    - -

    Low precision 8 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 930 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u8, lowp> lowp_u8vec2
    -
    - -

    Low precision 8 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 934 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u8, lowp> lowp_u8vec3
    -
    - -

    Low precision 8 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 938 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u8, lowp> lowp_u8vec4
    -
    - -

    Low precision 8 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 942 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 lowp_uint16
    -
    - -

    Low precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 731 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 lowp_uint16_t
    -
    - -

    Low precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 748 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 lowp_uint32
    -
    - -

    Low precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 735 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 lowp_uint32_t
    -
    - -

    Low precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 752 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 lowp_uint64
    -
    - -

    Low precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 739 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 lowp_uint64_t
    -
    - -

    Low precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 756 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 lowp_uint8
    -
    - -

    Low precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 727 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 lowp_uint8_t
    -
    - -

    Low precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 744 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef lowp_vec1_t lowp_vec1
    -
    - -

    Low single-precision floating-point vector of 1 component.

    -

    1 component vector of low precision floating-point numbers.

    -
    See Also
    GLM_GTC_type_precision
    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 1533 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef float32 mediump_f32
    -
    - -

    Medium 32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1420 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_f32mat2x2 mediump_f32mat2
    -
    - -

    Medium single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Medium single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2009 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32, mediump> mediump_f32mat2x2
    -
    - -

    High single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Low single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 1969 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f32, mediump> mediump_f32mat2x3
    -
    - -

    Medium single-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1973 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f32, mediump> mediump_f32mat2x4
    -
    - -

    Medium single-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1977 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_f32mat3x3 mediump_f32mat3
    -
    - -

    Medium single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2013 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f32, mediump> mediump_f32mat3x2
    -
    - -

    Medium single-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1981 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32, mediump> mediump_f32mat3x3
    -
    - -

    Medium single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1985 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f32, mediump> mediump_f32mat3x4
    -
    - -

    Medium single-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1989 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_f32mat4x4 mediump_f32mat4
    -
    - -

    Medium single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2017 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f32, mediump> mediump_f32mat4x2
    -
    - -

    Medium single-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1993 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f32, mediump> mediump_f32mat4x3
    -
    - -

    Medium single-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1997 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32, mediump> mediump_f32mat4x4
    -
    - -

    Medium single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2001 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<f32, mediump> mediump_f32quat
    -
    - -

    Medium single-precision floating-point quaternion.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2263 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<f32, mediump> mediump_f32vec1
    -
    - -

    Medium single-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1650 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<f32, mediump> mediump_f32vec2
    -
    - -

    Medium single-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1654 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<f32, mediump> mediump_f32vec3
    -
    - -

    Medium single-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1658 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<f32, mediump> mediump_f32vec4
    -
    - -

    Medium single-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1662 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef float64 mediump_f64
    -
    - -

    Medium 64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1424 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_f64mat2x2 mediump_f64mat2
    -
    - -

    Medium double-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Medium double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2184 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f64, mediump> mediump_f64mat2x2
    -
    - -

    Medium double-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Medium double-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 2144 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f64, mediump> mediump_f64mat2x3
    -
    - -

    Medium double-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2148 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f64, mediump> mediump_f64mat2x4
    -
    - -

    Medium double-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2152 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_f64mat3x3 mediump_f64mat3
    -
    - -

    Medium double-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2188 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f64, mediump> mediump_f64mat3x2
    -
    - -

    Medium double-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2156 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f64, mediump> mediump_f64mat3x3
    -
    - -

    Medium double-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2160 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f64, mediump> mediump_f64mat3x4
    -
    - -

    Medium double-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2164 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_f64mat4x4 mediump_f64mat4
    -
    - -

    Medium double-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2192 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f64, mediump> mediump_f64mat4x2
    -
    - -

    Medium double-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2168 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f64, mediump> mediump_f64mat4x3
    -
    - -

    Medium double-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2172 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f64, mediump> mediump_f64mat4x4
    -
    - -

    Medium double-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2176 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tquat<f64, mediump> mediump_f64quat
    -
    - -

    Medium double-precision floating-point quaternion.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 2267 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<f64, mediump> mediump_f64vec1
    -
    - -

    Medium double-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1699 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<f64, mediump> mediump_f64vec2
    -
    - -

    Medium double-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1703 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<f64, mediump> mediump_f64vec3
    -
    - -

    Medium double-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1707 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<f64, mediump> mediump_f64vec4
    -
    - -

    Medium double-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1711 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 mediump_float32
    -
    - -

    Medium 32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1404 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float32 mediump_float32_t
    -
    - -

    Medium 32 bit single-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1412 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 mediump_float64
    -
    - -

    Medium 64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1408 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::float64 mediump_float64_t
    -
    - -

    Medium 64 bit double-precision floating-point scalar.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1416 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_fmat2x2 mediump_fmat2
    -
    - -

    Medium single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Medium single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 1836 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x2<f32, mediump> mediump_fmat2x2
    -
    - -

    Medium single-precision floating-point 1x1 matrix.

    -
    See Also
    GLM_GTC_type_precision Medium single-precision floating-point 2x2 matrix.
    -
    -GLM_GTC_type_precision
    - -

    Definition at line 1796 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x3<f32, mediump> mediump_fmat2x3
    -
    - -

    Medium single-precision floating-point 2x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1800 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat2x4<f32, mediump> mediump_fmat2x4
    -
    - -

    Medium single-precision floating-point 2x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1804 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_fmat3x3 mediump_fmat3
    -
    - -

    Medium single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1840 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x2<f32, mediump> mediump_fmat3x2
    -
    - -

    Medium single-precision floating-point 3x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1808 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x3<f32, mediump> mediump_fmat3x3
    -
    - -

    Medium single-precision floating-point 3x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1812 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat3x4<f32, mediump> mediump_fmat3x4
    -
    - -

    Medium single-precision floating-point 3x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1816 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_fmat4x4 mediump_fmat4
    -
    - -

    Medium single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1844 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x2<f32, mediump> mediump_fmat4x2
    -
    - -

    Medium single-precision floating-point 4x2 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1820 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x3<f32, mediump> mediump_fmat4x3
    -
    - -

    Medium single-precision floating-point 4x3 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1824 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tmat4x4<f32, mediump> mediump_fmat4x4
    -
    - -

    Medium single-precision floating-point 4x4 matrix.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1828 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<float, mediump> mediump_fvec1
    -
    - -

    Medium single-precision floating-point vector of 1 component.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1583 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<float, mediump> mediump_fvec2
    -
    - -

    Medium Single-precision floating-point vector of 2 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1587 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<float, mediump> mediump_fvec3
    -
    - -

    Medium Single-precision floating-point vector of 3 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1591 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<float, mediump> mediump_fvec4
    -
    - -

    Medium Single-precision floating-point vector of 4 components.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1595 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 mediump_i16
    -
    - -

    Medium precision 16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 216 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i16, mediump> mediump_i16vec1
    -
    - -

    Medium precision 16 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 423 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i16, mediump> mediump_i16vec2
    -
    - -

    Medium precision 16 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 427 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i16, mediump> mediump_i16vec3
    -
    - -

    Medium precision 16 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 431 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i16, mediump> mediump_i16vec4
    -
    - -

    Medium precision 16 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 435 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 mediump_i32
    -
    - -

    Medium precision 32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 220 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< i32, mediump > mediump_i32vec1
    -
    - -

    Medium precision 32 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 503 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< i32, mediump > mediump_i32vec2
    -
    - -

    Medium precision 32 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 507 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< i32, mediump > mediump_i32vec3
    -
    - -

    Medium precision 32 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 511 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< i32, mediump > mediump_i32vec4
    -
    - -

    Medium precision 32 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 515 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 mediump_i64
    -
    - -

    Medium precision 64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 224 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i64, mediump> mediump_i64vec1
    -
    - -

    Medium precision 64 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 662 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i64, mediump> mediump_i64vec2
    -
    - -

    Medium precision 64 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 666 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i64, mediump> mediump_i64vec3
    -
    - -

    Medium precision 64 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 670 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i64, mediump> mediump_i64vec4
    -
    - -

    Medium precision 64 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 674 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 mediump_i8
    -
    - -

    Medium precision 8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 212 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<i8, mediump> mediump_i8vec1
    -
    - -

    Medium precision 8 bit signed integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 344 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<i8, mediump> mediump_i8vec2
    -
    - -

    Medium precision 8 bit signed integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 348 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<i8, mediump> mediump_i8vec3
    -
    - -

    Medium precision 8 bit signed integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 352 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<i8, mediump> mediump_i8vec4
    -
    - -

    Medium precision 8 bit signed integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 356 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 mediump_int16
    -
    - -

    Medium precision 16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 184 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int16 mediump_int16_t
    -
    - -

    Medium precision 16 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 200 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 mediump_int32
    -
    - -

    Medium precision 32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 188 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int32 mediump_int32_t
    -
    - -

    Medium precision 32 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 204 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 mediump_int64
    -
    - -

    Medium precision 64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 192 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int64 mediump_int64_t
    -
    - -

    Medium precision 64 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 208 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 mediump_int8
    -
    - -

    Medium precision 8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 180 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::int8 mediump_int8_t
    -
    - -

    Medium precision 8 bit signed integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 196 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 mediump_u16
    -
    - -

    Medium precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 815 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u16, mediump> mediump_u16vec1
    -
    - -

    Medium precision 16 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1026 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u16, mediump> mediump_u16vec2
    -
    - -

    Medium precision 16 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1030 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u16, mediump> mediump_u16vec3
    -
    - -

    Medium precision 16 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1034 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u16, mediump> mediump_u16vec4
    -
    - -

    Medium precision 16 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1038 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 mediump_u32
    -
    - -

    Medium precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 819 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< u32, mediump > mediump_u32vec1
    -
    - -

    Medium precision 32 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1106 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< u32, mediump > mediump_u32vec2
    -
    - -

    Medium precision 32 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1110 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< u32, mediump > mediump_u32vec3
    -
    - -

    Medium precision 32 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1114 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< u32, mediump > mediump_u32vec4
    -
    - -

    Medium precision 32 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1118 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 mediump_u64
    -
    - -

    Medium precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 823 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u64, mediump> mediump_u64vec1
    -
    - -

    Medium precision 64 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1265 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u64, mediump> mediump_u64vec2
    -
    - -

    Medium precision 64 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1269 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u64, mediump> mediump_u64vec3
    -
    - -

    Medium precision 64 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1273 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u64, mediump> mediump_u64vec4
    -
    - -

    Medium precision 64 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1277 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 mediump_u8
    -
    - -

    Medium precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 811 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1<u8, mediump> mediump_u8vec1
    -
    - -

    Medium precision 8 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 947 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<u8, mediump> mediump_u8vec2
    -
    - -

    Medium precision 8 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 951 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<u8, mediump> mediump_u8vec3
    -
    - -

    Medium precision 8 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 955 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<u8, mediump> mediump_u8vec4
    -
    - -

    Medium precision 8 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 959 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 mediump_uint16
    -
    - -

    Medium precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 783 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 mediump_uint16_t
    -
    - -

    Medium precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 799 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 mediump_uint32
    -
    - -

    Medium precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 787 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 mediump_uint32_t
    -
    - -

    Medium precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 803 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 mediump_uint64
    -
    - -

    Medium precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 791 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 mediump_uint64_t
    -
    - -

    Medium precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 807 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 mediump_uint8
    -
    - -

    Medium precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 779 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 mediump_uint8_t
    -
    - -

    Medium precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 795 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef mediump_vec1_t mediump_vec1
    -
    - -

    Medium single-precision floating-point vector of 1 component.

    -

    1 component vector of medium precision floating-point numbers.

    -
    See Also
    GLM_GTC_type_precision
    -

    There is no guarantee on the actual precision.

    -
    See Also
    GLM_GTX_vec1 extension.
    - -

    Definition at line 1567 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 u16
    -
    - -

    16 bit unsigned integer type.

    -

    Default precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 915 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< u16, defaultp > u16vec1
    -
    - -

    Default precision 16 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1071 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< u16, defaultp > u16vec2
    -
    - -

    Default precision 16 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1075 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< u16, defaultp > u16vec3
    -
    - -

    Default precision 16 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1079 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< u16, defaultp > u16vec4
    -
    - -

    Default precision 16 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1083 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 u32
    -
    - -

    32 bit unsigned integer type.

    -

    Default precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 919 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< u32, defaultp > u32vec1
    -
    - -

    Default precision 32 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1150 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< u32, defaultp > u32vec2
    -
    - -

    Default precision 32 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1154 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< u32, defaultp > u32vec3
    -
    - -

    Default precision 32 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1158 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< u32, defaultp > u32vec4
    -
    - -

    Default precision 32 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1162 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 u64
    -
    - -

    64 bit unsigned integer type.

    -

    Default precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 923 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< u64, defaultp > u64vec1
    -
    - -

    Default precision 64 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1309 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< u64, defaultp > u64vec2
    -
    - -

    Default precision 64 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1313 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< u64, defaultp > u64vec3
    -
    - -

    Default precision 64 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1317 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< u64, defaultp > u64vec4
    -
    - -

    Default precision 64 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1321 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 u8
    -
    - -

    8 bit unsigned integer type.

    -

    Default precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 911 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec1< u8, defaultp > u8vec1
    -
    - -

    Default precision 8 bit unsigned integer scalar type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 991 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2< u8, defaultp > u8vec2
    -
    - -

    Default precision 8 bit unsigned integer vector of 2 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 995 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3< u8, defaultp > u8vec3
    -
    - -

    Default precision 8 bit unsigned integer vector of 3 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 999 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4< u8, defaultp > u8vec4
    -
    - -

    Default precision 8 bit unsigned integer vector of 4 components type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 1003 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 uint16
    -
    - -

    16 bit unsigned integer type.

    -

    Default precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 95 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint16 uint16_t
    -
    - -

    16 bit unsigned integer type.

    -

    Default precision 16 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 899 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 uint32
    -
    - -

    32 bit unsigned integer type.

    -

    Default precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 96 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint32 uint32_t
    -
    - -

    32 bit unsigned integer type.

    -

    Default precision 32 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 903 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 uint64
    -
    - -

    64 bit unsigned integer type.

    -

    Default precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 97 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint64 uint64_t
    -
    - -

    64 bit unsigned integer type.

    -

    Default precision 64 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 907 of file fwd.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 uint8
    -
    - -

    8 bit unsigned integer type.

    -

    Default precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 94 of file type_int.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::uint8 uint8_t
    -
    - -

    8 bit unsigned integer type.

    -

    Default precision 8 bit unsigned integer type.

    -
    See Also
    GLM_GTC_type_precision
    - -

    Definition at line 895 of file fwd.hpp.

    - -
    -
    +

    Add vec1, ivec1, uvec1 and bvec1 types.

    +

    <glm/gtc/vec1.hpp> need to be included to use these functionalities.

    diff --git a/doc/api/a00183.html b/doc/api/a00183.html index 1ab2a87d..918d058c 100644 --- a/doc/api/a00183.html +++ b/doc/api/a00183.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_type_ptr + +0.9.6: GLM_GTX_associated_min_max @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,417 +39,1246 @@
    -
    GLM_GTC_type_ptr
    +
    GLM_GTX_associated_min_max
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    GLM_FUNC_DECL detail::tmat2x2
    -< T, defaultp > 
    make_mat2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x2
    -< T, defaultp > 
    make_mat2x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x3
    -< T, defaultp > 
    make_mat2x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat2x4
    -< T, defaultp > 
    make_mat2x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x3
    -< T, defaultp > 
    make_mat3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x2
    -< T, defaultp > 
    make_mat3x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x3
    -< T, defaultp > 
    make_mat3x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat3x4
    -< T, defaultp > 
    make_mat3x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    make_mat4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x2
    -< T, defaultp > 
    make_mat4x2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x3
    -< T, defaultp > 
    make_mat4x3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tmat4x4
    -< T, defaultp > 
    make_mat4x4 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tquat< T,
    -defaultp > 
    make_quat (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec2< T,
    -defaultp > 
    make_vec2 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec3< T,
    -defaultp > 
    make_vec3 (T const *const ptr)
     
    template<typename T >
    GLM_FUNC_DECL detail::tvec4< T,
    -defaultp > 
    make_vec4 (T const *const ptr)
     
    template<typename genType >
    GLM_FUNC_DECL
    -genType::value_type const * 
    value_ptr (genType const &vec)
     
    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL tvec2< U, P > associatedMax (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > associatedMax (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b)
     
    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b, T z, U c)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > associatedMax (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c)
     
    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b, T z, U c, T w, U d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c, vecType< T, P > const &w, vecType< U, P > const &d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c, T w, vecType< U, P > const &d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMax (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
     
    template<typename T , typename U , precision P>
    GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL tvec2< U, P > associatedMin (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (T x, const vecType< U, P > &a, T y, const vecType< U, P > &b)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b)
     
    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b, T z, U c)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c)
     
    template<typename T , typename U >
    GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b, T z, U c, T w, U d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c, vecType< T, P > const &w, vecType< U, P > const &d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c, T w, vecType< U, P > const &d)
     
    template<typename T , typename U , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< U, P > associatedMin (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
     

    Detailed Description

    -

    Handles the interaction between pointers and vector, matrix types.

    -

    This extension defines an overloaded function, glm::value_ptr, which takes any of the core template types. It returns a pointer to the memory layout of the object. Matrix types store their values in column-major order.

    -

    This is useful for uploading data to matrices or copying data to buffer objects.

    -

    Example:

    -
    * #include <glm/glm.hpp>
    -
    * #include <glm/gtc/type_ptr.hpp>
    -
    *
    -
    * glm::vec3 aVector(3);
    -
    * glm::mat4 someMatrix(1.0);
    -
    *
    -
    * glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));
    -
    * glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix));
    -
    *
    -

    <glm/gtc/type_ptr.hpp> need to be included to use these functionalities.

    +

    Min and max functions that return associated values not the compared onces.

    +

    <glm/gtx/associated_min_max.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat2x2<T, defaultp> glm::make_mat2 GLM_FUNC_DECL U glm::associatedMax (T const *const ptr)x,
    a,
    y,
    b 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 2 variables and returns 2 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat2x2<T, defaultp> glm::make_mat2x2 GLM_FUNC_DECL tvec2<U, P> glm::associatedMax (T const *const ptr)vecType< T, P > const & x,
    vecType< U, P > const & a,
    vecType< T, P > const & y,
    vecType< U, P > const & b 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 2 variables and returns 2 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat2x3<T, defaultp> glm::make_mat2x3 GLM_FUNC_DECL vecType<T, P> glm::associatedMax (T const *const ptr)x,
    vecType< U, P > const & a,
    y,
    vecType< U, P > const & b 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 2 variables and returns 2 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat2x4<T, defaultp> glm::make_mat2x4 GLM_FUNC_DECL vecType<U, P> glm::associatedMax (T const *const ptr)vecType< T, P > const & x,
    a,
    vecType< T, P > const & y,
    b 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 2 variables and returns 2 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat3x3<T, defaultp> glm::make_mat3 GLM_FUNC_DECL U glm::associatedMax (T const *const ptr)x,
    a,
    y,
    b,
    z,
    c 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 3 variables and returns 3 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat3x2<T, defaultp> glm::make_mat3x2 GLM_FUNC_DECL vecType<U, P> glm::associatedMax (T const *const ptr)vecType< T, P > const & x,
    vecType< U, P > const & a,
    vecType< T, P > const & y,
    vecType< U, P > const & b,
    vecType< T, P > const & z,
    vecType< U, P > const & c 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 3 variables and returns 3 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat3x3<T, defaultp> glm::make_mat3x3 GLM_FUNC_DECL vecType<T, P> glm::associatedMax (T const *const ptr)x,
    vecType< U, P > const & a,
    y,
    vecType< U, P > const & b,
    z,
    vecType< U, P > const & c 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 3 variables and returns 3 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat3x4<T, defaultp> glm::make_mat3x4 GLM_FUNC_DECL vecType<U, P> glm::associatedMax (T const *const ptr)vecType< T, P > const & x,
    a,
    vecType< T, P > const & y,
    b,
    vecType< T, P > const & z,
    c 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 3 variables and returns 3 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat4x4<T, defaultp> glm::make_mat4 GLM_FUNC_DECL U glm::associatedMax (T const *const ptr)x,
    a,
    y,
    b,
    z,
    c,
    w,
    d 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 4 variables and returns 4 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat4x2<T, defaultp> glm::make_mat4x2 GLM_FUNC_DECL vecType<U, P> glm::associatedMax (T const *const ptr)vecType< T, P > const & x,
    vecType< U, P > const & a,
    vecType< T, P > const & y,
    vecType< U, P > const & b,
    vecType< T, P > const & z,
    vecType< U, P > const & c,
    vecType< T, P > const & w,
    vecType< U, P > const & d 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 4 variables and returns 4 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat4x3<T, defaultp> glm::make_mat4x3 GLM_FUNC_DECL vecType<U, P> glm::associatedMax (T const *const ptr)x,
    vecType< U, P > const & a,
    y,
    vecType< U, P > const & b,
    z,
    vecType< U, P > const & c,
    w,
    vecType< U, P > const & d 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 4 variables and returns 4 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tmat4x4<T, defaultp> glm::make_mat4x4 GLM_FUNC_DECL vecType<U, P> glm::associatedMax (T const *const ptr)vecType< T, P > const & x,
    a,
    vecType< T, P > const & y,
    b,
    vecType< T, P > const & z,
    c,
    vecType< T, P > const & w,
    d 
    )
    -

    Build a matrix from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Maximum comparison between 4 variables and returns 4 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tquat<T, defaultp> glm::make_quat GLM_FUNC_DECL U glm::associatedMin (T const *const ptr)x,
    a,
    y,
    b 
    )
    -

    Build a quaternion from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Minimum comparison between 2 variables and returns 2 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tvec2<T, defaultp> glm::make_vec2 GLM_FUNC_DECL tvec2<U, P> glm::associatedMin (T const *const ptr)vecType< T, P > const & x,
    vecType< U, P > const & a,
    vecType< T, P > const & y,
    vecType< U, P > const & b 
    )
    -

    Build a vector from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Minimum comparison between 2 variables and returns 2 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tvec3<T, defaultp> glm::make_vec3 GLM_FUNC_DECL vecType<U, P> glm::associatedMin (T const *const ptr)x,
    const vecType< U, P > & a,
    y,
    const vecType< U, P > & b 
    )
    -

    Build a vector from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Minimum comparison between 2 variables and returns 2 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL detail::tvec4<T, defaultp> glm::make_vec4 GLM_FUNC_DECL vecType<U, P> glm::associatedMin (T const *const ptr)vecType< T, P > const & x,
    a,
    vecType< T, P > const & y,
    b 
    )
    -

    Build a vector from a pointer.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Minimum comparison between 2 variables and returns 2 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType::value_type const* glm::value_ptr GLM_FUNC_DECL U glm::associatedMin (genType const & vec)x,
    a,
    y,
    b,
    z,
    c 
    )
    -

    Return the constant address to the data of the input parameter.

    -
    See Also
    GLM_GTC_type_ptr
    +

    Minimum comparison between 3 variables and returns 3 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<U, P> glm::associatedMin (vecType< T, P > const & x,
    vecType< U, P > const & a,
    vecType< T, P > const & y,
    vecType< U, P > const & b,
    vecType< T, P > const & z,
    vecType< U, P > const & c 
    )
    +
    + +

    Minimum comparison between 3 variables and returns 3 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL U glm::associatedMin (x,
    a,
    y,
    b,
    z,
    c,
    w,
    d 
    )
    +
    + +

    Minimum comparison between 4 variables and returns 4 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<U, P> glm::associatedMin (vecType< T, P > const & x,
    vecType< U, P > const & a,
    vecType< T, P > const & y,
    vecType< U, P > const & b,
    vecType< T, P > const & z,
    vecType< U, P > const & c,
    vecType< T, P > const & w,
    vecType< U, P > const & d 
    )
    +
    + +

    Minimum comparison between 4 variables and returns 4 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<U, P> glm::associatedMin (x,
    vecType< U, P > const & a,
    y,
    vecType< U, P > const & b,
    z,
    vecType< U, P > const & c,
    w,
    vecType< U, P > const & d 
    )
    +
    + +

    Minimum comparison between 4 variables and returns 4 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<U, P> glm::associatedMin (vecType< T, P > const & x,
    a,
    vecType< T, P > const & y,
    b,
    vecType< T, P > const & z,
    c,
    vecType< T, P > const & w,
    d 
    )
    +
    + +

    Minimum comparison between 4 variables and returns 4 associated variable values.

    +
    See also
    GLM_GTX_associated_min_max
    @@ -460,7 +1287,7 @@ genType::value_type const *  diff --git a/doc/api/a00184.html b/doc/api/a00184.html index 471a38d5..d5b866d8 100644 --- a/doc/api/a00184.html +++ b/doc/api/a00184.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTC_ulp + +0.9.6: GLM_GTX_bit @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,186 +39,188 @@ +
    - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    GLM_FUNC_DECL uint float_distance (T const &x, T const &y)
     
    template<typename T , template< typename > class vecType>
    GLM_FUNC_DECL vecType< uint > float_distance (vecType< T > const &x, vecType< T > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType next_float (genType const &x, uint const &Distance)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType prev_float (genType const &x, uint const &Distance)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType highestBitValue (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > highestBitValue (vecType< T, P > const &value)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType powerOfTwoAbove (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > powerOfTwoAbove (vecType< T, P > const &value)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType powerOfTwoBelow (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > powerOfTwoBelow (vecType< T, P > const &value)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType powerOfTwoNearest (genIUType Value)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > powerOfTwoNearest (vecType< T, P > const &value)
     

    Detailed Description

    -

    Allow the measurement of the accuracy of a function against a reference implementation.

    -

    This extension works on floating-point data and provide results in ULP. <glm/gtc/ulp.hpp> need to be included to use these features.

    +

    Allow to perform bit operations on integer values.

    +

    <glm/gtx/bit.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - - - + + - - - - - - -
    GLM_FUNC_DECL uint glm::float_distance GLM_FUNC_DECL genIUType glm::highestBitValue (T const & x,
    genIUType Value) T const & y 
    )
    - -

    Return the distance in the number of ULP between 2 scalars.

    -
    See Also
    GLM_GTC_ulp
    +
    See also
    GLM_GTX_bit
    - +
    - + - - - - - - - - - - - - - - -
    GLM_FUNC_DECL vecType<uint> glm::float_distance GLM_FUNC_DECL vecType<T, P> glm::highestBitValue (vecType< T > const & x,
    vecType< T > const & y 
    )
    -
    - -

    Return the distance in the number of ULP between 2 vectors.

    -
    See Also
    GLM_GTC_ulp
    - -
    -
    - -
    -
    - - - - - - + +
    GLM_FUNC_DECL genType glm::next_float (genType const & x)vecType< T, P > const & value)
    -

    Return the next ULP value(s) after the input value(s).

    -
    See Also
    GLM_GTC_ulp
    +

    Find the highest bit set to 1 in a integer variable and return its value.

    +
    See also
    GLM_GTX_bit
    - +
    - + - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::next_float GLM_FUNC_DECL genIUType glm::powerOfTwoAbove (genType const & x,
    uint const & Distance 
    )
    -
    - -

    Return the value(s) ULP distance after the input value(s).

    -
    See Also
    GLM_GTC_ulp
    - -
    -
    - -
    -
    - - - - - - + +
    GLM_FUNC_DECL genType glm::prev_float (genType const & x)genIUType Value)
    -

    Return the previous ULP value(s) before the input value(s).

    -
    See Also
    GLM_GTC_ulp
    +

    Return the power of two number which value is just higher the input value.

    +
    See also
    GLM_GTX_bit
    - +
    - + - - - - - + + - - - - - - -
    GLM_FUNC_DECL genType glm::prev_float GLM_FUNC_DECL vecType<T, P> glm::powerOfTwoAbove (genType const & x,
    vecType< T, P > const & value) uint const & Distance 
    )
    -

    Return the value(s) ULP distance before the input value(s).

    -
    See Also
    GLM_GTC_ulp
    +

    Return the power of two number which value is just higher the input value.

    +
    See also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genIUType glm::powerOfTwoBelow (genIUType Value)
    +
    + +

    Return the power of two number which value is just lower the input value.

    +
    See also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::powerOfTwoBelow (vecType< T, P > const & value)
    +
    + +

    Return the power of two number which value is just lower the input value.

    +
    See also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genIUType glm::powerOfTwoNearest (genIUType Value)
    +
    + +

    Return the power of two number which value is the closet to the input value.

    +
    See also
    GLM_GTX_bit
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::powerOfTwoNearest (vecType< T, P > const & value)
    +
    + +

    Return the power of two number which value is the closet to the input value.

    +
    See also
    GLM_GTX_bit
    @@ -229,7 +229,7 @@ Functions diff --git a/doc/api/a00185.html b/doc/api/a00185.html index 4f4ff986..a3a6953c 100644 --- a/doc/api/a00185.html +++ b/doc/api/a00185.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_associated_min_max + +0.9.6: GLM_GTX_closest_point @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,61 +39,44 @@
    -
    GLM_GTX_associated_min_max
    +
    GLM_GTX_closest_point
    - - - - - - - - - - - - - - - - - - + + + + + +

    Functions

    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMax (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c)
     
    template<typename genTypeT , typename genTypeU >
    genTypeU associatedMin (const genTypeT &x, const genTypeU &a, const genTypeT &y, const genTypeU &b, const genTypeT &z, const genTypeU &c, const genTypeT &w, const genTypeU &d)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > closestPointOnLine (tvec3< T, P > const &point, tvec3< T, P > const &a, tvec3< T, P > const &b)
     
    +template<typename T , precision P>
    GLM_FUNC_DECL tvec2< T, P > closestPointOnLine (tvec2< T, P > const &point, tvec2< T, P > const &a, tvec2< T, P > const &b)
     

    Detailed Description

    -

    Min and max functions that return associated values not the compared onces.

    -

    <glm/gtx/associated_min_max.hpp> need to be included to use these functionalities.

    +

    Find the point on a straight line which is the closet of a point.

    +

    <glm/gtx/closest_point.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + - + - - - - - - - + @@ -106,285 +87,8 @@ Functions
    genTypeU glm::associatedMax GLM_FUNC_DECL tvec3<T, P> glm::closestPointOnLine (const genTypeT & x, tvec3< T, P > const & point,
    const genTypeU & tvec3< T, P > const &  a,
    const genTypeT & y,
    const genTypeU & tvec3< T, P > const &  b 
    -

    Max comparison between 2 variables.

    -
    See Also
    GLM_GTX_associated_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeU glm::associatedMax (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c 
    )
    -
    - -

    Max comparison between 3 variables.

    -
    See Also
    GLM_GTX_associated_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeU glm::associatedMax (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c,
    const genTypeT & w,
    const genTypeU & d 
    )
    -
    - -

    Max comparison between 4 variables.

    -
    See Also
    GLM_GTX_associated_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeU glm::associatedMin (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b 
    )
    -
    - -

    Min comparison between 2 variables.

    -
    See Also
    GLM_GTX_associated_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeU glm::associatedMin (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c 
    )
    -
    - -

    Min comparison between 3 variables.

    -
    See Also
    GLM_GTX_associated_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    genTypeU glm::associatedMin (const genTypeT & x,
    const genTypeU & a,
    const genTypeT & y,
    const genTypeU & b,
    const genTypeT & z,
    const genTypeU & c,
    const genTypeT & w,
    const genTypeU & d 
    )
    -
    - -

    Min comparison between 4 variables.

    -
    See Also
    GLM_GTX_associated_min_max
    +

    Find the point on a straight line which is the closet of a point.

    +
    See also
    GLM_GTX_closest_point
    @@ -393,7 +97,7 @@ Functions diff --git a/doc/api/a00186.html b/doc/api/a00186.html index c9c7595a..05abaf47 100644 --- a/doc/api/a00186.html +++ b/doc/api/a00186.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_bit + +0.9.6: GLM_GTX_color_space @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,98 +39,127 @@ +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    Functions

    GLM_FUNC_DECL int16 bitfieldInterleave (int8 x, int8 y)
     
    GLM_FUNC_DECL uint16 bitfieldInterleave (uint8 x, uint8 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int16 x, int16 y)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint16 x, uint16 y)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y, int32 z)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y, uint32 z)
     
    GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z, int8 w)
     
    GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z, uint8 w)
     
    GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z, int16 w)
     
    GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z, uint16 w)
     
    template<typename genType >
    GLM_DEPRECATED GLM_FUNC_DECL
    -genType 
    bitRevert (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType bitRotateLeft (genType const &In, std::size_t Shift)
     
    template<typename genType >
    GLM_FUNC_DECL genType bitRotateRight (genType const &In, std::size_t Shift)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType fillBitfieldWithOne (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename genIUType >
    GLM_FUNC_DECL genIUType fillBitfieldWithZero (genIUType const &Value, int const &FromBit, int const &ToBit)
     
    template<typename genType >
    GLM_FUNC_DECL genType highestBitValue (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL bool isPowerOfTwo (genType const &value)
     
    template<typename genIType >
    GLM_FUNC_DECL genIType mask (genIType const &count)
     
    template<typename genType >
    GLM_FUNC_DECL genType powerOfTwoAbove (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType powerOfTwoBelow (genType const &value)
     
    template<typename genType >
    GLM_FUNC_DECL genType powerOfTwoNearest (genType const &value)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > hsvColor (tvec3< T, P > const &rgbValue)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T luminosity (tvec3< T, P > const &color)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rgbColor (tvec3< T, P > const &hsvValue)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    saturation (T const s)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > saturation (T const s, tvec3< T, P > const &color)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > saturation (T const s, tvec4< T, P > const &color)
     

    Detailed Description

    -

    Allow to perform bit operations on integer values.

    -

    <glm/gtx/bit.hpp> need to be included to use these functionalities.

    +

    Related to RGB to HSV conversions and operations.

    +

    <glm/gtx/color_space.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + + + +
    GLM_FUNC_DECL int16 glm::bitfieldInterleave GLM_FUNC_DECL tvec3<T, P> glm::hsvColor (int8 x, tvec3< T, P > const & rgbValue)
    +
    + +

    Converts a color from RGB color space to its color in HSV color space.

    +
    See also
    GLM_GTX_color_space
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::luminosity (tvec3< T, P > const & color)
    +
    + +

    Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.

    +
    See also
    GLM_GTX_color_space
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::rgbColor (tvec3< T, P > const & hsvValue)
    +
    + +

    Converts a color from HSV color space to its color in RGB color space.

    +
    See also
    GLM_GTX_color_space
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::saturation (T const s)
    +
    + +

    Build a saturation matrix.

    +
    See also
    GLM_GTX_color_space
    + +
    +
    + +
    +
    + + + + + + - - + + @@ -142,27 +169,26 @@ genType  diff --git a/doc/api/a00189.html b/doc/api/a00189.html index 64317812..07360fce 100644 --- a/doc/api/a00189.html +++ b/doc/api/a00189.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_color_space_YCoCg + +0.9.6: GLM_GTX_compatibility @@ -16,9 +16,9 @@
    GLM_FUNC_DECL tvec3<T, P> glm::saturation (T const s,
    int8 y tvec3< T, P > const & color 
    - +
    - + - - + + - - + + @@ -172,774 +198,8 @@ genType  diff --git a/doc/api/a00188.html b/doc/api/a00188.html index 6ce5f5cc..00d39e40 100644 --- a/doc/api/a00188.html +++ b/doc/api/a00188.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_color_space + +0.9.6: GLM_GTX_common @@ -16,9 +16,9 @@
    GLM_FUNC_DECL uint16 glm::bitfieldInterleave GLM_FUNC_DECL tvec4<T, P> glm::saturation (uint8 x, T const s,
    uint8 y tvec4< T, P > const & color 
    - - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL int32 glm::bitfieldInterleave (int16 x,
    int16 y 
    )
    -
    - -

    Interleaves the bits of x and y.

    -

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL uint32 glm::bitfieldInterleave (uint16 x,
    uint16 y 
    )
    -
    - -

    Interleaves the bits of x and y.

    -

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL int64 glm::bitfieldInterleave (int32 x,
    int32 y 
    )
    -
    - -

    Interleaves the bits of x and y.

    -

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint32 x,
    uint32 y 
    )
    -
    - -

    Interleaves the bits of x and y.

    -

    The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL int32 glm::bitfieldInterleave (int8 x,
    int8 y,
    int8 z 
    )
    -
    - -

    Interleaves the bits of x, y and z.

    -

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL uint32 glm::bitfieldInterleave (uint8 x,
    uint8 y,
    uint8 z 
    )
    -
    - -

    Interleaves the bits of x, y and z.

    -

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL int64 glm::bitfieldInterleave (int16 x,
    int16 y,
    int16 z 
    )
    -
    - -

    Interleaves the bits of x, y and z.

    -

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint16 x,
    uint16 y,
    uint16 z 
    )
    -
    - -

    Interleaves the bits of x, y and z.

    -

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL int64 glm::bitfieldInterleave (int32 x,
    int32 y,
    int32 z 
    )
    -
    - -

    Interleaves the bits of x, y and z.

    -

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint32 x,
    uint32 y,
    uint32 z 
    )
    -
    - -

    Interleaves the bits of x, y and z.

    -

    The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL int32 glm::bitfieldInterleave (int8 x,
    int8 y,
    int8 z,
    int8 w 
    )
    -
    - -

    Interleaves the bits of x, y, z and w.

    -

    The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL uint32 glm::bitfieldInterleave (uint8 x,
    uint8 y,
    uint8 z,
    uint8 w 
    )
    -
    - -

    Interleaves the bits of x, y, z and w.

    -

    The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL int64 glm::bitfieldInterleave (int16 x,
    int16 y,
    int16 z,
    int16 w 
    )
    -
    - -

    Interleaves the bits of x, y, z and w.

    -

    The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint16 x,
    uint16 y,
    uint16 z,
    uint16 w 
    )
    -
    - -

    Interleaves the bits of x, y, z and w.

    -

    The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_DEPRECATED GLM_FUNC_DECL genType glm::bitRevert (genType const & value)
    -
    - -

    Revert all bits of any integer based type.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::bitRotateLeft (genType const & In,
    std::size_t Shift 
    )
    -
    - -

    Rotate all bits to the left.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::bitRotateRight (genType const & In,
    std::size_t Shift 
    )
    -
    - -

    Rotate all bits to the right.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genIUType glm::fillBitfieldWithOne (genIUType const & Value,
    int const & FromBit,
    int const & ToBit 
    )
    -
    - -

    Set to 1 a range of bits.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genIUType glm::fillBitfieldWithZero (genIUType const & Value,
    int const & FromBit,
    int const & ToBit 
    )
    -
    - -

    Set to 0 a range of bits.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::highestBitValue (genType const & value)
    -
    - -

    Find the highest bit set to 1 in a integer variable and return its value.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL bool glm::isPowerOfTwo (genType const & value)
    -
    - -

    Return true if the value is a power of two number.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genIType glm::mask (genIType const & count)
    -
    - -

    Build a mask of 'count' bits.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::powerOfTwoAbove (genType const & value)
    -
    - -

    Return the power of two number which value is just higher the input value.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::powerOfTwoBelow (genType const & value)
    -
    - -

    Return the power of two number which value is just lower the input value.

    -
    See Also
    GLM_GTX_bit
    - -
    -
    - -
    -
    - - - - - - - - -
    GLM_FUNC_DECL genType glm::powerOfTwoNearest (genType const & value)
    -
    - -

    Return the power of two number which value is the closet to the input value.

    -
    See Also
    GLM_GTX_bit
    +

    Modify the saturation of a color.

    +
    See also
    GLM_GTX_color_space
    @@ -948,7 +208,7 @@ genType 
    diff --git a/doc/api/a00187.html b/doc/api/a00187.html index b210e50a..1cb2e855 100644 --- a/doc/api/a00187.html +++ b/doc/api/a00187.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_closest_point + +0.9.6: GLM_GTX_color_space_YCoCg @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,52 +39,106 @@
    -
    GLM_GTX_closest_point
    +
    GLM_GTX_color_space_YCoCg
    - - - + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > closestPointOnLine (detail::tvec3< T, P > const &point, detail::tvec3< T, P > const &a, detail::tvec3< T, P > const &b)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rgb2YCoCg (tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rgb2YCoCgR (tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > YCoCg2rgb (tvec3< T, P > const &YCoCgColor)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > YCoCgR2rgb (tvec3< T, P > const &YCoCgColor)
     

    Detailed Description

    -

    Find the point on a straight line which is the closet of a point.

    -

    <glm/gtx/closest_point.hpp> need to be included to use these functionalities.

    +

    RGB to YCoCg conversions and operations.

    +

    <glm/gtx/color_space_YCoCg.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - - - + + - - - - - - - - - - - - -
    detail::tvec3<T, P> glm::closestPointOnLine GLM_FUNC_DECL tvec3<T, P> glm::rgb2YCoCg (detail::tvec3< T, P > const & point,
    tvec3< T, P > const & rgbColor) detail::tvec3< T, P > const & a,
    detail::tvec3< T, P > const & b 
    )
    -

    Find the point on a straight line which is the closet of a point.

    -
    See Also
    GLM_GTX_closest_point
    +

    Convert a color from RGB color space to YCoCg color space.

    +
    See also
    GLM_GTX_color_space_YCoCg
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::rgb2YCoCgR (tvec3< T, P > const & rgbColor)
    +
    + +

    Convert a color from RGB color space to YCoCgR color space.

    +
    See also
    "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
    +
    +GLM_GTX_color_space_YCoCg
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::YCoCg2rgb (tvec3< T, P > const & YCoCgColor)
    +
    + +

    Convert a color from YCoCg color space to RGB color space.

    +
    See also
    GLM_GTX_color_space_YCoCg
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::YCoCgR2rgb (tvec3< T, P > const & YCoCgColor)
    +
    + +

    Convert a color from YCoCgR color space to RGB color space.

    +
    See also
    "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
    +
    +GLM_GTX_color_space_YCoCg
    @@ -95,7 +147,7 @@ Functions
    + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,166 +39,45 @@
    -
    +
    - - - - - - - - - - - - - - - - - - + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > hsvColor (detail::tvec3< T, P > const &rgbValue)
     
    template<typename T , precision P>
    luminosity (detail::tvec3< T, P > const &color)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rgbColor (detail::tvec3< T, P > const &hsvValue)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > saturation (T const s)
     
    template<typename T , precision P>
    detail::tvec3< T, P > saturation (T const s, detail::tvec3< T, P > const &color)
     
    template<typename T , precision P>
    detail::tvec4< T, P > saturation (T const s, detail::tvec4< T, P > const &color)
     
    template<typename genType >
    GLM_FUNC_DECL genType::bool_type isdenormal (genType const &x)
     

    Detailed Description

    -

    Related to RGB to HSV conversions and operations.

    -

    <glm/gtx/color_space.hpp> need to be included to use these functionalities.

    +

    Provide functions to increase the compatibility with Cg and HLSL languages.

    +

    <glm/gtx/common.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + +
    detail::tvec3<T, P> glm::hsvColor GLM_FUNC_DECL genType::bool_type glm::isdenormal (detail::tvec3< T, P > const & rgbValue)genType const & x)
    -

    Converts a color from RGB color space to its color in HSV color space.

    -
    See Also
    GLM_GTX_color_space
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::luminosity (detail::tvec3< T, P > const & color)
    -
    - -

    Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.

    -
    See Also
    GLM_GTX_color_space
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec3<T, P> glm::rgbColor (detail::tvec3< T, P > const & hsvValue)
    -
    - -

    Converts a color from HSV color space to its color in RGB color space.

    -
    See Also
    GLM_GTX_color_space
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T, P> glm::saturation (T const s)
    -
    - -

    Build a saturation matrix.

    -
    See Also
    GLM_GTX_color_space
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T, P> glm::saturation (T const s,
    detail::tvec3< T, P > const & color 
    )
    -
    - -

    Modify the saturation of a color.

    -
    See Also
    GLM_GTX_color_space
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec4<T, P> glm::saturation (T const s,
    detail::tvec4< T, P > const & color 
    )
    -
    - -

    Modify the saturation of a color.

    -
    See Also
    GLM_GTX_color_space
    +

    Returns true if x is a denormalized number Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format.

    +

    This format is less precise but can represent values closer to zero.

    +
    Template Parameters
    + + +
    genTypeFloating-point scalar or vector types.
    +
    +
    +
    See also
    GLSL isnan man page
    +
    +GLSL 4.20.8 specification, section 8.3 Common Functions
    @@ -209,7 +86,7 @@ Functions
    + @@ -26,121 +26,317 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GLM_GTX_color_space_YCoCg
    +
    GLM_GTX_compatibility
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +typedef bool bool1
     
    +typedef bool bool1x1
     
    +typedef tvec2< bool, highp > bool2
     
    +typedef tmat2x2< bool, highp > bool2x2
     
    +typedef tmat2x3< bool, highp > bool2x3
     
    +typedef tmat2x4< bool, highp > bool2x4
     
    +typedef tvec3< bool, highp > bool3
     
    +typedef tmat3x2< bool, highp > bool3x2
     
    +typedef tmat3x3< bool, highp > bool3x3
     
    +typedef tmat3x4< bool, highp > bool3x4
     
    +typedef tvec4< bool, highp > bool4
     
    +typedef tmat4x2< bool, highp > bool4x2
     
    +typedef tmat4x3< bool, highp > bool4x3
     
    +typedef tmat4x4< bool, highp > bool4x4
     
    +typedef double double1
     
    +typedef double double1x1
     
    +typedef tvec2< double, highp > double2
     
    +typedef tmat2x2< double, highp > double2x2
     
    +typedef tmat2x3< double, highp > double2x3
     
    +typedef tmat2x4< double, highp > double2x4
     
    +typedef tvec3< double, highp > double3
     
    +typedef tmat3x2< double, highp > double3x2
     
    +typedef tmat3x3< double, highp > double3x3
     
    +typedef tmat3x4< double, highp > double3x4
     
    +typedef tvec4< double, highp > double4
     
    +typedef tmat4x2< double, highp > double4x2
     
    +typedef tmat4x3< double, highp > double4x3
     
    +typedef tmat4x4< double, highp > double4x4
     
    +typedef float float1
     
    +typedef float float1x1
     
    +typedef tvec2< float, highp > float2
     
    +typedef tmat2x2< float, highp > float2x2
     
    +typedef tmat2x3< float, highp > float2x3
     
    +typedef tmat2x4< float, highp > float2x4
     
    +typedef tvec3< float, highp > float3
     
    +typedef tmat3x2< float, highp > float3x2
     
    +typedef tmat3x3< float, highp > float3x3
     
    +typedef tmat3x4< float, highp > float3x4
     
    +typedef tvec4< float, highp > float4
     
    +typedef tmat4x2< float, highp > float4x2
     
    +typedef tmat4x3< float, highp > float4x3
     
    +typedef tmat4x4< float, highp > float4x4
     
    +typedef int int1
     
    +typedef int int1x1
     
    +typedef tvec2< int, highp > int2
     
    +typedef tmat2x2< int, highp > int2x2
     
    +typedef tmat2x3< int, highp > int2x3
     
    +typedef tmat2x4< int, highp > int2x4
     
    +typedef tvec3< int, highp > int3
     
    +typedef tmat3x2< int, highp > int3x2
     
    +typedef tmat3x3< int, highp > int3x3
     
    +typedef tmat3x4< int, highp > int3x4
     
    +typedef tvec4< int, highp > int4
     
    +typedef tmat4x2< int, highp > int4x2
     
    +typedef tmat4x3< int, highp > int4x3
     
    +typedef tmat4x4< int, highp > int4x4
     
    - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > rgb2YCoCg (detail::tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rgb2YCoCgR (detail::tvec3< T, P > const &rgbColor)
     
    template<typename T , precision P>
    detail::tvec3< T, P > YCoCg2rgb (detail::tvec3< T, P > const &YCoCgColor)
     
    template<typename T , precision P>
    detail::tvec3< T, P > YCoCgR2rgb (detail::tvec3< T, P > const &YCoCgColor)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER T atan2 (T x, T y)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec2< T, P > atan2 (const tvec2< T, P > &x, const tvec2< T, P > &y)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec3< T, P > atan2 (const tvec3< T, P > &x, const tvec3< T, P > &y)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec4< T, P > atan2 (const tvec4< T, P > &x, const tvec4< T, P > &y)
     
    +template<typename genType >
    GLM_FUNC_DECL bool isfinite (genType const &x)
     
    +template<typename T , precision P>
    GLM_FUNC_DECL tvec2< bool, P > isfinite (const tvec2< T, P > &x)
     
    +template<typename T , precision P>
    GLM_FUNC_DECL tvec3< bool, P > isfinite (const tvec3< T, P > &x)
     
    +template<typename T , precision P>
    GLM_FUNC_DECL tvec4< bool, P > isfinite (const tvec4< T, P > &x)
     
    +template<typename T >
    GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec2< T, P > lerp (const tvec2< T, P > &x, const tvec2< T, P > &y, T a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec3< T, P > lerp (const tvec3< T, P > &x, const tvec3< T, P > &y, T a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec4< T, P > lerp (const tvec4< T, P > &x, const tvec4< T, P > &y, T a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec2< T, P > lerp (const tvec2< T, P > &x, const tvec2< T, P > &y, const tvec2< T, P > &a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec3< T, P > lerp (const tvec3< T, P > &x, const tvec3< T, P > &y, const tvec3< T, P > &a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec4< T, P > lerp (const tvec4< T, P > &x, const tvec4< T, P > &y, const tvec4< T, P > &a)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER T saturate (T x)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec2< T, P > saturate (const tvec2< T, P > &x)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec3< T, P > saturate (const tvec3< T, P > &x)
     
    +template<typename T , precision P>
    GLM_FUNC_QUALIFIER tvec4< T, P > saturate (const tvec4< T, P > &x)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T slerp (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     

    Detailed Description

    -

    RGB to YCoCg conversions and operations.

    -

    <glm/gtx/color_space_YCoCg.hpp> need to be included to use these functionalities.

    +

    Provide functions to increase the compatibility with Cg and HLSL languages.

    +

    <glm/gtx/compatibility.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - + + -
    detail::tvec3<T, P> glm::rgb2YCoCg GLM_FUNC_QUALIFIER T glm::slerp (detail::tvec3< T, P > const & rgbColor)tquat< T, P > const & x,
    -
    - -

    Convert a color from RGB color space to YCoCg color space.

    -
    See Also
    GLM_GTX_color_space_YCoCg
    - -
    -
    - -
    -
    - - - - - + + + -
    detail::tvec3<T, P> glm::rgb2YCoCgR (detail::tvec3< T, P > const & rgbColor) tquat< T, P > const & y,
    -
    - -

    Convert a color from RGB color space to YCoCgR color space.

    -
    See Also
    "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
    -
    -GLM_GTX_color_space_YCoCg
    - -
    -
    - -
    -
    - - - - - + + + -
    detail::tvec3<T, P> glm::YCoCg2rgb (detail::tvec3< T, P > const & YCoCgColor) T const & a 
    -
    - -

    Convert a color from YCoCg color space to RGB color space.

    -
    See Also
    GLM_GTX_color_space_YCoCg
    - -
    -
    - -
    -
    - - - - - + +
    detail::tvec3<T, P> glm::YCoCgR2rgb (detail::tvec3< T, P > const & YCoCgColor) )
    -

    Convert a color from YCoCgR color space to RGB color space.

    -
    See Also
    "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
    -
    -GLM_GTX_color_space_YCoCg
    +

    Returns the slurp interpolation between two quaternions.

    +

    Spherical linear interpolation of two quaternions.

    + +

    Definition at line 72 of file compatibility.hpp.

    + +

    References glm::mix().

    @@ -149,7 +345,7 @@ Functions diff --git a/doc/api/a00190.html b/doc/api/a00190.html index 875fb0e9..13f9a9b6 100644 --- a/doc/api/a00190.html +++ b/doc/api/a00190.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_compatibility + +0.9.6: GLM_GTX_component_wise @@ -16,9 +16,9 @@ + @@ -26,376 +26,115 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GLM_GTX_compatibility
    +
    GLM_GTX_component_wise
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    -typedef bool bool1
     
    -typedef bool bool1x1
     
    -typedef detail::tvec2< bool,
    -highp > 
    bool2
     
    -typedef detail::tmat2x2< bool,
    -highp > 
    bool2x2
     
    -typedef detail::tmat2x3< bool,
    -highp > 
    bool2x3
     
    -typedef detail::tmat2x4< bool,
    -highp > 
    bool2x4
     
    -typedef detail::tvec3< bool,
    -highp > 
    bool3
     
    -typedef detail::tmat3x2< bool,
    -highp > 
    bool3x2
     
    -typedef detail::tmat3x3< bool,
    -highp > 
    bool3x3
     
    -typedef detail::tmat3x4< bool,
    -highp > 
    bool3x4
     
    -typedef detail::tvec4< bool,
    -highp > 
    bool4
     
    -typedef detail::tmat4x2< bool,
    -highp > 
    bool4x2
     
    -typedef detail::tmat4x3< bool,
    -highp > 
    bool4x3
     
    -typedef detail::tmat4x4< bool,
    -highp > 
    bool4x4
     
    -typedef double double1
     
    -typedef double double1x1
     
    -typedef detail::tvec2< double,
    -highp > 
    double2
     
    -typedef detail::tmat2x2
    -< double, highp > 
    double2x2
     
    -typedef detail::tmat2x3
    -< double, highp > 
    double2x3
     
    -typedef detail::tmat2x4
    -< double, highp > 
    double2x4
     
    -typedef detail::tvec3< double,
    -highp > 
    double3
     
    -typedef detail::tmat3x2
    -< double, highp > 
    double3x2
     
    -typedef detail::tmat3x3
    -< double, highp > 
    double3x3
     
    -typedef detail::tmat3x4
    -< double, highp > 
    double3x4
     
    -typedef detail::tvec4< double,
    -highp > 
    double4
     
    -typedef detail::tmat4x2
    -< double, highp > 
    double4x2
     
    -typedef detail::tmat4x3
    -< double, highp > 
    double4x3
     
    -typedef detail::tmat4x4
    -< double, highp > 
    double4x4
     
    -typedef float float1
     
    -typedef float float1x1
     
    -typedef detail::tvec2< float,
    -highp > 
    float2
     
    -typedef detail::tmat2x2< float,
    -highp > 
    float2x2
     
    -typedef detail::tmat2x3< float,
    -highp > 
    float2x3
     
    -typedef detail::tmat2x4< float,
    -highp > 
    float2x4
     
    -typedef detail::tvec3< float,
    -highp > 
    float3
     
    -typedef detail::tmat3x2< float,
    -highp > 
    float3x2
     
    -typedef detail::tmat3x3< float,
    -highp > 
    float3x3
     
    -typedef detail::tmat3x4< float,
    -highp > 
    float3x4
     
    -typedef detail::tvec4< float,
    -highp > 
    float4
     
    -typedef detail::tmat4x2< float,
    -highp > 
    float4x2
     
    -typedef detail::tmat4x3< float,
    -highp > 
    float4x3
     
    -typedef detail::tmat4x4< float,
    -highp > 
    float4x4
     
    -typedef int int1
     
    -typedef int int1x1
     
    -typedef detail::tvec2< int, highp > int2
     
    -typedef detail::tmat2x2< int,
    -highp > 
    int2x2
     
    -typedef detail::tmat2x3< int,
    -highp > 
    int2x3
     
    -typedef detail::tmat2x4< int,
    -highp > 
    int2x4
     
    -typedef detail::tvec3< int, highp > int3
     
    -typedef detail::tmat3x2< int,
    -highp > 
    int3x2
     
    -typedef detail::tmat3x3< int,
    -highp > 
    int3x3
     
    -typedef detail::tmat3x4< int,
    -highp > 
    int3x4
     
    -typedef detail::tvec4< int, highp > int4
     
    -typedef detail::tmat4x2< int,
    -highp > 
    int4x2
     
    -typedef detail::tmat4x3< int,
    -highp > 
    int4x3
     
    -typedef detail::tmat4x4< int,
    -highp > 
    int4x4
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +

    Functions

    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER T atan2 (T x, T y)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    atan2 (const detail::tvec2< T, P > &x, const detail::tvec2< T, P > &y)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    atan2 (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    atan2 (const detail::tvec4< T, P > &x, const detail::tvec4< T, P > &y)
     
    -template<typename genType >
    bool isfinite (genType const &x)
     
    -template<typename T , precision P>
    detail::tvec2< bool, P > isfinite (const detail::tvec2< T, P > &x)
     
    -template<typename T , precision P>
    detail::tvec3< bool, P > isfinite (const detail::tvec3< T, P > &x)
     
    -template<typename T , precision P>
    detail::tvec4< bool, P > isfinite (const detail::tvec4< T, P > &x)
     
    -template<typename T >
    GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    lerp (const detail::tvec2< T, P > &x, const detail::tvec2< T, P > &y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    lerp (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    lerp (const detail::tvec4< T, P > &x, const detail::tvec4< T, P > &y, T a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    lerp (const detail::tvec2< T, P > &x, const detail::tvec2< T, P > &y, const detail::tvec2< T, P > &a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    lerp (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y, const detail::tvec3< T, P > &a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    lerp (const detail::tvec4< T, P > &x, const detail::tvec4< T, P > &y, const detail::tvec4< T, P > &a)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER T saturate (T x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec2< T, P > 
    saturate (const detail::tvec2< T, P > &x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec3< T, P > 
    saturate (const detail::tvec3< T, P > &x)
     
    -template<typename T , precision P>
    GLM_FUNC_QUALIFIER
    -detail::tvec4< T, P > 
    saturate (const detail::tvec4< T, P > &x)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T slerp (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type compAdd (genType const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type compMax (genType const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type compMin (genType const &v)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type compMul (genType const &v)
     

    Detailed Description

    -

    Provide functions to increase the compatibility with Cg and HLSL languages.

    -

    <glm/gtx/compatibility.hpp> need to be included to use these functionalities.

    +

    Operations between components of a type.

    +

    <glm/gtx/component_wise.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - - - + + - - - - - - - - - - - - -
    GLM_FUNC_QUALIFIER T glm::slerp GLM_FUNC_DECL genType::value_type glm::compAdd (detail::tquat< T, P > const & x,
    genType const & v) detail::tquat< T, P > const & y,
    T const & a 
    )
    -

    Returns the slurp interpolation between two quaternions.

    -

    Spherical linear interpolation of two quaternions.

    +

    Add all vector components together.

    +
    See also
    GLM_GTX_component_wise
    -

    Definition at line 73 of file compatibility.hpp.

    +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType::value_type glm::compMax (genType const & v)
    +
    -

    References glm::mix().

    +

    Find the maximum value between single vector components.

    +
    See also
    GLM_GTX_component_wise
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType::value_type glm::compMin (genType const & v)
    +
    + +

    Find the minimum value between single vector components.

    +
    See also
    GLM_GTX_component_wise
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType::value_type glm::compMul (genType const & v)
    +
    + +

    Multiply all vector components together.

    +
    See also
    GLM_GTX_component_wise
    @@ -404,7 +143,7 @@ detail::tvec4< T, P >  diff --git a/doc/api/a00191.html b/doc/api/a00191.html index d7dfe27e..53ba49d8 100644 --- a/doc/api/a00191.html +++ b/doc/api/a00191.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_component_wise + +0.9.6: GLM_GTX_dual_quaternion @@ -16,9 +16,9 @@ + @@ -26,117 +26,431 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GLM_GTX_component_wise
    +
    GLM_GTX_dual_quaternion
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef highp_ddualquat ddualquat
     
    typedef highp_fdualquat dualquat
     
    typedef highp_fdualquat fdualquat
     
    typedef tdualquat< double, highp > highp_ddualquat
     
    typedef tdualquat< float, highp > highp_dualquat
     
    typedef tdualquat< float, highp > highp_fdualquat
     
    typedef tdualquat< double, lowp > lowp_ddualquat
     
    typedef tdualquat< float, lowp > lowp_dualquat
     
    typedef tdualquat< float, lowp > lowp_fdualquat
     
    typedef tdualquat< double,
    +mediump > 
    mediump_ddualquat
     
    typedef tdualquat< float, mediump > mediump_dualquat
     
    typedef tdualquat< float, mediump > mediump_fdualquat
     
    - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    genType::value_type compAdd (genType const &v)
     
    template<typename genType >
    genType::value_type compMax (genType const &v)
     
    template<typename genType >
    genType::value_type compMin (genType const &v)
     
    template<typename genType >
    genType::value_type compMul (genType const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > dualquat_cast (tmat2x4< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > dualquat_cast (tmat3x4< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > inverse (tdualquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > lerp (tdualquat< T, P > const &x, tdualquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x4< T, P > mat2x4_cast (tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x4< T, P > mat3x4_cast (tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tdualquat< T, P > normalize (tdualquat< T, P > const &q)
     

    Detailed Description

    -

    Operations between components of a type.

    -

    <glm/gtx/component_wise.hpp> need to be included to use these functionalities.

    +

    Defines a templated dual-quaternion type and several dual-quaternion operations.

    +

    <glm/gtx/dual_quaternion.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    + +
    +
    + + + + +
    typedef highp_ddualquat ddualquat
    +
    + +

    Dual-quaternion of default double-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 289 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_fdualquat dualquat
    +
    + +

    Dual-quaternion of floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 265 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef highp_fdualquat fdualquat
    +
    + +

    Dual-quaternion of single-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 270 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tdualquat<double, highp> highp_ddualquat
    +
    + +

    Dual-quaternion of high double-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 258 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tdualquat<float, highp> highp_dualquat
    +
    + +

    Dual-quaternion of high single-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 226 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tdualquat<float, highp> highp_fdualquat
    +
    + +

    Dual-quaternion of high single-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 242 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tdualquat<double, lowp> lowp_ddualquat
    +
    + +

    Dual-quaternion of low double-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 248 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tdualquat<float, lowp> lowp_dualquat
    +
    + +

    Dual-quaternion of low single-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 216 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tdualquat<float, lowp> lowp_fdualquat
    +
    + +

    Dual-quaternion of low single-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 232 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tdualquat<double, mediump> mediump_ddualquat
    +
    + +

    Dual-quaternion of medium double-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 253 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tdualquat<float, mediump> mediump_dualquat
    +
    + +

    Dual-quaternion of medium single-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 221 of file dual_quaternion.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tdualquat<float, mediump> mediump_fdualquat
    +
    + +

    Dual-quaternion of medium single-precision floating-point numbers.

    +
    See also
    GLM_GTX_dual_quaternion
    + +

    Definition at line 237 of file dual_quaternion.hpp.

    + +
    +

    Function Documentation

    - +
    - + - - + +
    genType::value_type glm::compAdd GLM_FUNC_DECL tdualquat<T, P> glm::dualquat_cast (genType const & v)tmat2x4< T, P > const & x)
    -

    Add all vector components together.

    -
    See Also
    GLM_GTX_component_wise
    +

    Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.

    +
    See also
    GLM_GTX_dual_quaternion
    - +
    - + - - + +
    genType::value_type glm::compMax GLM_FUNC_DECL tdualquat<T, P> glm::dualquat_cast (genType const & v)tmat3x4< T, P > const & x)
    -

    Find the maximum value between single vector components.

    -
    See Also
    GLM_GTX_component_wise
    +

    Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.

    +
    See also
    GLM_GTX_dual_quaternion
    - +
    - + - - + +
    genType::value_type glm::compMin GLM_FUNC_DECL tdualquat<T, P> glm::inverse (genType const & v)tdualquat< T, P > const & q)
    -

    Find the minimum value between single vector components.

    -
    See Also
    GLM_GTX_component_wise
    +

    Returns the q inverse.

    +
    See also
    GLM_GTX_dual_quaternion
    - +
    - + - - + + + + + + + + + + + + + + + + + + + + +
    genType::value_type glm::compMul GLM_FUNC_DECL tdualquat<T, P> glm::lerp (genType const & v)tdualquat< T, P > const & x,
    tdualquat< T, P > const & y,
    T const & a 
    )
    +
    + +

    Returns the linear interpolation of two dual quaternion.

    +
    See also
    gtc_dual_quaternion
    + +
    +
    + +
    +
    + + + + + +
    GLM_FUNC_DECL tmat2x4<T, P> glm::mat2x4_cast (tdualquat< T, P > const & x)
    -

    Multiply all vector components together.

    -
    See Also
    GLM_GTX_component_wise
    +

    Converts a quaternion to a 2 * 4 matrix.

    +
    See also
    GLM_GTX_dual_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat3x4<T, P> glm::mat3x4_cast (tdualquat< T, P > const & x)
    +
    + +

    Converts a quaternion to a 3 * 4 matrix.

    +
    See also
    GLM_GTX_dual_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tdualquat<T, P> glm::normalize (tdualquat< T, P > const & q)
    +
    + +

    Returns the normalized quaternion.

    +
    See also
    GLM_GTX_dual_quaternion
    @@ -145,7 +459,7 @@ Functions diff --git a/doc/api/a00192.html b/doc/api/a00192.html index a5510f89..83a5d974 100644 --- a/doc/api/a00192.html +++ b/doc/api/a00192.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_dual_quaternion + +0.9.6: GLM_GTX_euler_angles @@ -16,9 +16,9 @@ + @@ -26,373 +26,122 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GLM_GTX_dual_quaternion
    +
    GLM_GTX_euler_angles
    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    typedef highp_ddualquat ddualquat
     
    typedef highp_fdualquat dualquat
     
    typedef highp_fdualquat fdualquat
     
    typedef detail::tdualquat
    -< double, highp > 
    highp_ddualquat
     
    typedef detail::tdualquat
    -< float, highp > 
    highp_dualquat
     
    typedef detail::tdualquat
    -< float, highp > 
    highp_fdualquat
     
    typedef detail::tdualquat
    -< double, lowp > 
    lowp_ddualquat
     
    typedef detail::tdualquat
    -< float, lowp > 
    lowp_dualquat
     
    typedef detail::tdualquat
    -< float, lowp > 
    lowp_fdualquat
     
    typedef detail::tdualquat
    -< double, mediump > 
    mediump_ddualquat
     
    typedef detail::tdualquat
    -< float, mediump > 
    mediump_dualquat
     
    typedef detail::tdualquat
    -< float, mediump > 
    mediump_fdualquat
     
    - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tdualquat< T, P > dualquat_cast (detail::tmat2x4< T, P > const &x)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > dualquat_cast (detail::tmat3x4< T, P > const &x)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > inverse (detail::tdualquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > lerp (detail::tdualquat< T, P > const &x, detail::tdualquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    detail::tmat2x4< T, P > mat2x4_cast (detail::tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat3x4< T, P > mat3x4_cast (detail::tdualquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tdualquat< T, P > normalize (detail::tdualquat< T, P > const &q)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleX (T const &angleX)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleXY (T const &angleX, T const &angleY)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleXZ (T const &angleX, T const &angleZ)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleY (T const &angleY)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleYX (T const &angleY, T const &angleX)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleYXZ (T const &yaw, T const &pitch, T const &roll)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleYZ (T const &angleY, T const &angleZ)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleZ (T const &angleZ)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleZX (T const &angle, T const &angleX)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    eulerAngleZY (T const &angleZ, T const &angleY)
     
    template<typename T >
    GLM_FUNC_DECL tmat2x2< T,
    +defaultp > 
    orientate2 (T const &angle)
     
    template<typename T >
    GLM_FUNC_DECL tmat3x3< T,
    +defaultp > 
    orientate3 (T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > orientate3 (tvec3< T, P > const &angles)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > orientate4 (tvec3< T, P > const &angles)
     
    template<typename T >
    GLM_FUNC_DECL tmat4x4< T,
    +defaultp > 
    yawPitchRoll (T const &yaw, T const &pitch, T const &roll)
     

    Detailed Description

    -

    Defines a templated dual-quaternion type and several dual-quaternion operations.

    -

    <glm/gtx/dual_quaternion.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef highp_ddualquat ddualquat
    -
    - -

    Dual-quaternion of default double-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 279 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_fdualquat dualquat
    -
    - -

    Dual-quaternion of floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 255 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef highp_fdualquat fdualquat
    -
    - -

    Dual-quaternion of single-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 260 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tdualquat<double, highp> highp_ddualquat
    -
    - -

    Dual-quaternion of high double-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 248 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tdualquat<float, highp> highp_dualquat
    -
    - -

    Dual-quaternion of high single-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 216 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tdualquat<float, highp> highp_fdualquat
    -
    - -

    Dual-quaternion of high single-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 232 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tdualquat<double, lowp> lowp_ddualquat
    -
    - -

    Dual-quaternion of low double-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 238 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tdualquat<float, lowp> lowp_dualquat
    -
    - -

    Dual-quaternion of low single-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 206 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tdualquat<float, lowp> lowp_fdualquat
    -
    - -

    Dual-quaternion of low single-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 222 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tdualquat<double, mediump> mediump_ddualquat
    -
    - -

    Dual-quaternion of medium double-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 243 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tdualquat<float, mediump> mediump_dualquat
    -
    - -

    Dual-quaternion of medium single-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 211 of file dual_quaternion.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tdualquat<float, mediump> mediump_fdualquat
    -
    - -

    Dual-quaternion of medium single-precision floating-point numbers.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -

    Definition at line 227 of file dual_quaternion.hpp.

    - -
    -
    +

    Build matrices from Euler angles.

    +

    <glm/gtx/euler_angles.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + +
    detail::tdualquat<T, P> glm::dualquat_cast GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleX (detail::tmat2x4< T, P > const & x)T const & angleX)
    -

    Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.

    -
    See Also
    GLM_GTX_dual_quaternion
    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.

    +
    See also
    GLM_GTX_euler_angles
    - +
    - + - - - - -
    detail::tdualquat<T, P> glm::dualquat_cast GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleXY (detail::tmat3x4< T, P > const & x)
    -
    - -

    Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tdualquat<T, P> glm::inverse (detail::tdualquat< T, P > const & q)
    -
    - -

    Returns the q inverse.

    -
    See Also
    GLM_GTX_dual_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - + + - + @@ -402,65 +151,337 @@ Functions
    detail::tdualquat<T, P> glm::lerp (detail::tdualquat< T, P > const & x,
    detail::tdualquat< T, P > const & y, T const & angleX,
    T const & a angleY 
    -

    Returns the linear interpolation of two dual quaternion.

    -
    See Also
    GLM_GTX_dual_quaternion
    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).

    +
    See also
    GLM_GTX_euler_angles
    - +
    - + - - + + + + + + + + + + + + + + +
    detail::tmat2x4<T, P> glm::mat2x4_cast GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleXZ (detail::tdualquat< T, P > const & x)T const & angleX,
    T const & angleZ 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleY (T const & angleY)
    -

    Converts a quaternion to a 2 * 4 matrix.

    -
    See Also
    GLM_GTX_dual_quaternion
    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.

    +
    See also
    GLM_GTX_euler_angles
    - +
    - + - - + + + + + + + + + + + + + + +
    detail::tmat3x4<T, P> glm::mat3x4_cast GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleYX (detail::tdualquat< T, P > const & x)T const & angleY,
    T const & angleX 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleYXZ (T const & yaw,
    T const & pitch,
    T const & roll 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleYZ (T const & angleY,
    T const & angleZ 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleZ (T const & angleZ)
    -

    Converts a quaternion to a 3 * 4 matrix.

    -
    See Also
    GLM_GTX_dual_quaternion
    +

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.

    +
    See also
    GLM_GTX_euler_angles
    - +
    - + - - + + + + + + + + + + + + + + +
    detail::tdualquat<T, P> glm::normalize GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleZX (detail::tdualquat< T, P > const & q)T const & angle,
    T const & angleX 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleZY (T const & angleZ,
    T const & angleY 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + +
    GLM_FUNC_DECL tmat2x2<T, defaultp> glm::orientate2 (T const & angle)
    -

    Returns the normalized quaternion.

    -
    See Also
    GLM_GTX_dual_quaternion
    +

    Creates a 2D 2 * 2 rotation matrix from an euler angle.

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat3x3<T, defaultp> glm::orientate3 (T const & angle)
    +
    + +

    Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat3x3<T, P> glm::orientate3 (tvec3< T, P > const & angles)
    +
    + +

    Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::orientate4 (tvec3< T, P > const & angles)
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    +
    See also
    GLM_GTX_euler_angles
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, defaultp> glm::yawPitchRoll (T const & yaw,
    T const & pitch,
    T const & roll 
    )
    +
    + +

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    +
    See also
    GLM_GTX_euler_angles
    @@ -469,7 +490,7 @@ Functions diff --git a/doc/api/a00193.html b/doc/api/a00193.html index 17350bf7..b0068e32 100644 --- a/doc/api/a00193.html +++ b/doc/api/a00193.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_euler_angles + +0.9.6: GLM_GTX_extend @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,96 +39,41 @@
    -
    GLM_GTX_euler_angles
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +

    Functions

    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleX (T const &angleX)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleXY (T const &angleX, T const &angleY)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleXZ (T const &angleX, T const &angleZ)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleY (T const &angleY)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleYX (T const &angleY, T const &angleX)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleYXZ (T const &yaw, T const &pitch, T const &roll)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleYZ (T const &angleY, T const &angleZ)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleZ (T const &angleZ)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleZX (T const &angle, T const &angleX)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > eulerAngleZY (T const &angleZ, T const &angleY)
     
    template<typename T >
    detail::tmat2x2< T, defaultp > orientate2 (T const &angle)
     
    template<typename T >
    detail::tmat3x3< T, defaultp > orientate3 (T const &angle)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > orientate3 (detail::tvec3< T, P > const &angles)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > orientate4 (detail::tvec3< T, P > const &angles)
     
    template<typename T >
    detail::tmat4x4< T, defaultp > yawPitchRoll (T const &yaw, T const &pitch, T const &roll)
     
    template<typename genType >
    GLM_FUNC_DECL genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
     

    Detailed Description

    -

    Build matrices from Euler angles.

    -

    <glm/gtx/euler_angles.hpp> need to be included to use these functionalities.

    +

    Extend a position from a source to a position at a defined length.

    +

    <glm/gtx/extend.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - - -
    detail::tmat4x4<T, defaultp> glm::eulerAngleX GLM_FUNC_DECL genType glm::extend (T const & angleX)
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - + + - - + + + + + + + + @@ -140,337 +83,8 @@ Functions
    detail::tmat4x4<T, defaultp> glm::eulerAngleXY (T const & angleX, genType const & Origin,
    T const & angleY genType const & Source,
    typename genType::value_type const Length 
    -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, defaultp> glm::eulerAngleXZ (T const & angleX,
    T const & angleZ 
    )
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T, defaultp> glm::eulerAngleY (T const & angleY)
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, defaultp> glm::eulerAngleYX (T const & angleY,
    T const & angleX 
    )
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, defaultp> glm::eulerAngleYXZ (T const & yaw,
    T const & pitch,
    T const & roll 
    )
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, defaultp> glm::eulerAngleYZ (T const & angleY,
    T const & angleZ 
    )
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T, defaultp> glm::eulerAngleZ (T const & angleZ)
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, defaultp> glm::eulerAngleZX (T const & angle,
    T const & angleX 
    )
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, defaultp> glm::eulerAngleZY (T const & angleZ,
    T const & angleY 
    )
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat2x2<T, defaultp> glm::orientate2 (T const & angle)
    -
    - -

    Creates a 2D 2 * 2 rotation matrix from an euler angle.

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x3<T, defaultp> glm::orientate3 (T const & angle)
    -
    - -

    Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x3<T, P> glm::orientate3 (detail::tvec3< T, P > const & angles)
    -
    - -

    Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T, P> glm::orientate4 (detail::tvec3< T, P > const & angles)
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    -
    See Also
    GLM_GTX_euler_angles
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, defaultp> glm::yawPitchRoll (T const & yaw,
    T const & pitch,
    T const & roll 
    )
    -
    - -

    Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

    -
    See Also
    GLM_GTX_euler_angles
    +

    Extends of Length the Origin position using the (Source - Origin) direction.

    +
    See also
    GLM_GTX_extend
    @@ -479,7 +93,7 @@ Functions diff --git a/doc/api/a00194.html b/doc/api/a00194.html index 59130890..cf2f6e42 100644 --- a/doc/api/a00194.html +++ b/doc/api/a00194.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_extend + +0.9.6: GLM_GTX_extented_min_max @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,42 +39,74 @@ +
    GLM_GTX_extented_min_max
    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
     
    template<typename T >
    GLM_FUNC_DECL T max (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    GLM_FUNC_DECL T max (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename T >
    GLM_FUNC_DECL T min (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    GLM_FUNC_DECL T min (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    GLM_FUNC_DECL C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     

    Detailed Description

    -

    Extend a position from a source to a position at a defined length.

    -

    <glm/gtx/extend.hpp> need to be included to use these functionalities.

    -

    <glm/gtx/scalar_relational.hpp> need to be included to use these functionalities.

    +

    Min and max functions for 3 to 4 parameters.

    +

    <glm/gtx/extented_min_max.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + - - + + - - + + @@ -86,8 +116,429 @@ Functions
    GLM_FUNC_DECL genType glm::extend GLM_FUNC_DECL T glm::max (genType const & Origin, T const & x,
    genType const & Source, T const & y,
    typename genType::value_type const Length T const & z 
    -

    Extends of Length the Origin position using the (Source - Origin) direction.

    -
    See Also
    GLM_GTX_extend
    +

    Return the maximum component-wise values of 3 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL C<T> glm::max (C< T > const & x,
    typename C< T >::T const & y,
    typename C< T >::T const & z 
    )
    +
    + +

    Return the maximum component-wise values of 3 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL C<T> glm::max (C< T > const & x,
    C< T > const & y,
    C< T > const & z 
    )
    +
    + +

    Return the maximum component-wise values of 3 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::max (T const & x,
    T const & y,
    T const & z,
    T const & w 
    )
    +
    + +

    Return the maximum component-wise values of 4 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL C<T> glm::max (C< T > const & x,
    typename C< T >::T const & y,
    typename C< T >::T const & z,
    typename C< T >::T const & w 
    )
    +
    + +

    Return the maximum component-wise values of 4 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL C<T> glm::max (C< T > const & x,
    C< T > const & y,
    C< T > const & z,
    C< T > const & w 
    )
    +
    + +

    Return the maximum component-wise values of 4 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::min (T const & x,
    T const & y,
    T const & z 
    )
    +
    + +

    Return the minimum component-wise values of 3 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL C<T> glm::min (C< T > const & x,
    typename C< T >::T const & y,
    typename C< T >::T const & z 
    )
    +
    + +

    Return the minimum component-wise values of 3 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL C<T> glm::min (C< T > const & x,
    C< T > const & y,
    C< T > const & z 
    )
    +
    + +

    Return the minimum component-wise values of 3 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::min (T const & x,
    T const & y,
    T const & z,
    T const & w 
    )
    +
    + +

    Return the minimum component-wise values of 4 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL C<T> glm::min (C< T > const & x,
    typename C< T >::T const & y,
    typename C< T >::T const & z,
    typename C< T >::T const & w 
    )
    +
    + +

    Return the minimum component-wise values of 4 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL C<T> glm::min (C< T > const & x,
    C< T > const & y,
    C< T > const & z,
    C< T > const & w 
    )
    +
    + +

    Return the minimum component-wise values of 4 inputs.

    +
    See also
    GLM_GTX_extented_min_max
    @@ -96,7 +547,7 @@ Functions diff --git a/doc/api/a00195.html b/doc/api/a00195.html index c7357b7d..41c5d40e 100644 --- a/doc/api/a00195.html +++ b/doc/api/a00195.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_extented_min_max + +0.9.6: GLM_GTX_fast_exponential @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,74 +39,220 @@
    -
    GLM_GTX_extented_min_max
    +
    GLM_GTX_fast_exponential
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    max (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    max (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename T >
    min (T const &x, T const &y, T const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
     
    template<typename T >
    min (T const &x, T const &y, T const &z, T const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
     
    template<typename T , template< typename > class C>
    C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
     
    template<typename T >
    GLM_FUNC_DECL T fastExp (T x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastExp (vecType< T, P > const &x)
     
    template<typename T >
    GLM_FUNC_DECL T fastExp2 (T x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastExp2 (vecType< T, P > const &x)
     
    template<typename T >
    GLM_FUNC_DECL T fastLog (T x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastLog (vecType< T, P > const &x)
     
    template<typename T >
    GLM_FUNC_DECL T fastLog2 (T x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastLog2 (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fastPow (genType x, genType y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastPow (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename genTypeT , typename genTypeU >
    GLM_FUNC_DECL genTypeT fastPow (genTypeT x, genTypeU y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastPow (vecType< T, P > const &x)
     

    Detailed Description

    -

    Min and max functions for 3 to 4 parameters.

    -

    <glm/gtx/extented_min_max.hpp> need to be included to use these functionalities.

    +

    Fast but less accurate implementations of exponential based functions.

    +

    <glm/gtx/fast_exponential.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - + + + + +
    T glm::max GLM_FUNC_DECL T glm::fastExp (T const & x)
    +
    + +

    Faster than the common exp function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::fastExp (vecType< T, P > const & x)
    +
    + +

    Faster than the common exp function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::fastExp2 (x)
    +
    + +

    Faster than the common exp2 function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::fastExp2 (vecType< T, P > const & x)
    +
    + +

    Faster than the common exp2 function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::fastLog (x)
    +
    + +

    Faster than the common log function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::fastLog (vecType< T, P > const & x)
    +
    + +

    Faster than the common exp2 function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::fastLog2 (x)
    +
    + +

    Faster than the common log2 function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::fastLog2 (vecType< T, P > const & x)
    +
    + +

    Faster than the common log2 function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    + +
    +
    + +
    +
    + + + + + - - - - - - - - + + @@ -118,32 +262,26 @@ Functions
    GLM_FUNC_DECL genType glm::fastPow (genType  x,
    T const & y,
    T const & z genType y 
    -

    Return the maximum component-wise values of 3 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    +

    Faster than the common pow function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    - +
    - + - + - - - - - - - - + + @@ -153,32 +291,26 @@ Functions
    C<T> glm::max GLM_FUNC_DECL vecType<T, P> glm::fastPow (C< T > const & vecType< T, P > const &  x,
    typename C< T >::T const & y,
    typename C< T >::T const & z vecType< T, P > const & y 
    -

    Return the maximum component-wise values of 3 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    +

    Faster than the common pow function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    - +
    - + - + - - - - - - - - + + @@ -188,359 +320,27 @@ Functions
    C<T> glm::max GLM_FUNC_DECL genTypeT glm::fastPow (C< T > const & genTypeT  x,
    C< T > const & y,
    C< T > const & z genTypeU y 
    -

    Return the maximum component-wise values of 3 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    +

    Faster than the common pow function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    - +
    - + - - - - - + + - - - - - - - - - - - - - - - - - - -
    T glm::max GLM_FUNC_DECL vecType<T, P> glm::fastPow (T const & x,
    vecType< T, P > const & x) T const & y,
    T const & z,
    T const & w 
    )
    -

    Return the maximum component-wise values of 4 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::max (C< T > const & x,
    typename C< T >::T const & y,
    typename C< T >::T const & z,
    typename C< T >::T const & w 
    )
    -
    - -

    Return the maximum component-wise values of 4 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::max (C< T > const & x,
    C< T > const & y,
    C< T > const & z,
    C< T > const & w 
    )
    -
    - -

    Return the maximum component-wise values of 4 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    T glm::min (T const & x,
    T const & y,
    T const & z 
    )
    -
    - -

    Return the minimum component-wise values of 3 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::min (C< T > const & x,
    typename C< T >::T const & y,
    typename C< T >::T const & z 
    )
    -
    - -

    Return the minimum component-wise values of 3 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::min (C< T > const & x,
    C< T > const & y,
    C< T > const & z 
    )
    -
    - -

    Return the minimum component-wise values of 3 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    T glm::min (T const & x,
    T const & y,
    T const & z,
    T const & w 
    )
    -
    - -

    Return the minimum component-wise values of 4 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::min (C< T > const & x,
    typename C< T >::T const & y,
    typename C< T >::T const & z,
    typename C< T >::T const & w 
    )
    -
    - -

    Return the minimum component-wise values of 4 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C<T> glm::min (C< T > const & x,
    C< T > const & y,
    C< T > const & z,
    C< T > const & w 
    )
    -
    - -

    Return the minimum component-wise values of 4 inputs.

    -
    See Also
    GLM_GTX_extented_min_max
    +

    Faster than the common pow function but less accurate.

    +
    See also
    GLM_GTX_fast_exponential
    @@ -549,7 +349,7 @@ Functions diff --git a/doc/api/a00196.html b/doc/api/a00196.html index eb041f20..0c913d88 100644 --- a/doc/api/a00196.html +++ b/doc/api/a00196.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_fast_exponential + +0.9.6: GLM_GTX_fast_square_root @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,147 +39,55 @@
    -
    GLM_GTX_fast_exponential
    +
    GLM_GTX_fast_square_root
    - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    fastExp (const T &x)
     
    template<typename T >
    fastExp2 (const T &x)
     
    template<typename T >
    fastLn (const T &x)
     
    template<typename T >
    fastLog (const T &x)
     
    template<typename T >
    fastLog2 (const T &x)
     
    template<typename genType >
    genType fastPow (genType const &x, genType const &y)
     
    template<typename genTypeT , typename genTypeU >
    genTypeT fastPow (genTypeT const &x, genTypeU const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType fastDistance (genType x, genType y)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL T fastDistance (vecType< T, P > const &x, vecType< T, P > const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType fastInverseSqrt (genType x)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > fastInverseSqrt (vecType< T, P > const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type fastLength (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fastNormalize (genType const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType fastSqrt (genType x)
     

    Detailed Description

    -

    Fast but less accurate implementations of exponential based functions.

    -

    <glm/gtx/fast_exponential.hpp> need to be included to use these functionalities.

    +

    Fast but less accurate implementations of square root based functions.

    +
      +
    • Sqrt optimisation based on Newton's method, www.gamedev.net/community/forums/topic.asp?topic id=139956
    • +
    +

    <glm/gtx/fast_square_root.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - - -
    T glm::fastExp GLM_FUNC_DECL genType glm::fastDistance (const T & x)
    -
    - -

    Faster than the common exp function but less accurate.

    -
    See Also
    GLM_GTX_fast_exponential
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastExp2 (const T & x)
    -
    - -

    Faster than the common exp2 function but less accurate.

    -
    See Also
    GLM_GTX_fast_exponential
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastLn (const T & x)
    -
    - -

    Faster than the common ln function but less accurate.

    -
    See Also
    GLM_GTX_fast_exponential
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastLog (const T & x)
    -
    - -

    Faster than the common log function but less accurate.

    -
    See Also
    GLM_GTX_fast_exponential
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastLog2 (const T & x)
    -
    - -

    Faster than the common log2 function but less accurate.

    -
    See Also
    GLM_GTX_fast_exponential
    - -
    -
    - -
    -
    - - - - - + - + @@ -192,25 +98,25 @@ Functions
    genType glm::fastPow (genType const & genType  x,
    genType const & genType  y 
    -

    Faster than the common pow function but less accurate.

    -
    See Also
    GLM_GTX_fast_exponential
    +

    Faster than the common distance function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    - +
    - + - + - + @@ -221,8 +127,103 @@ Functions
    genTypeT glm::fastPow GLM_FUNC_DECL T glm::fastDistance (genTypeT const & vecType< T, P > const &  x,
    genTypeU const & vecType< T, P > const &  y 
    -

    Faster than the common pow function but less accurate.

    -
    See Also
    GLM_GTX_fast_exponential
    +

    Faster than the common distance function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::fastInverseSqrt (genType x)
    +
    + +

    Faster than the common inversesqrt function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::fastInverseSqrt (vecType< T, P > const & x)
    +
    + +

    Faster than the common inversesqrt function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType::value_type glm::fastLength (genType const & x)
    +
    + +

    Faster than the common length function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::fastNormalize (genType const & x)
    +
    + +

    Faster than the common normalize function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::fastSqrt (genType x)
    +
    + +

    Faster than the common sqrt function but less accurate.

    +

    From GLM_GTX_fast_square_root extension.

    @@ -231,7 +232,7 @@ Functions diff --git a/doc/api/a00197.html b/doc/api/a00197.html index 02afe16c..df81299c 100644 --- a/doc/api/a00197.html +++ b/doc/api/a00197.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_fast_square_root + +0.9.6: GLM_GTX_fast_trigonometry @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,50 +39,94 @@
    -
    GLM_GTX_fast_square_root
    +
    GLM_GTX_fast_trigonometry
    - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    genType::value_type fastDistance (genType const &x, genType const &y)
     
    template<typename genType >
    genType fastInverseSqrt (genType const &x)
     
    template<typename genType >
    genType::value_type fastLength (genType const &x)
     
    template<typename genType >
    genType fastNormalize (genType const &x)
     
    template<typename genType >
    genType fastSqrt (genType const &x)
     
    template<typename T >
    GLM_FUNC_DECL T fastAcos (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastAsin (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastAtan (T y, T x)
     
    template<typename T >
    GLM_FUNC_DECL T fastAtan (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastCos (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastSin (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T fastTan (T angle)
     
    template<typename T >
    GLM_FUNC_DECL T wrapAngle (T angle)
     

    Detailed Description

    -

    Fast but less accurate implementations of square root based functions.

    -
      -
    • Sqrt optimisation based on Newton's method, www.gamedev.net/community/forums/topic.asp?topic id=139956
    • -
    -

    <glm/gtx/fast_square_root.hpp> need to be included to use these functionalities.

    +

    Fast but less accurate implementations of trigonometric functions.

    +

    <glm/gtx/fast_trigonometry.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + + + +
    genType::value_type glm::fastDistance GLM_FUNC_DECL T glm::fastAcos (genType const & x, angle)
    +
    + +

    Faster than the common acos function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::fastAsin (angle)
    +
    + +

    Faster than the common asin function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    + +
    +
    + +
    +
    + + + + + + - - + + @@ -94,84 +136,102 @@ Functions
    GLM_FUNC_DECL T glm::fastAtan (y,
    genType const & y x 
    -

    Faster than the common distance function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Faster than the common atan function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - +
    - + - - + +
    genType glm::fastInverseSqrt GLM_FUNC_DECL T glm::fastAtan (genType const & x)angle)
    -

    Faster than the common inversesqrt function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Faster than the common atan function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - +
    - + - - + +
    genType::value_type glm::fastLength GLM_FUNC_DECL T glm::fastCos (genType const & x)angle)
    -

    Faster than the common length function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Faster than the common cos function but less accurate.

    +

    From GLM_GTX_fast_trigonometry extension.

    - +
    - + - - + +
    genType glm::fastNormalize GLM_FUNC_DECL T glm::fastSin (genType const & x)angle)
    -

    Faster than the common normalize function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Faster than the common sin function but less accurate.

    +

    From GLM_GTX_fast_trigonometry extension.

    - +
    - + - - + +
    genType glm::fastSqrt GLM_FUNC_DECL T glm::fastTan (genType const & x)angle)
    -

    Faster than the common sqrt function but less accurate.

    -

    From GLM_GTX_fast_square_root extension.

    +

    Faster than the common tan function but less accurate.

    +

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::wrapAngle (angle)
    +
    + +

    Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension.

    @@ -180,7 +240,7 @@ Functions diff --git a/doc/api/a00198.html b/doc/api/a00198.html index dc167488..c500cb48 100644 --- a/doc/api/a00198.html +++ b/doc/api/a00198.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_fast_trigonometry + +0.9.6: GLM_GTX_gradient_paint @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,91 +39,44 @@
    -
    GLM_GTX_fast_trigonometry
    +
    GLM_GTX_gradient_paint
    - - - - - - - - - - - - - - - - - - - - - + + + + + +

    Functions

    template<typename T >
    fastAcos (const T &angle)
     
    template<typename T >
    fastAsin (const T &angle)
     
    template<typename T >
    fastAtan (const T &y, const T &x)
     
    template<typename T >
    fastAtan (const T &angle)
     
    template<typename T >
    fastCos (const T &angle)
     
    template<typename T >
    fastSin (const T &angle)
     
    template<typename T >
    fastTan (const T &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T linearGradient (tvec2< T, P > const &Point0, tvec2< T, P > const &Point1, tvec2< T, P > const &Position)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T radialGradient (tvec2< T, P > const &Center, T const &Radius, tvec2< T, P > const &Focal, tvec2< T, P > const &Position)
     

    Detailed Description

    -

    Fast but less accurate implementations of trigonometric functions.

    -

    <glm/gtx/fast_trigonometry.hpp> need to be included to use these functionalities.

    +

    Functions that return the color of procedural gradient for specific coordinates.

    +

    <glm/gtx/gradient_paint.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - - -
    T glm::fastAcos GLM_FUNC_DECL T glm::linearGradient (const T & angle)
    -
    - -

    Faster than the common acos function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::fastAsin (const T & angle)
    -
    - -

    Faster than the common asin function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - - + + - - + + + + + + + + @@ -135,84 +86,49 @@ Functions
    T glm::fastAtan (const T & y, tvec2< T, P > const & Point0,
    const T & x tvec2< T, P > const & Point1,
    tvec2< T, P > const & Position 
    -

    Faster than the common atan function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    +

    Return a color from a linear gradient.

    +
    See also
    - GLM_GTX_gradient_paint
    - +
    - + - - - + + -
    T glm::fastAtan GLM_FUNC_DECL T glm::radialGradient (const T & angle)tvec2< T, P > const & Center,
    -
    - -

    Faster than the common atan function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - + + + -
    T glm::fastCos (const T & angle) T const & Radius,
    -
    - -

    Faster than the common cos function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - + + + -
    T glm::fastSin (const T & angle) tvec2< T, P > const & Focal,
    -
    - -

    Faster than the common sin function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    - -
    -
    - -
    -
    - - - - - + + + + + + + +
    T glm::fastTan (const T & angle) tvec2< T, P > const & Position 
    )
    -

    Faster than the common tan function but less accurate.

    -

    Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

    +

    Return a color from a radial gradient.

    +
    See also
    - GLM_GTX_gradient_paint
    @@ -221,7 +137,7 @@ Functions diff --git a/doc/api/a00199.html b/doc/api/a00199.html index 5d7a1733..48bbb42d 100644 --- a/doc/api/a00199.html +++ b/doc/api/a00199.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_gradient_paint + +0.9.6: GLM_GTX_handed_coordinate_space @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,44 +39,44 @@
    -
    GLM_GTX_gradient_paint
    +
    GLM_GTX_handed_coordinate_space
    - - - - - - + + + + + +

    Functions

    template<typename T , precision P>
    linearGradient (detail::tvec2< T, P > const &Point0, detail::tvec2< T, P > const &Point1, detail::tvec2< T, P > const &Position)
     
    template<typename T , precision P>
    radialGradient (detail::tvec2< T, P > const &Center, T const &Radius, detail::tvec2< T, P > const &Focal, detail::tvec2< T, P > const &Position)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool leftHanded (tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool rightHanded (tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)
     

    Detailed Description

    -

    Functions that return the color of procedural gradient for specific coordinates.

    -

    <glm/gtx/gradient_paint.hpp> need to be included to use these functionalities.

    +

    To know if a set of three basis vectors defines a right or left-handed coordinate system.

    +

    <glm/gtx/handed_coordinate_system.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + - - + + - - + + @@ -88,38 +86,32 @@ Functions
    T glm::linearGradient GLM_FUNC_DECL bool glm::leftHanded (detail::tvec2< T, P > const & Point0, tvec3< T, P > const & tangent,
    detail::tvec2< T, P > const & Point1, tvec3< T, P > const & binormal,
    detail::tvec2< T, P > const & Position tvec3< T, P > const & normal 
    -

    Return a color from a linear gradient.

    -
    See Also
    - GLM_GTX_gradient_paint
    +

    Return if a trihedron left handed or not.

    +

    From GLM_GTX_handed_coordinate_space extension.

    - +
    - + - - + + - - + + - - - - - - - - + + @@ -129,8 +121,8 @@ Functions
    T glm::radialGradient GLM_FUNC_DECL bool glm::rightHanded (detail::tvec2< T, P > const & Center, tvec3< T, P > const & tangent,
    T const & Radius, tvec3< T, P > const & binormal,
    detail::tvec2< T, P > const & Focal,
    detail::tvec2< T, P > const & Position tvec3< T, P > const & normal 
    -

    Return a color from a radial gradient.

    -
    See Also
    - GLM_GTX_gradient_paint
    +

    Return if a trihedron right handed or not.

    +

    From GLM_GTX_handed_coordinate_space extension.

    @@ -139,7 +131,7 @@ Functions diff --git a/doc/api/a00200.html b/doc/api/a00200.html index 1efa10bf..32eb21c7 100644 --- a/doc/api/a00200.html +++ b/doc/api/a00200.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_handed_coordinate_space + +0.9.6: GLM_GTX_inertia @@ -16,9 +16,9 @@ + @@ -26,114 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    -
    GLM_GTX_handed_coordinate_space
    +
    - - - - - - - - -

    -Functions

    template<typename T , precision P>
    bool leftHanded (detail::tvec3< T, P > const &tangent, detail::tvec3< T, P > const &binormal, detail::tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    bool rightHanded (detail::tvec3< T, P > const &tangent, detail::tvec3< T, P > const &binormal, detail::tvec3< T, P > const &normal)
     
    -

    Detailed Description

    -

    To know if a set of three basis vectors defines a right or left-handed coordinate system.

    -

    <glm/gtx/handed_coordinate_system.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::leftHanded (detail::tvec3< T, P > const & tangent,
    detail::tvec3< T, P > const & binormal,
    detail::tvec3< T, P > const & normal 
    )
    -
    - -

    Return if a trihedron left handed or not.

    -

    From GLM_GTX_handed_coordinate_space extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::rightHanded (detail::tvec3< T, P > const & tangent,
    detail::tvec3< T, P > const & binormal,
    detail::tvec3< T, P > const & normal 
    )
    -
    - -

    Return if a trihedron right handed or not.

    -

    From GLM_GTX_handed_coordinate_space extension.

    - -
    -
    +

    Create inertia matrices.

    +

    <glm/gtx/inertia.hpp> need to be included to use these functionalities.

    diff --git a/doc/api/a00201.html b/doc/api/a00201.html index dfd02290..c2632ee5 100644 --- a/doc/api/a00201.html +++ b/doc/api/a00201.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_inertia + +0.9.6: GLM_GTX_integer @@ -16,9 +16,9 @@ + @@ -26,30 +26,289 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -

    Create inertia matrices.

    -

    <glm/gtx/inertia.hpp> need to be included to use these functionalities.

    + + + + +

    +Typedefs

    typedef signed int sint
     
    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType factorial (genType const &x)
     
    GLM_FUNC_DECL unsigned int floor_log2 (unsigned int x)
     
    GLM_FUNC_DECL int mod (int x, int y)
     
    GLM_FUNC_DECL uint mod (uint x, uint y)
     
    GLM_FUNC_DECL uint nlz (uint x)
     
    GLM_FUNC_DECL int pow (int x, int y)
     
    GLM_FUNC_DECL uint pow (uint x, uint y)
     
    GLM_FUNC_DECL int sqrt (int x)
     
    GLM_FUNC_DECL uint sqrt (uint x)
     
    +

    Detailed Description

    +

    Add support for integer for core functions.

    +

    <glm/gtx/integer.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    + +
    +
    + + + + +
    typedef signed int sint
    +
    + +

    32bit signed integer.

    +

    From GLM_GTX_integer extension.

    + +

    Definition at line 76 of file gtx/integer.hpp.

    + +
    +
    +

    Function Documentation

    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::factorial (genType const & x)
    +
    + +

    Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL unsigned int glm::floor_log2 (unsigned int x)
    +
    + +

    Returns the floor log2 of x.

    +

    From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int glm::mod (int x,
    int y 
    )
    +
    + +

    Modulus.

    +

    Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint glm::mod (uint x,
    uint y 
    )
    +
    + +

    Modulus.

    +

    Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL uint glm::nlz (uint x)
    +
    + +

    Returns the number of leading zeros.

    +

    From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL int glm::pow (int x,
    int y 
    )
    +
    + +

    Returns x raised to the y power.

    +

    From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL uint glm::pow (uint x,
    uint y 
    )
    +
    + +

    Returns x raised to the y power.

    +

    From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL int glm::sqrt (int x)
    +
    + +

    Returns the positive square root of x.

    +

    From GLM_GTX_integer extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL uint glm::sqrt (uint x)
    +
    + +

    Returns the positive square root of x.

    +

    From GLM_GTX_integer extension.

    + +
    +
    diff --git a/doc/api/a00202.html b/doc/api/a00202.html index cd194bf3..00385a96 100644 --- a/doc/api/a00202.html +++ b/doc/api/a00202.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_integer + +0.9.6: GLM_GTX_intersect @@ -16,9 +16,9 @@ + @@ -26,149 +26,99 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    - - - -

    -Typedefs

    typedef signed int sint
     
    - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    genType factorial (genType const &x)
     
    unsigned int floor_log2 (unsigned int x)
     
    template<typename genIUType >
    genIUType log2 (genIUType const &x)
     
    int mod (int x, int y)
     
    uint mod (uint x, uint y)
     
    uint nlz (uint x)
     
    int pow (int x, int y)
     
    uint pow (uint x, uint y)
     
    int sqrt (int x)
     
    uint sqrt (uint x)
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectLineSphere (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectRayPlane (genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
     
    template<typename genType >
    GLM_FUNC_DECL bool intersectRayTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
     

    Detailed Description

    -

    Add support for integer for core functions.

    -

    <glm/gtx/integer.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef signed int sint
    -
    - -

    32bit signed integer.

    -

    From GLM_GTX_integer extension.

    - -

    Definition at line 81 of file gtx/integer.hpp.

    - -
    -
    +

    Add intersection functions.

    +

    <glm/gtx/intersect.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - -
    genType glm::factorial GLM_FUNC_DECL bool glm::intersectLineSphere ( genType const & x)
    -
    - -

    Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned int glm::floor_log2 (unsigned int x)
    -
    - -

    Returns the floor log2 of x.

    -

    From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genIUType glm::log2 (genIUType const & x)
    -
    - -

    Returns the log2 of x.

    -

    Can be reliably using to compute mipmap count from the texture size. From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -178,26 +128,50 @@ Functions
    int glm::mod (int x, point0,
    int y genType const & point1,
    genType const & sphereCenter,
    typename genType::value_type sphereRadius,
    genType & intersectionPosition1,
    genType & intersectionNormal1,
    genType & intersectionPosition2 = genType(),
    genType & intersectionNormal2 = genType() 
    -

    Modulus.

    -

    Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

    +

    Compute the intersection of a line and a sphere.

    +

    From GLM_GTX_intersect extension

    - +
    - + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -207,45 +181,44 @@ Functions
    uint glm::mod GLM_FUNC_DECL bool glm::intersectLineTriangle (uint x, genType const & orig,
    uint y genType const & dir,
    genType const & vert0,
    genType const & vert1,
    genType const & vert2,
    genType & position 
    -

    Modulus.

    -

    Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

    +

    Compute the intersection of a line and a triangle.

    +

    From GLM_GTX_intersect extension.

    - +
    - + - - - - -
    uint glm::nlz GLM_FUNC_DECL bool glm::intersectRayPlane (uint x)
    -
    - -

    Returns the number of leading zeros.

    -

    From GLM_GTX_integer extension.

    - -
    -
    - -
    -
    - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -255,26 +228,44 @@ Functions
    int glm::pow (int x, genType const & orig,
    int y genType const & dir,
    genType const & planeOrig,
    genType const & planeNormal,
    typename genType::value_type & intersectionDistance 
    -

    Returns x raised to the y power.

    -

    From GLM_GTX_integer extension.

    +

    Compute the intersection of a ray and a triangle.

    +

    Ray direction and plane normal must be unit length. From GLM_GTX_intersect extension.

    - +
    - + - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -284,46 +275,114 @@ Functions
    uint glm::pow GLM_FUNC_DECL bool glm::intersectRaySphere (uint x, genType const & rayStarting,
    uint y genType const & rayNormalizedDirection,
    genType const & sphereCenter,
    typename genType::value_type const sphereRadiusSquered,
    typename genType::value_type & intersectionDistance 
    -

    Returns x raised to the y power.

    -

    From GLM_GTX_integer extension.

    +

    Compute the intersection distance of a ray and a sphere.

    +

    The ray direction vector is unit length. From GLM_GTX_intersect extension.

    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int glm::sqrt GLM_FUNC_DECL bool glm::intersectRaySphere (int x)genType const & rayStarting,
    genType const & rayNormalizedDirection,
    genType const & sphereCenter,
    const typename genType::value_type sphereRadius,
    genType & intersectionPosition,
    genType & intersectionNormal 
    )
    -

    Returns the positive square root of x.

    -

    From GLM_GTX_integer extension.

    +

    Compute the intersection of a ray and a sphere.

    +

    From GLM_GTX_intersect extension.

    - +
    - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    uint glm::sqrt GLM_FUNC_DECL bool glm::intersectRayTriangle (uint x)genType const & orig,
    genType const & dir,
    genType const & vert0,
    genType const & vert1,
    genType const & vert2,
    genType & baryPosition 
    )
    -

    Returns the positive square root of x.

    -

    From GLM_GTX_integer extension.

    +

    Compute the intersection of a ray and a triangle.

    +

    From GLM_GTX_intersect extension.

    @@ -332,7 +391,7 @@ Functions diff --git a/doc/api/a00203.html b/doc/api/a00203.html index dfadb560..e2944522 100644 --- a/doc/api/a00203.html +++ b/doc/api/a00203.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_intersect + +0.9.6: GLM_GTX_io @@ -16,9 +16,9 @@ + @@ -26,374 +26,30 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename genType >
    bool intersectLineSphere (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
     
    template<typename genType >
    bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
     
    template<typename genType >
    bool intersectRayPlane (genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)
     
    template<typename genType >
    bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
     
    template<typename genType >
    bool intersectRayTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)
     

    Detailed Description

    -

    Add intersection functions.

    -

    <glm/gtx/intersect.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::intersectLineSphere (genType const & point0,
    genType const & point1,
    genType const & sphereCenter,
    typename genType::value_type sphereRadius,
    genType & intersectionPosition1,
    genType & intersectionNormal1,
    genType & intersectionPosition2 = genType(),
    genType & intersectionNormal2 = genType() 
    )
    -
    - -

    Compute the intersection of a line and a sphere.

    -

    From GLM_GTX_intersect extension

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::intersectLineTriangle (genType const & orig,
    genType const & dir,
    genType const & vert0,
    genType const & vert1,
    genType const & vert2,
    genType & position 
    )
    -
    - -

    Compute the intersection of a line and a triangle.

    -

    From GLM_GTX_intersect extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::intersectRayPlane (genType const & orig,
    genType const & dir,
    genType const & planeOrig,
    genType const & planeNormal,
    typename genType::value_type & intersectionDistance 
    )
    -
    - -

    Compute the intersection of a ray and a triangle.

    -

    Ray direction and plane normal must be unit length. From GLM_GTX_intersect extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::intersectRaySphere (genType const & rayStarting,
    genType const & rayNormalizedDirection,
    genType const & sphereCenter,
    typename genType::value_type const sphereRadiusSquered,
    typename genType::value_type & intersectionDistance 
    )
    -
    - -

    Compute the intersection distance of a ray and a sphere.

    -

    The ray direction vector is unit length. From GLM_GTX_intersect extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::intersectRaySphere (genType const & rayStarting,
    genType const & rayNormalizedDirection,
    genType const & sphereCenter,
    const typename genType::value_type sphereRadius,
    genType & intersectionPosition,
    genType & intersectionNormal 
    )
    -
    - -

    Compute the intersection of a ray and a sphere.

    -

    From GLM_GTX_intersect extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool glm::intersectRayTriangle (genType const & orig,
    genType const & dir,
    genType const & vert0,
    genType const & vert1,
    genType const & vert2,
    genType & baryPosition 
    )
    -
    - -

    Compute the intersection of a ray and a triangle.

    -

    From GLM_GTX_intersect extension.

    - -
    -
    +

    std::[w]ostream support for glm types

    +

    std::[w]ostream support for glm types + precision/width/etc. manipulators based on howard hinnant's std::chrono io proposal [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html]

    +

    <glm/gtx/io.hpp> needs to be included to use these functionalities.

    diff --git a/doc/api/a00204.html b/doc/api/a00204.html index c26500fa..ce2b38fd 100644 --- a/doc/api/a00204.html +++ b/doc/api/a00204.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_io + +0.9.6: GLM_GTX_log_base @@ -16,9 +16,9 @@ + @@ -26,31 +26,101 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType log (genType x, genType base)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< T, P > sign (vecType< T, P > const &x, vecType< T, P > const &base)
     

    Detailed Description

    -

    std::[w]ostream support for glm types

    -

    <glm/gtx/io.hpp> needs to be included to use these functionalities.

    +

    Logarithm for any base.

    +

    base can be a vector or a scalar.

    +

    <glm/gtx/log_base.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::log (genType x,
    genType base 
    )
    +
    + +

    Logarithm for any base.

    +

    From GLM_GTX_log_base.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<T, P> glm::sign (vecType< T, P > const & x,
    vecType< T, P > const & base 
    )
    +
    + +

    Logarithm for any base.

    +

    From GLM_GTX_log_base.

    + +
    +
    diff --git a/doc/api/a00205.html b/doc/api/a00205.html index 87866d40..e4aea33f 100644 --- a/doc/api/a00205.html +++ b/doc/api/a00205.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_log_base + +0.9.6: GLM_GTX_matrix_cross_product @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,47 +39,58 @@ +
    GLM_GTX_matrix_cross_product
    - - - + + + + + +

    Functions

    template<typename genType >
    genType log (genType const &x, genType const &base)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > matrixCross3 (tvec3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > matrixCross4 (tvec3< T, P > const &x)
     

    Detailed Description

    -

    Logarithm for any base.

    -

    base can be a vector or a scalar.

    -

    <glm/gtx/log_base.hpp> need to be included to use these functionalities.

    +

    Build cross product matrices.

    +

    <glm/gtx/matrix_cross_product.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - - - + + - - - - - - -
    genType glm::log GLM_FUNC_DECL tmat3x3<T, P> glm::matrixCross3 (genType const & x,
    tvec3< T, P > const & x) genType const & base 
    )
    -

    Logarithm for any base.

    -

    From GLM_GTX_log_base.

    +

    Build a cross product matrix.

    +

    From GLM_GTX_matrix_cross_product extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::matrixCross4 (tvec3< T, P > const & x)
    +
    + +

    Build a cross product matrix.

    +

    From GLM_GTX_matrix_cross_product extension.

    @@ -90,7 +99,7 @@ Functions diff --git a/doc/api/a00206.html b/doc/api/a00206.html index b0e621be..7fa72fad 100644 --- a/doc/api/a00206.html +++ b/doc/api/a00206.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_matrix_cross_product + +0.9.6: GLM_GTX_matrix_decompose @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,58 +39,70 @@
    -
    GLM_GTX_matrix_cross_product
    +
    GLM_GTX_matrix_decompose
    - - - - - - + + +

    Functions

    template<typename T , precision P>
    detail::tmat3x3< T, P > matrixCross3 (detail::tvec3< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > matrixCross4 (detail::tvec3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool decompose (tmat4x4< T, P > const &modelMatrix, tvec3< T, P > &scale, tquat< T, P > &orientation, tvec3< T, P > &translation, tvec3< T, P > &skew, tvec4< T, P > &perspective)
     

    Detailed Description

    -

    Build cross product matrices.

    -

    <glm/gtx/matrix_cross_product.hpp> need to be included to use these functionalities.

    +

    Decomposes a model matrix to translations, rotation and scale components.

    +

    <glm/gtx/decomposition.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - + + -
    detail::tmat3x3<T, P> glm::matrixCross3 GLM_FUNC_DECL bool glm::decompose (detail::tvec3< T, P > const & x)tmat4x4< T, P > const & modelMatrix,
    -
    - -

    Build a cross product matrix.

    -

    From GLM_GTX_matrix_cross_product extension.

    - -
    -
    - -
    -
    - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    detail::tmat4x4<T, P> glm::matrixCross4 (detail::tvec3< T, P > const & x) tvec3< T, P > & scale,
    tquat< T, P > & orientation,
    tvec3< T, P > & translation,
    tvec3< T, P > & skew,
    tvec4< T, P > & perspective 
    )
    -

    Build a cross product matrix.

    -

    From GLM_GTX_matrix_cross_product extension.

    +

    Decomposes a model matrix to translations, rotation and scale components.

    +
    See also
    GLM_GTX_matrix_decompose
    @@ -101,7 +111,7 @@ Functions diff --git a/doc/api/a00207.html b/doc/api/a00207.html index 8419b85a..7d67f573 100644 --- a/doc/api/a00207.html +++ b/doc/api/a00207.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_matrix_interpolation + +0.9.6: GLM_GTX_matrix_interpolation @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,43 +39,43 @@
    -
    GLM_GTX_matrix_interpolation
    +
    GLM_GTX_matrix_interpolation
    - - - - - - - - - - - - + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    void axisAngle (detail::tmat4x4< T, P > const &mat, detail::tvec3< T, P > &axis, T &angle)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > axisAngleMatrix (detail::tvec3< T, P > const &axis, T const angle)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > extractMatrixRotation (detail::tmat4x4< T, P > const &mat)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > interpolate (detail::tmat4x4< T, P > const &m1, detail::tmat4x4< T, P > const &m2, T const delta)
     
    template<typename T , precision P>
    GLM_FUNC_DECL void axisAngle (tmat4x4< T, P > const &mat, tvec3< T, P > &axis, T &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > axisAngleMatrix (tvec3< T, P > const &axis, T const angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > extractMatrixRotation (tmat4x4< T, P > const &mat)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > interpolate (tmat4x4< T, P > const &m1, tmat4x4< T, P > const &m2, T const delta)
     

    Detailed Description

    Allows to directly interpolate two exiciting matrices.

    -

    <glm/gtx/matrix_interpolation.hpp> need to be included to use these functionalities.

    +

    <glm/gtx/matrix_interpolation.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - + - + @@ -99,14 +97,14 @@ Functions - +
    void glm::axisAngle GLM_FUNC_DECL void glm::axisAngle (detail::tmat4x4< T, P > const & tmat4x4< T, P > const &  mat,
    detail::tvec3< T, P > & tvec3< T, P > &  axis,
    - + - + @@ -128,14 +126,14 @@ Functions - +
    detail::tmat4x4<T, P> glm::axisAngleMatrix GLM_FUNC_DECL tmat4x4<T, P> glm::axisAngleMatrix (detail::tvec3< T, P > const & tvec3< T, P > const &  axis,
    - + - + @@ -147,20 +145,20 @@ Functions - +
    detail::tmat4x4<T, P> glm::extractMatrixRotation GLM_FUNC_DECL tmat4x4<T, P> glm::extractMatrixRotation (detail::tmat4x4< T, P > const & tmat4x4< T, P > const &  mat)
    - + - + - + @@ -187,7 +185,7 @@ Functions diff --git a/doc/api/a00208.html b/doc/api/a00208.html index 618dece8..e6c691d4 100644 --- a/doc/api/a00208.html +++ b/doc/api/a00208.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_matrix_major_storage + +0.9.6: GLM_GTX_matrix_major_storage @@ -16,9 +16,9 @@
    detail::tmat4x4<T, P> glm::interpolate GLM_FUNC_DECL tmat4x4<T, P> glm::interpolate (detail::tmat4x4< T, P > const & tmat4x4< T, P > const &  m1,
    detail::tmat4x4< T, P > const & tmat4x4< T, P > const &  m2,
    + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,67 +39,67 @@
    -
    GLM_GTX_matrix_major_storage
    +
    GLM_GTX_matrix_major_storage
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tmat2x2< T, P > colMajor2 (detail::tvec2< T, P > const &v1, detail::tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > colMajor2 (detail::tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > colMajor3 (detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > colMajor3 (detail::tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > colMajor4 (detail::tvec4< T, P > const &v1, detail::tvec4< T, P > const &v2, detail::tvec4< T, P > const &v3, detail::tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > colMajor4 (detail::tmat4x4< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > rowMajor2 (detail::tvec2< T, P > const &v1, detail::tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    detail::tmat2x2< T, P > rowMajor2 (detail::tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > rowMajor3 (detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > rowMajor3 (detail::tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > rowMajor4 (detail::tvec4< T, P > const &v1, detail::tvec4< T, P > const &v2, detail::tvec4< T, P > const &v3, detail::tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > rowMajor4 (detail::tmat4x4< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > colMajor2 (tvec2< T, P > const &v1, tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > colMajor2 (tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > colMajor3 (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > colMajor3 (tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > colMajor4 (tvec4< T, P > const &v1, tvec4< T, P > const &v2, tvec4< T, P > const &v3, tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > colMajor4 (tmat4x4< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > rowMajor2 (tvec2< T, P > const &v1, tvec2< T, P > const &v2)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > rowMajor2 (tmat2x2< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > rowMajor3 (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > rowMajor3 (tmat3x3< T, P > const &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rowMajor4 (tvec4< T, P > const &v1, tvec4< T, P > const &v2, tvec4< T, P > const &v3, tvec4< T, P > const &v4)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rowMajor4 (tmat4x4< T, P > const &m)
     

    Detailed Description

    Build matrices with specific matrix order, row or column.

    -

    <glm/gtx/matrix_major_storage.hpp> need to be included to use these functionalities.

    +

    <glm/gtx/matrix_major_storage.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - + - + @@ -117,14 +115,14 @@ Functions - +
    detail::tmat2x2<T, P> glm::colMajor2 GLM_FUNC_DECL tmat2x2<T, P> glm::colMajor2 (detail::tvec2< T, P > const & tvec2< T, P > const &  v1,
    detail::tvec2< T, P > const & tvec2< T, P > const &  v2 
    - + - + @@ -136,26 +134,26 @@ Functions - +
    detail::tmat2x2<T, P> glm::colMajor2 GLM_FUNC_DECL tmat2x2<T, P> glm::colMajor2 (detail::tmat2x2< T, P > const & tmat2x2< T, P > const &  m)
    - + - + - + - + @@ -171,14 +169,14 @@ Functions - +
    detail::tmat3x3<T, P> glm::colMajor3 GLM_FUNC_DECL tmat3x3<T, P> glm::colMajor3 (detail::tvec3< T, P > const & tvec3< T, P > const &  v1,
    detail::tvec3< T, P > const & tvec3< T, P > const &  v2,
    detail::tvec3< T, P > const & tvec3< T, P > const &  v3 
    - + - + @@ -190,32 +188,32 @@ Functions - +
    detail::tmat3x3<T, P> glm::colMajor3 GLM_FUNC_DECL tmat3x3<T, P> glm::colMajor3 (detail::tmat3x3< T, P > const & tmat3x3< T, P > const &  m)
    - + - + - + - + - + @@ -231,14 +229,14 @@ Functions - +
    detail::tmat4x4<T, P> glm::colMajor4 GLM_FUNC_DECL tmat4x4<T, P> glm::colMajor4 (detail::tvec4< T, P > const & tvec4< T, P > const &  v1,
    detail::tvec4< T, P > const & tvec4< T, P > const &  v2,
    detail::tvec4< T, P > const & tvec4< T, P > const &  v3,
    detail::tvec4< T, P > const & tvec4< T, P > const &  v4 
    - + - + @@ -250,20 +248,20 @@ Functions - +
    detail::tmat4x4<T, P> glm::colMajor4 GLM_FUNC_DECL tmat4x4<T, P> glm::colMajor4 (detail::tmat4x4< T, P > const & tmat4x4< T, P > const &  m)
    - + - + - + @@ -279,14 +277,14 @@ Functions - +
    detail::tmat2x2<T, P> glm::rowMajor2 GLM_FUNC_DECL tmat2x2<T, P> glm::rowMajor2 (detail::tvec2< T, P > const & tvec2< T, P > const &  v1,
    detail::tvec2< T, P > const & tvec2< T, P > const &  v2 
    - + - + @@ -298,26 +296,26 @@ Functions - +
    detail::tmat2x2<T, P> glm::rowMajor2 GLM_FUNC_DECL tmat2x2<T, P> glm::rowMajor2 (detail::tmat2x2< T, P > const & tmat2x2< T, P > const &  m)
    - + - + - + - + @@ -333,14 +331,14 @@ Functions - +
    detail::tmat3x3<T, P> glm::rowMajor3 GLM_FUNC_DECL tmat3x3<T, P> glm::rowMajor3 (detail::tvec3< T, P > const & tvec3< T, P > const &  v1,
    detail::tvec3< T, P > const & tvec3< T, P > const &  v2,
    detail::tvec3< T, P > const & tvec3< T, P > const &  v3 
    - + - + @@ -352,32 +350,32 @@ Functions - +
    detail::tmat3x3<T, P> glm::rowMajor3 GLM_FUNC_DECL tmat3x3<T, P> glm::rowMajor3 (detail::tmat3x3< T, P > const & tmat3x3< T, P > const &  m)
    - + - + - + - + - + @@ -393,14 +391,14 @@ Functions - +
    detail::tmat4x4<T, P> glm::rowMajor4 GLM_FUNC_DECL tmat4x4<T, P> glm::rowMajor4 (detail::tvec4< T, P > const & tvec4< T, P > const &  v1,
    detail::tvec4< T, P > const & tvec4< T, P > const &  v2,
    detail::tvec4< T, P > const & tvec4< T, P > const &  v3,
    detail::tvec4< T, P > const & tvec4< T, P > const &  v4 
    - + - + @@ -417,7 +415,7 @@ Functions diff --git a/doc/api/a00209.html b/doc/api/a00209.html index dd2c4fd2..42d82ae2 100644 --- a/doc/api/a00209.html +++ b/doc/api/a00209.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_matrix_operation + +0.9.6: GLM_GTX_matrix_operation @@ -16,9 +16,9 @@
    detail::tmat4x4<T, P> glm::rowMajor4 GLM_FUNC_DECL tmat4x4<T, P> glm::rowMajor4 (detail::tmat4x4< T, P > const & tmat4x4< T, P > const &  m)
    + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,52 +39,52 @@
    -
    GLM_GTX_matrix_operation
    +
    GLM_GTX_matrix_operation
    - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tmat2x2< T, P > diagonal2x2 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat2x3< T, P > diagonal2x3 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat2x4< T, P > diagonal2x4 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat3x2< T, P > diagonal3x2 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > diagonal3x3 (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat3x4< T, P > diagonal3x4 (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x2< T, P > diagonal4x2 (detail::tvec2< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x3< T, P > diagonal4x3 (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > diagonal4x4 (detail::tvec4< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x2< T, P > diagonal2x2 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x3< T, P > diagonal2x3 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat2x4< T, P > diagonal2x4 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x2< T, P > diagonal3x2 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > diagonal3x3 (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x4< T, P > diagonal3x4 (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x2< T, P > diagonal4x2 (tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x3< T, P > diagonal4x3 (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > diagonal4x4 (tvec4< T, P > const &v)
     

    Detailed Description

    Build diagonal matrices from vectors.

    -

    <glm/gtx/matrix_operation.hpp> need to be included to use these functionalities.

    +

    <glm/gtx/matrix_operation.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - + @@ -98,14 +96,14 @@ Functions - +
    detail::tmat2x2<T, P> glm::diagonal2x2 GLM_FUNC_DECL tmat2x2<T, P> glm::diagonal2x2 (detail::tvec2< T, P > const & tvec2< T, P > const &  v)
    - + - + @@ -117,14 +115,14 @@ Functions - +
    detail::tmat2x3<T, P> glm::diagonal2x3 GLM_FUNC_DECL tmat2x3<T, P> glm::diagonal2x3 (detail::tvec2< T, P > const & tvec2< T, P > const &  v)
    - + - + @@ -136,14 +134,14 @@ Functions - +
    detail::tmat2x4<T, P> glm::diagonal2x4 GLM_FUNC_DECL tmat2x4<T, P> glm::diagonal2x4 (detail::tvec2< T, P > const & tvec2< T, P > const &  v)
    - + - + @@ -155,14 +153,14 @@ Functions - +
    detail::tmat3x2<T, P> glm::diagonal3x2 GLM_FUNC_DECL tmat3x2<T, P> glm::diagonal3x2 (detail::tvec2< T, P > const & tvec2< T, P > const &  v)
    - + - + @@ -174,14 +172,14 @@ Functions - +
    detail::tmat3x3<T, P> glm::diagonal3x3 GLM_FUNC_DECL tmat3x3<T, P> glm::diagonal3x3 (detail::tvec3< T, P > const & tvec3< T, P > const &  v)
    - + - + @@ -193,14 +191,14 @@ Functions - +
    detail::tmat3x4<T, P> glm::diagonal3x4 GLM_FUNC_DECL tmat3x4<T, P> glm::diagonal3x4 (detail::tvec3< T, P > const & tvec3< T, P > const &  v)
    - + - + @@ -212,14 +210,14 @@ Functions - +
    detail::tmat4x2<T, P> glm::diagonal4x2 GLM_FUNC_DECL tmat4x2<T, P> glm::diagonal4x2 (detail::tvec2< T, P > const & tvec2< T, P > const &  v)
    - + - + @@ -231,14 +229,14 @@ Functions - +
    detail::tmat4x3<T, P> glm::diagonal4x3 GLM_FUNC_DECL tmat4x3<T, P> glm::diagonal4x3 (detail::tvec3< T, P > const & tvec3< T, P > const &  v)
    - + - + @@ -255,7 +253,7 @@ Functions diff --git a/doc/api/a00210.html b/doc/api/a00210.html index 4e2e74cc..b8b51e6d 100644 --- a/doc/api/a00210.html +++ b/doc/api/a00210.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_matrix_query + +0.9.6: GLM_GTX_matrix_query @@ -16,9 +16,9 @@
    detail::tmat4x4<T, P> glm::diagonal4x4 GLM_FUNC_DECL tmat4x4<T, P> glm::diagonal4x4 (detail::tvec4< T, P > const & tvec4< T, P > const &  v)
    + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,47 +39,47 @@
    -
    GLM_GTX_matrix_query
    +
    GLM_GTX_matrix_query
    - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P, template< typename, precision > class matType>
    bool isIdentity (matType< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNormalized (detail::tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNormalized (detail::tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNormalized (detail::tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNull (detail::tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNull (detail::tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    bool isNull (detail::tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class matType>
    bool isOrthogonal (matType< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL bool isIdentity (matType< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNormalized (tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNormalized (tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNormalized (tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNull (tmat2x2< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNull (tmat3x3< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL bool isNull (tmat4x4< T, P > const &m, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class matType>
    GLM_FUNC_DECL bool isOrthogonal (matType< T, P > const &m, T const &epsilon)
     

    Detailed Description

    Query to evaluate matrix properties.

    -

    <glm/gtx/matrix_query.hpp> need to be included to use these functionalities.

    +

    <glm/gtx/matrix_query.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + @@ -105,14 +103,14 @@ Functions - +
    bool glm::isIdentity GLM_FUNC_DECL bool glm::isIdentity ( matType< T, P > const &  m,
    - + - + @@ -134,14 +132,14 @@ Functions - +
    bool glm::isNormalized GLM_FUNC_DECL bool glm::isNormalized (detail::tmat2x2< T, P > const & tmat2x2< T, P > const &  m,
    - + - + @@ -163,14 +161,14 @@ Functions - +
    bool glm::isNormalized GLM_FUNC_DECL bool glm::isNormalized (detail::tmat3x3< T, P > const & tmat3x3< T, P > const &  m,
    - + - + @@ -192,14 +190,14 @@ Functions - +
    bool glm::isNormalized GLM_FUNC_DECL bool glm::isNormalized (detail::tmat4x4< T, P > const & tmat4x4< T, P > const &  m,
    - + - + @@ -221,14 +219,14 @@ Functions - +
    bool glm::isNull GLM_FUNC_DECL bool glm::isNull (detail::tmat2x2< T, P > const & tmat2x2< T, P > const &  m,
    - + - + @@ -250,14 +248,14 @@ Functions - +
    bool glm::isNull GLM_FUNC_DECL bool glm::isNull (detail::tmat3x3< T, P > const & tmat3x3< T, P > const &  m,
    - + - + @@ -279,12 +277,12 @@ Functions - +
    bool glm::isNull GLM_FUNC_DECL bool glm::isNull (detail::tmat4x4< T, P > const & tmat4x4< T, P > const &  m,
    - + @@ -313,7 +311,7 @@ Functions diff --git a/doc/api/a00211.html b/doc/api/a00211.html index 80041133..b79d255f 100644 --- a/doc/api/a00211.html +++ b/doc/api/a00211.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_mixed_producte + +0.9.6: GLM_GTX_matrix_transform_2d @@ -16,9 +16,9 @@
    bool glm::isOrthogonal GLM_FUNC_DECL bool glm::isOrthogonal ( matType< T, P > const &  m,
    + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,26 +39,213 @@
    -
    GLM_GTX_mixed_producte
    +
    GLM_GTX_matrix_transform_2d
    - - - + + + + + + + + + + + + + + +

    Functions

    -template<typename T , precision P>
    mixedProduct (detail::tvec3< T, P > const &v1, detail::tvec3< T, P > const &v2, detail::tvec3< T, P > const &v3)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > rotate (tmat3x3< T, P > const &m, T angle)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > scale (tmat3x3< T, P > const &m, tvec2< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > shearX (tmat3x3< T, P > const &m, T y)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > shearY (tmat3x3< T, P > const &m, T x)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER tmat3x3< T, P > translate (tmat3x3< T, P > const &m, tvec2< T, P > const &v)
     

    Detailed Description

    -

    Mixed product of 3 vectors.

    -

    <glm/gtx/mixed_product.hpp> need to be included to use these functionalities.

    +

    Defines functions that generate common 2d transformation matrices.

    +

    <glm/gtx/matrix_transform_2d.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::rotate (tmat3x3< T, P > const & m,
    angle 
    )
    +
    + +

    Builds a rotation 3 * 3 matrix created from an angle.

    +
    Parameters
    + + + +
    mInput matrix multiplied by this translation matrix.
    angleRotation angle expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise.
    +
    +
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::scale (tmat3x3< T, P > const & m,
    tvec2< T, P > const & v 
    )
    +
    + +

    Builds a scale 3 * 3 matrix created from a vector of 2 components.

    +
    Parameters
    + + + +
    mInput matrix multiplied by this translation matrix.
    vCoordinates of a scale vector.
    +
    +
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::shearX (tmat3x3< T, P > const & m,
    y 
    )
    +
    + +

    Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.

    +
    Parameters
    + + + +
    mInput matrix multiplied by this translation matrix.
    yShear factor.
    +
    +
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::shearY (tmat3x3< T, P > const & m,
    x 
    )
    +
    + +

    Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.

    +
    Parameters
    + + + +
    mInput matrix multiplied by this translation matrix.
    xShear factor.
    +
    +
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::translate (tmat3x3< T, P > const & m,
    tvec2< T, P > const & v 
    )
    +
    + +

    Builds a translation 3 * 3 matrix created from a vector of 2 components.

    +
    Parameters
    + + + +
    mInput matrix multiplied by this translation matrix.
    vCoordinates of a translation vector.
    +
    +
    + +
    +
    diff --git a/doc/api/a00212.html b/doc/api/a00212.html index b513b03e..97a87a52 100644 --- a/doc/api/a00212.html +++ b/doc/api/a00212.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_multiple + +0.9.6: GLM_GTX_mixed_producte @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,113 +39,26 @@ +
    GLM_GTX_mixed_producte
    - - - - - - + + +

    Functions

    template<typename genType >
    genType higherMultiple (genType const &Source, genType const &Multiple)
     
    template<typename genType >
    genType lowerMultiple (genType const &Source, genType const &Multiple)
     
    +template<typename T , precision P>
    GLM_FUNC_DECL T mixedProduct (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)
     

    Detailed Description

    -

    Find the closest number of a number multiple of other number.

    -

    <glm/gtx/multiple.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::higherMultiple (genType const & Source,
    genType const & Multiple 
    )
    -
    - -

    Higher multiple number of Source.

    -
    Template Parameters
    - - -
    genTypeFloating-point or integer scalar or vector types.
    -
    -
    -
    Parameters
    - - - -
    Source
    MultipleMust be a null or positive value
    -
    -
    -
    See Also
    GLM_GTX_multiple
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType glm::lowerMultiple (genType const & Source,
    genType const & Multiple 
    )
    -
    - -

    Lower multiple number of Source.

    -
    Template Parameters
    - - -
    genTypeFloating-point or integer scalar or vector types.
    -
    -
    -
    Parameters
    - - - -
    Source
    MultipleMust be a null or positive value
    -
    -
    -
    See Also
    GLM_GTX_multiple
    - -
    -
    +

    Mixed product of 3 vectors.

    +

    <glm/gtx/mixed_product.hpp> need to be included to use these functionalities.

    diff --git a/doc/api/a00213.html b/doc/api/a00213.html index 7c239ca3..ec154770 100644 --- a/doc/api/a00213.html +++ b/doc/api/a00213.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_norm + +0.9.6: GLM_GTX_multiple @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,62 +39,48 @@ +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +

    Functions

    template<typename T >
    distance2 (T const &p0, T const &p1)
     
    template<typename genType >
    genType::value_type distance2 (genType const &p0, genType const &p1)
     
    template<typename T , precision P>
    l1Norm (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
     
    template<typename T , precision P>
    l1Norm (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    l2Norm (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y)
     
    template<typename T , precision P>
    l2Norm (detail::tvec3< T, P > const &x)
     
    template<typename T >
    length2 (T const &x)
     
    template<typename genType >
    genType::value_type length2 (genType const &x)
     
    template<typename T , precision P>
    lxNorm (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y, unsigned int Depth)
     
    template<typename T , precision P>
    lxNorm (detail::tvec3< T, P > const &x, unsigned int Depth)
     
    template<typename genType >
    GLM_DEPRECATED GLM_FUNC_DECL
    +genType 
    higherMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_DEPRECATED GLM_FUNC_DECL
    +vecType< T, P > 
    higherMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     
    template<typename genType >
    GLM_DEPRECATED GLM_FUNC_DECL
    +genType 
    lowerMultiple (genType Source, genType Multiple)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_DEPRECATED GLM_FUNC_DECL
    +vecType< T, P > 
    lowerMultiple (vecType< T, P > const &Source, vecType< T, P > const &Multiple)
     

    Detailed Description

    -

    Various ways to compute vector norms.

    -

    <glm/gtx/norm.hpp> need to be included to use these functionalities.

    +

    Find the closest number of a number multiple of other number.

    +

    <glm/gtx/multiple.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + - - + + @@ -106,26 +90,39 @@ Functions
    T glm::distance2 GLM_DEPRECATED GLM_FUNC_DECL genType glm::higherMultiple (T const & p0, genType Source,
    T const & p1 genType Multiple 
    -

    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).

    -

    From GLM_GTX_norm extension.

    +

    Higher multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTX_multiple
    - +
    - + - - + + - - + + @@ -135,26 +132,39 @@ Functions
    genType::value_type glm::distance2 GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> glm::higherMultiple (genType const & p0, vecType< T, P > const & Source,
    genType const & p1 vecType< T, P > const & Multiple 
    -

    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).

    -

    From GLM_GTX_norm extension.

    +

    Higher multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTX_multiple
    - +
    - + - - + + - - + + @@ -164,45 +174,39 @@ Functions
    T glm::l1Norm GLM_DEPRECATED GLM_FUNC_DECL genType glm::lowerMultiple (detail::tvec3< T, P > const & x, genType Source,
    detail::tvec3< T, P > const & y genType Multiple 
    -

    Returns the L1 norm between x and y.

    -

    From GLM_GTX_norm extension.

    +

    Lower multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTX_multiple
    - +
    - + - - - - -
    T glm::l1Norm GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> glm::lowerMultiple (detail::tvec3< T, P > const & v)
    -
    - -

    Returns the L1 norm of v.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - + + - - + + @@ -212,129 +216,21 @@ Functions
    T glm::l2Norm (detail::tvec3< T, P > const & x, vecType< T, P > const & Source,
    detail::tvec3< T, P > const & y vecType< T, P > const & Multiple 
    -

    Returns the L2 norm between x and y.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::l2Norm (detail::tvec3< T, P > const & x)
    -
    - -

    Returns the L2 norm of v.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::length2 (T const & x)
    -
    - -

    Returns the squared length of x.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genType::value_type glm::length2 (genType const & x)
    -
    - -

    Returns the squared length of x.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    T glm::lxNorm (detail::tvec3< T, P > const & x,
    detail::tvec3< T, P > const & y,
    unsigned int Depth 
    )
    -
    - -

    Returns the L norm between x and y.

    -

    From GLM_GTX_norm extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    T glm::lxNorm (detail::tvec3< T, P > const & x,
    unsigned int Depth 
    )
    -
    - -

    Returns the L norm of v.

    -

    From GLM_GTX_norm extension.

    +

    Lower multiple number of Source.

    +
    Template Parameters
    + + +
    genTypeFloating-point or integer scalar or vector types.
    +
    +
    +
    Parameters
    + + + +
    Source
    MultipleMust be a null or positive value
    +
    +
    +
    See also
    GLM_GTX_multiple
    @@ -343,7 +239,7 @@ Functions diff --git a/doc/api/a00214.html b/doc/api/a00214.html index 5e22df4c..9df1acfc 100644 --- a/doc/api/a00214.html +++ b/doc/api/a00214.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_normal + +0.9.6: GLM_GTX_norm @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,41 +39,62 @@ +
    - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > triangleNormal (detail::tvec3< T, P > const &p1, detail::tvec3< T, P > const &p2, detail::tvec3< T, P > const &p3)
     
    template<typename T >
    GLM_FUNC_DECL T distance2 (T const &p0, T const &p1)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type distance2 (genType const &p0, genType const &p1)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T l1Norm (tvec3< T, P > const &x, tvec3< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T l1Norm (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T l2Norm (tvec3< T, P > const &x, tvec3< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T l2Norm (tvec3< T, P > const &x)
     
    template<typename T >
    GLM_FUNC_DECL T length2 (T const &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type length2 (genType const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T lxNorm (tvec3< T, P > const &x, tvec3< T, P > const &y, unsigned int Depth)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T lxNorm (tvec3< T, P > const &x, unsigned int Depth)
     

    Detailed Description

    -

    Compute the normal of a triangle.

    -

    <glm/gtx/normal.hpp> need to be included to use these functionalities.

    +

    Various ways to compute vector norms.

    +

    <glm/gtx/norm.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + - - - - - - - - + + @@ -85,8 +104,235 @@ Functions
    detail::tvec3<T, P> glm::triangleNormal GLM_FUNC_DECL T glm::distance2 (detail::tvec3< T, P > const & p1, T const & p0,
    detail::tvec3< T, P > const & p2,
    detail::tvec3< T, P > const & p3 T const & p1 
    -

    Computes triangle normal from triangle points.

    -

    From GLM_GTX_normal extension.

    +

    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType::value_type glm::distance2 (genType const & p0,
    genType const & p1 
    )
    +
    + +

    Returns the squared distance between p0 and p1, i.e., length(p0 - p1).

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::l1Norm (tvec3< T, P > const & x,
    tvec3< T, P > const & y 
    )
    +
    + +

    Returns the L1 norm between x and y.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::l1Norm (tvec3< T, P > const & v)
    +
    + +

    Returns the L1 norm of v.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::l2Norm (tvec3< T, P > const & x,
    tvec3< T, P > const & y 
    )
    +
    + +

    Returns the L2 norm between x and y.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::l2Norm (tvec3< T, P > const & x)
    +
    + +

    Returns the L2 norm of v.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::length2 (T const & x)
    +
    + +

    Returns the squared length of x.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType::value_type glm::length2 (genType const & x)
    +
    + +

    Returns the squared length of x.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::lxNorm (tvec3< T, P > const & x,
    tvec3< T, P > const & y,
    unsigned int Depth 
    )
    +
    + +

    Returns the L norm between x and y.

    +

    From GLM_GTX_norm extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::lxNorm (tvec3< T, P > const & x,
    unsigned int Depth 
    )
    +
    + +

    Returns the L norm of v.

    +

    From GLM_GTX_norm extension.

    @@ -95,7 +341,7 @@ Functions diff --git a/doc/api/a00215.html b/doc/api/a00215.html index ed13d26a..52f274c7 100644 --- a/doc/api/a00215.html +++ b/doc/api/a00215.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_normalize_dot + +0.9.6: GLM_GTX_normal @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,38 +39,41 @@
    -
    GLM_GTX_normalize_dot
    +
    - - - - - - + + +

    Functions

    template<typename genType >
    genType::value_type fastNormalizeDot (genType const &x, genType const &y)
     
    template<typename genType >
    genType::value_type normalizeDot (genType const &x, genType const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > triangleNormal (tvec3< T, P > const &p1, tvec3< T, P > const &p2, tvec3< T, P > const &p3)
     

    Detailed Description

    -

    Dot product of vectors that need to be normalize with a single square root.

    -

    <glm/gtx/normalized_dot.hpp> need to be included to use these functionalities.

    +

    Compute the normal of a triangle.

    +

    <glm/gtx/normal.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + - - + + + + + + + + @@ -82,37 +83,8 @@ Functions
    genType::value_type glm::fastNormalizeDot GLM_FUNC_DECL tvec3<T, P> glm::triangleNormal (genType const & x, tvec3< T, P > const & p1,
    genType const & y tvec3< T, P > const & p2,
    tvec3< T, P > const & p3 
    -

    Normalize parameters and returns the dot product of x and y.

    -

    Faster that dot(fastNormalize(x), fastNormalize(y)). From GLM_GTX_normalize_dot extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    genType::value_type glm::normalizeDot (genType const & x,
    genType const & y 
    )
    -
    - -

    Normalize parameters and returns the dot product of x and y.

    -

    It's faster that dot(normalize(x), normalize(y)). From GLM_GTX_normalize_dot extension.

    +

    Computes triangle normal from triangle points.

    +

    From GLM_GTX_normal extension.

    @@ -121,7 +93,7 @@ Functions diff --git a/doc/api/a00216.html b/doc/api/a00216.html index 71cdac74..6ae3f497 100644 --- a/doc/api/a00216.html +++ b/doc/api/a00216.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_number_precision + +0.9.6: GLM_GTX_normalize_dot @@ -16,9 +16,9 @@ + @@ -26,67 +26,100 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GLM_GTX_number_precision
    +
    GLM_GTX_normalize_dot
    - - - - - - - - - - - - - - - - - - - - - + + + + + + +

    -Typedefs

    -typedef f32 f32mat1
     
    -typedef f32 f32mat1x1
     
    -typedef f32 f32vec1
     
    -typedef f64 f64mat1
     
    -typedef f64 f64mat1x1
     
    -typedef f64 f64vec1
     
    -typedef u16 u16vec1
     
    -typedef u32 u32vec1
     
    -typedef u64 u64vec1
     
    -typedef u8 u8vec1
     

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType::value_type fastNormalizeDot (genType const &x, genType const &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType::value_type normalizeDot (genType const &x, genType const &y)
     

    Detailed Description

    -

    Defined size types.

    -

    <glm/gtx/number_precision.hpp> need to be included to use these functionalities.

    +

    Dot product of vectors that need to be normalize with a single square root.

    +

    <glm/gtx/normalized_dot.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType::value_type glm::fastNormalizeDot (genType const & x,
    genType const & y 
    )
    +
    + +

    Normalize parameters and returns the dot product of x and y.

    +

    Faster that dot(fastNormalize(x), fastNormalize(y)). From GLM_GTX_normalize_dot extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL genType::value_type glm::normalizeDot (genType const & x,
    genType const & y 
    )
    +
    + +

    Normalize parameters and returns the dot product of x and y.

    +

    It's faster that dot(normalize(x), normalize(y)). From GLM_GTX_normalize_dot extension.

    + +
    +
    diff --git a/doc/api/a00217.html b/doc/api/a00217.html index 7d1e901e..b485a1f3 100644 --- a/doc/api/a00217.html +++ b/doc/api/a00217.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_optimum_pow + +0.9.6: GLM_GTX_number_precision @@ -16,9 +16,9 @@ + @@ -26,191 +26,65 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    +
    GLM_GTX_number_precision
    - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

    -Functions

    template<typename genType >
    genType pow2 (const genType &x)
     
    template<typename genType >
    genType pow3 (const genType &x)
     
    template<typename genType >
    genType pow4 (const genType &x)
     
    bool powOfTwo (int num)
     
    template<precision P>
    detail::tvec2< bool, P > powOfTwo (detail::tvec2< int, P > const &x)
     
    template<precision P>
    detail::tvec3< bool, P > powOfTwo (detail::tvec3< int, P > const &x)
     
    template<precision P>
    detail::tvec4< bool, P > powOfTwo (detail::tvec4< int, P > const &x)
     

    +Typedefs

    +typedef f32 f32mat1
     
    +typedef f32 f32mat1x1
     
    +typedef f32 f32vec1
     
    +typedef f64 f64mat1
     
    +typedef f64 f64mat1x1
     
    +typedef f64 f64vec1
     
    +typedef u16 u16vec1
     
    +typedef u32 u32vec1
     
    +typedef u64 u64vec1
     
    +typedef u8 u8vec1
     

    Detailed Description

    -

    Integer exponentiation of power functions.

    -

    <glm/gtx/optimum_pow.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - -
    genType glm::gtx::pow2 (const genType & x)
    -
    - -

    Returns x raised to the power of 2.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::gtx::pow3 (const genType & x)
    -
    - -

    Returns x raised to the power of 3.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    genType glm::gtx::pow4 (const genType & x)
    -
    - -

    Returns x raised to the power of 4.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    bool glm::gtx::powOfTwo (int num)
    -
    - -

    Checks if the parameter is a power of 2 number.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec2<bool, P> glm::gtx::powOfTwo (detail::tvec2< int, P > const & x)
    -
    - -

    Checks to determine if the parameter component are power of 2 numbers.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec3<bool, P> glm::gtx::powOfTwo (detail::tvec3< int, P > const & x)
    -
    - -

    Checks to determine if the parameter component are power of 2 numbers.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tvec4<bool, P> glm::gtx::powOfTwo (detail::tvec4< int, P > const & x)
    -
    - -

    Checks to determine if the parameter component are power of 2 numbers.

    -

    From GLM_GTX_optimum_pow extension.

    - -
    -
    +

    Defined size types.

    +

    <glm/gtx/number_precision.hpp> need to be included to use these functionalities.

    diff --git a/doc/api/a00218.html b/doc/api/a00218.html index c453a1b4..06b47779 100644 --- a/doc/api/a00218.html +++ b/doc/api/a00218.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_orthonormalize + +0.9.6: GLM_GTX_optimum_pow @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,68 +39,167 @@
    -
    GLM_GTX_orthonormalize
    +
    - - - - - - + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tmat3x3< T, P > orthonormalize (const detail::tmat3x3< T, P > &m)
     
    template<typename T , precision P>
    detail::tvec3< T, P > orthonormalize (const detail::tvec3< T, P > &x, const detail::tvec3< T, P > &y)
     
    template<typename genType >
    GLM_FUNC_DECL genType pow2 (const genType &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType pow3 (const genType &x)
     
    template<typename genType >
    GLM_FUNC_DECL genType pow4 (const genType &x)
     
    GLM_FUNC_DECL bool powOfTwo (int num)
     
    template<precision P>
    GLM_FUNC_DECL tvec2< bool, P > powOfTwo (tvec2< int, P > const &x)
     
    template<precision P>
    GLM_FUNC_DECL tvec3< bool, P > powOfTwo (tvec3< int, P > const &x)
     
    template<precision P>
    GLM_FUNC_DECL tvec4< bool, P > powOfTwo (tvec4< int, P > const &x)
     

    Detailed Description

    -

    Orthonormalize matrices.

    -

    <glm/gtx/orthonormalize.hpp> need to be included to use these functionalities.

    +

    Integer exponentiation of power functions.

    +

    <glm/gtx/optimum_pow.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + +
    detail::tmat3x3<T, P> glm::orthonormalize GLM_FUNC_DECL genType glm::gtx::pow2 (const detail::tmat3x3< T, P > & m)const genType & x)
    -

    Returns the orthonormalized matrix of m.

    -

    From GLM_GTX_orthonormalize extension.

    +

    Returns x raised to the power of 2.

    +

    From GLM_GTX_optimum_pow extension.

    - +
    - + - - - - - + + - - - - - - -
    detail::tvec3<T, P> glm::orthonormalize GLM_FUNC_DECL genType glm::gtx::pow3 (const detail::tvec3< T, P > & x,
    const genType & x) const detail::tvec3< T, P > & y 
    )
    -

    Orthonormalizes x according y.

    -

    From GLM_GTX_orthonormalize extension.

    +

    Returns x raised to the power of 3.

    +

    From GLM_GTX_optimum_pow extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::gtx::pow4 (const genType & x)
    +
    + +

    Returns x raised to the power of 4.

    +

    From GLM_GTX_optimum_pow extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL bool glm::gtx::powOfTwo (int num)
    +
    + +

    Checks if the parameter is a power of 2 number.

    +

    From GLM_GTX_optimum_pow extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec2<bool, P> glm::gtx::powOfTwo (tvec2< int, P > const & x)
    +
    + +

    Checks to determine if the parameter component are power of 2 numbers.

    +

    From GLM_GTX_optimum_pow extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec3<bool, P> glm::gtx::powOfTwo (tvec3< int, P > const & x)
    +
    + +

    Checks to determine if the parameter component are power of 2 numbers.

    +

    From GLM_GTX_optimum_pow extension.

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec4<bool, P> glm::gtx::powOfTwo (tvec4< int, P > const & x)
    +
    + +

    Checks to determine if the parameter component are power of 2 numbers.

    +

    From GLM_GTX_optimum_pow extension.

    @@ -111,7 +208,7 @@ Functions diff --git a/doc/api/a00219.html b/doc/api/a00219.html index 36a374fd..bc10c826 100644 --- a/doc/api/a00219.html +++ b/doc/api/a00219.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_perpendicular + +0.9.6: GLM_GTX_orthonormalize @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,35 +39,57 @@
    -
    GLM_GTX_perpendicular
    +
    GLM_GTX_orthonormalize
    - - - + + + + + +

    Functions

    template<typename vecType >
    vecType perp (vecType const &x, vecType const &Normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > orthonormalize (const tmat3x3< T, P > &m)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > orthonormalize (const tvec3< T, P > &x, const tvec3< T, P > &y)
     

    Detailed Description

    -

    Perpendicular of a vector from other one.

    -

    <glm/gtx/perpendicular.hpp> need to be included to use these functionalities.

    +

    Orthonormalize matrices.

    +

    <glm/gtx/orthonormalize.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - + + + + +
    vecType glm::perp GLM_FUNC_DECL tmat3x3<T, P> glm::orthonormalize (vecType const & const tmat3x3< T, P > & m)
    +
    + +

    Returns the orthonormalized matrix of m.

    +

    From GLM_GTX_orthonormalize extension.

    + +
    +
    + +
    +
    + + + + + - - + + @@ -79,8 +99,8 @@ Functions
    GLM_FUNC_DECL tvec3<T, P> glm::orthonormalize (const tvec3< T, P > &  x,
    vecType const & Normal const tvec3< T, P > & y 
    -

    Projects x a perpendicular axis of Normal.

    -

    From GLM_GTX_perpendicular extension.

    +

    Orthonormalizes x according y.

    +

    From GLM_GTX_orthonormalize extension.

    @@ -89,7 +109,7 @@ Functions diff --git a/doc/api/a00220.html b/doc/api/a00220.html index 7291c0e8..bebdabef 100644 --- a/doc/api/a00220.html +++ b/doc/api/a00220.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_polar_coordinates + +0.9.6: GLM_GTX_perpendicular @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,58 +39,46 @@
    -
    GLM_GTX_polar_coordinates
    +
    GLM_GTX_perpendicular
    - - - - - - + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > euclidean (detail::tvec2< T, P > const &polar)
     
    template<typename T , precision P>
    detail::tvec3< T, P > polar (detail::tvec3< T, P > const &euclidean)
     
    template<typename vecType >
    GLM_FUNC_DECL vecType perp (vecType const &x, vecType const &Normal)
     

    Detailed Description

    -

    Conversion from Euclidean space to polar space and revert.

    -

    <glm/gtx/polar_coordinates.hpp> need to be included to use these functionalities.

    +

    Perpendicular of a vector from other one.

    +

    <glm/gtx/perpendicular.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - + + -
    detail::tvec3<T, P> glm::euclidean GLM_FUNC_DECL vecType glm::perp (detail::tvec2< T, P > const & polar)vecType const & x,
    -
    - -

    Convert Polar to Euclidean coordinates.

    -
    See Also
    GLM_GTX_polar_coordinates
    - -
    -
    - -
    -
    - - - - - + + + + + + + +
    detail::tvec3<T, P> glm::polar (detail::tvec3< T, P > const & euclidean) vecType const & Normal 
    )
    -

    Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.

    -
    See Also
    GLM_GTX_polar_coordinates
    +

    Projects x a perpendicular axis of Normal.

    +

    From GLM_GTX_perpendicular extension.

    @@ -101,7 +87,7 @@ Functions diff --git a/doc/api/a00221.html b/doc/api/a00221.html index fd245d49..2ce5cefb 100644 --- a/doc/api/a00221.html +++ b/doc/api/a00221.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_projection + +0.9.6: GLM_GTX_polar_coordinates @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,46 +39,58 @@
    -
    +
    GLM_GTX_polar_coordinates
    - - - + + + + + +

    Functions

    template<typename vecType >
    vecType proj (vecType const &x, vecType const &Normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > euclidean (tvec2< T, P > const &polar)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > polar (tvec3< T, P > const &euclidean)
     

    Detailed Description

    -

    Projection of a vector to other one.

    -

    <glm/gtx/projection.hpp> need to be included to use these functionalities.

    +

    Conversion from Euclidean space to polar space and revert.

    +

    <glm/gtx/polar_coordinates.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - - - + + - - - - - - -
    vecType glm::proj GLM_FUNC_DECL tvec3<T, P> glm::euclidean (vecType const & x,
    tvec2< T, P > const & polar) vecType const & Normal 
    )
    -

    Projects x on Normal.

    -

    From GLM_GTX_projection extension.

    +

    Convert Polar to Euclidean coordinates.

    +
    See also
    GLM_GTX_polar_coordinates
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::polar (tvec3< T, P > const & euclidean)
    +
    + +

    Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.

    +
    See also
    GLM_GTX_polar_coordinates
    @@ -89,7 +99,7 @@ Functions diff --git a/doc/api/a00222.html b/doc/api/a00222.html index 22f552ed..e048f994 100644 --- a/doc/api/a00222.html +++ b/doc/api/a00222.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_quaternion + +0.9.6: GLM_GTX_projection @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,188 +39,35 @@
    -
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +

    Functions

    template<typename T , precision P>
    detail::tvec3< T, P > cross (detail::tquat< T, P > const &q, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tvec3< T, P > cross (detail::tvec3< T, P > const &v, detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tquat< T, P > exp (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    extractRealComponent (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tquat< T, P > fastMix (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    detail::tquat< T, P > intermediate (detail::tquat< T, P > const &prev, detail::tquat< T, P > const &curr, detail::tquat< T, P > const &next)
     
    template<typename T , precision P>
    length2 (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tquat< T, P > log (detail::tquat< T, P > const &q)
     
    template<typename T , precision P>
    detail::tquat< T, P > pow (detail::tquat< T, P > const &x, T const &y)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotate (detail::tquat< T, P > const &q, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotate (detail::tquat< T, P > const &q, detail::tvec4< T, P > const &v)
     
    template<typename T , precision P>
    detail::tquat< T, P > rotation (detail::tvec3< T, P > const &orig, detail::tvec3< T, P > const &dest)
     
    template<typename T , precision P>
    detail::tquat< T, P > shortMix (detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    detail::tquat< T, P > squad (detail::tquat< T, P > const &q1, detail::tquat< T, P > const &q2, detail::tquat< T, P > const &s1, detail::tquat< T, P > const &s2, T const &h)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > toMat3 (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > toMat4 (detail::tquat< T, P > const &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > toQuat (detail::tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    detail::tquat< T, P > toQuat (detail::tmat4x4< T, P > const &x)
     
    template<typename vecType >
    GLM_FUNC_DECL vecType proj (vecType const &x, vecType const &Normal)
     

    Detailed Description

    -

    Extented quaternion types and functions.

    -

    <glm/gtx/quaternion.hpp> need to be included to use these functionalities.

    +

    Projection of a vector to other one.

    +

    <glm/gtx/projection.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - - - - - - - - - - - - - -
    detail::tvec3<T, P> glm::cross GLM_FUNC_DECL vecType glm::proj (detail::tquat< T, P > const & q,
    detail::tvec3< T, P > const & v 
    )
    -
    - -

    Compute a cross product between a quaternion and a vector.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T, P> glm::cross (detail::tvec3< T, P > const & v,
    detail::tquat< T, P > const & q 
    )
    -
    - -

    Compute a cross product between a vector and a quaternion.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tquat<T, P> glm::exp (detail::tquat< T, P > const & q)
    -
    - -

    Returns a exp of a quaternion.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::extractRealComponent (detail::tquat< T, P > const & q)
    -
    - -

    Extract the real component of a quaternion.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - + - - - - - - - - + + @@ -232,375 +77,8 @@ Functions
    detail::tquat<T, P> glm::fastMix (detail::tquat< T, P > const & vecType const &  x,
    detail::tquat< T, P > const & y,
    T const & a vecType const & Normal 
    -

    Quaternion normalized linear interpolation.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tquat<T, P> glm::intermediate (detail::tquat< T, P > const & prev,
    detail::tquat< T, P > const & curr,
    detail::tquat< T, P > const & next 
    )
    -
    - -

    Returns an intermediate control point for squad interpolation.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    T glm::length2 (detail::tquat< T, P > const & q)
    -
    - -

    Returns the squared length of x.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tquat<T, P> glm::log (detail::tquat< T, P > const & q)
    -
    - -

    Returns a log of a quaternion.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tquat<T, P> glm::pow (detail::tquat< T, P > const & x,
    T const & y 
    )
    -
    - -

    Returns x raised to the y power.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T, P> glm::rotate (detail::tquat< T, P > const & q,
    detail::tvec3< T, P > const & v 
    )
    -
    - -

    Returns quarternion square root.

    -
    See Also
    GLM_GTX_quaternion Rotates a 3 components vector by a quaternion.
    -
    -GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec4<T, P> glm::rotate (detail::tquat< T, P > const & q,
    detail::tvec4< T, P > const & v 
    )
    -
    - -

    Rotates a 4 components vector by a quaternion.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tquat<T, P> glm::rotation (detail::tvec3< T, P > const & orig,
    detail::tvec3< T, P > const & dest 
    )
    -
    - -

    Compute the rotation between two vectors.

    -

    param orig vector, needs to be normalized param dest vector, needs to be normalized

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tquat<T, P> glm::shortMix (detail::tquat< T, P > const & x,
    detail::tquat< T, P > const & y,
    T const & a 
    )
    -
    - -

    Quaternion interpolation using the rotation short path.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tquat<T, P> glm::squad (detail::tquat< T, P > const & q1,
    detail::tquat< T, P > const & q2,
    detail::tquat< T, P > const & s1,
    detail::tquat< T, P > const & s2,
    T const & h 
    )
    -
    - -

    Compute a point on a path according squad equation.

    -

    q1 and q2 are control points; s1 and s2 are intermediate control points.

    -
    See Also
    GLM_GTX_quaternion
    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat3x3<T, P> glm::toMat3 (detail::tquat< T, P > const & x)
    -
    - -

    Converts a quaternion to a 3 * 3 matrix.

    -
    See Also
    GLM_GTX_quaternion
    - -

    Definition at line 150 of file gtx/quaternion.hpp.

    - -

    References glm::mat3_cast().

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T, P> glm::toMat4 (detail::tquat< T, P > const & x)
    -
    - -

    Converts a quaternion to a 4 * 4 matrix.

    -
    See Also
    GLM_GTX_quaternion
    - -

    Definition at line 157 of file gtx/quaternion.hpp.

    - -

    References glm::mat4_cast().

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tquat<T, P> glm::toQuat (detail::tmat3x3< T, P > const & x)
    -
    - -

    Converts a 3 * 3 matrix to a quaternion.

    -
    See Also
    GLM_GTX_quaternion
    - -

    Definition at line 164 of file gtx/quaternion.hpp.

    - -

    References glm::quat_cast().

    - -
    -
    - -
    -
    - - - - - - - - -
    detail::tquat<T, P> glm::toQuat (detail::tmat4x4< T, P > const & x)
    -
    - -

    Converts a 4 * 4 matrix to a quaternion.

    -
    See Also
    GLM_GTX_quaternion
    - -

    Definition at line 171 of file gtx/quaternion.hpp.

    - -

    References glm::quat_cast().

    +

    Projects x on Normal.

    +

    From GLM_GTX_projection extension.

    @@ -609,7 +87,7 @@ Functions diff --git a/doc/api/a00223.html b/doc/api/a00223.html index 95a19871..cfb8bcb2 100644 --- a/doc/api/a00223.html +++ b/doc/api/a00223.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_raw_data + +0.9.6: GLM_GTX_quaternion @@ -16,9 +16,9 @@ + @@ -26,105 +26,579 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + +
    - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    -Typedefs

    typedef detail::uint8 byte
     
    typedef detail::uint32 dword
     
    typedef detail::uint64 qword
     
    typedef detail::uint16 word
     

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > cross (tquat< T, P > const &q, tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > cross (tvec3< T, P > const &v, tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > exp (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T extractRealComponent (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > fastMix (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > intermediate (tquat< T, P > const &prev, tquat< T, P > const &curr, tquat< T, P > const &next)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T length2 (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > log (tquat< T, P > const &q)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > pow (tquat< T, P > const &x, T const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotate (tquat< T, P > const &q, tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotate (tquat< T, P > const &q, tvec4< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > rotation (tvec3< T, P > const &orig, tvec3< T, P > const &dest)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > shortMix (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > squad (tquat< T, P > const &q1, tquat< T, P > const &q2, tquat< T, P > const &s1, tquat< T, P > const &s2, T const &h)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > toMat3 (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > toMat4 (tquat< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > toQuat (tmat3x3< T, P > const &x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > toQuat (tmat4x4< T, P > const &x)
     

    Detailed Description

    -

    Projection of a vector to other one.

    -

    <glm/gtx/raw_data.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - +

    Extented quaternion types and functions.

    +

    <glm/gtx/quaternion.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    +
    - + + + + + + + + + + + + + + +
    typedef detail::uint8 byteGLM_FUNC_DECL tvec3<T, P> glm::cross (tquat< T, P > const & q,
    tvec3< T, P > const & v 
    )
    -

    Type for byte numbers.

    -

    From GLM_GTX_raw_data extension.

    - -

    Definition at line 55 of file raw_data.hpp.

    +

    Compute a cross product between a quaternion and a vector.

    +
    See also
    GLM_GTX_quaternion
    - +
    - + + + + + + + + + + + + + + +
    typedef detail::uint32 dwordGLM_FUNC_DECL tvec3<T, P> glm::cross (tvec3< T, P > const & v,
    tquat< T, P > const & q 
    )
    -

    Type for dword numbers.

    -

    From GLM_GTX_raw_data extension.

    - -

    Definition at line 63 of file raw_data.hpp.

    +

    Compute a cross product between a vector and a quaternion.

    +
    See also
    GLM_GTX_quaternion
    - +
    - + + + + +
    typedef detail::uint64 qwordGLM_FUNC_DECL tquat<T, P> glm::exp (tquat< T, P > const & q)
    -

    Type for qword numbers.

    -

    From GLM_GTX_raw_data extension.

    - -

    Definition at line 67 of file raw_data.hpp.

    +

    Returns a exp of a quaternion.

    +
    See also
    GLM_GTX_quaternion
    - +
    - + + + + +
    typedef detail::uint16 wordGLM_FUNC_DECL T glm::extractRealComponent (tquat< T, P > const & q)
    -

    Type for word numbers.

    -

    From GLM_GTX_raw_data extension.

    +

    Extract the real component of a quaternion.

    +
    See also
    GLM_GTX_quaternion
    -

    Definition at line 59 of file raw_data.hpp.

    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::fastMix (tquat< T, P > const & x,
    tquat< T, P > const & y,
    T const & a 
    )
    +
    + +

    Quaternion normalized linear interpolation.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::intermediate (tquat< T, P > const & prev,
    tquat< T, P > const & curr,
    tquat< T, P > const & next 
    )
    +
    + +

    Returns an intermediate control point for squad interpolation.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL T glm::length2 (tquat< T, P > const & q)
    +
    + +

    Returns the squared length of x.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::log (tquat< T, P > const & q)
    +
    + +

    Returns a log of a quaternion.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::pow (tquat< T, P > const & x,
    T const & y 
    )
    +
    + +

    Returns x raised to the y power.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::rotate (tquat< T, P > const & q,
    tvec3< T, P > const & v 
    )
    +
    + +

    Returns quarternion square root.

    +
    See also
    GLM_GTX_quaternion Rotates a 3 components vector by a quaternion.
    +
    +GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<T, P> glm::rotate (tquat< T, P > const & q,
    tvec4< T, P > const & v 
    )
    +
    + +

    Rotates a 4 components vector by a quaternion.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::rotation (tvec3< T, P > const & orig,
    tvec3< T, P > const & dest 
    )
    +
    + +

    Compute the rotation between two vectors.

    +

    param orig vector, needs to be normalized param dest vector, needs to be normalized

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::shortMix (tquat< T, P > const & x,
    tquat< T, P > const & y,
    T const & a 
    )
    +
    + +

    Quaternion interpolation using the rotation short path.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::squad (tquat< T, P > const & q1,
    tquat< T, P > const & q2,
    tquat< T, P > const & s1,
    tquat< T, P > const & s2,
    T const & h 
    )
    +
    + +

    Compute a point on a path according squad equation.

    +

    q1 and q2 are control points; s1 and s2 are intermediate control points.

    +
    See also
    GLM_GTX_quaternion
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat3x3<T, P> glm::toMat3 (tquat< T, P > const & x)
    +
    + +

    Converts a quaternion to a 3 * 3 matrix.

    +
    See also
    GLM_GTX_quaternion
    + +

    Definition at line 149 of file gtx/quaternion.hpp.

    + +

    References glm::mat3_cast().

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::toMat4 (tquat< T, P > const & x)
    +
    + +

    Converts a quaternion to a 4 * 4 matrix.

    +
    See also
    GLM_GTX_quaternion
    + +

    Definition at line 156 of file gtx/quaternion.hpp.

    + +

    References glm::mat4_cast().

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::toQuat (tmat3x3< T, P > const & x)
    +
    + +

    Converts a 3 * 3 matrix to a quaternion.

    +
    See also
    GLM_GTX_quaternion
    + +

    Definition at line 163 of file gtx/quaternion.hpp.

    + +

    References glm::quat_cast().

    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::toQuat (tmat4x4< T, P > const & x)
    +
    + +

    Converts a 4 * 4 matrix to a quaternion.

    +
    See also
    GLM_GTX_quaternion
    + +

    Definition at line 170 of file gtx/quaternion.hpp.

    + +

    References glm::quat_cast().

    @@ -133,7 +607,7 @@ Typedefs diff --git a/doc/api/a00224.html b/doc/api/a00224.html index 318ec0f9..a6616df5 100644 --- a/doc/api/a00224.html +++ b/doc/api/a00224.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_rotate_normalized_axis + +0.9.6: GLM_GTX_range @@ -16,9 +16,9 @@ + @@ -26,142 +26,30 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    -
    GLM_GTX_rotate_normalized_axis
    +
    - - - - - - - - -

    -Functions

    template<typename T , precision P>
    detail::tmat4x4< T, P > rotateNormalizedAxis (detail::tmat4x4< T, P > const &m, T const &angle, detail::tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    detail::tquat< T, P > rotateNormalizedAxis (detail::tquat< T, P > const &q, T const &angle, detail::tvec3< T, P > const &axis)
     

    Detailed Description

    -

    Quaternions and matrices rotations around normalized axis.

    -

    <glm/gtx/rotate_normalized_axis.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, P> glm::rotateNormalizedAxis (detail::tmat4x4< T, P > const & m,
    T const & angle,
    detail::tvec3< T, P > const & axis 
    )
    -
    - -

    Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.

    -
    Parameters
    - - - - -
    mInput matrix multiplied by this rotation matrix.
    angleRotation angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisRotation axis, must be normalized.
    -
    -
    -
    Template Parameters
    - - -
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    -
    -
    -
    See Also
    GLM_GTX_rotate_normalized_axis
    -
    -- rotate(T angle, T x, T y, T z)
    -
    -- rotate(detail::tmat4x4<T, P> const & m, T angle, T x, T y, T z)
    -
    -- rotate(T angle, detail::tvec3<T, P> const & v)
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tquat<T, P> glm::rotateNormalizedAxis (detail::tquat< T, P > const & q,
    T const & angle,
    detail::tvec3< T, P > const & axis 
    )
    -
    - -

    Rotates a quaternion from a vector of 3 components normalized axis and an angle.

    -
    Parameters
    - - - - -
    qSource orientation
    angleAngle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisNormalized axis of the rotation, must be normalized.
    -
    -
    -
    See Also
    GLM_GTX_rotate_normalized_axis
    - -
    -
    +

    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).

    +

    <glm/gtx/range.hpp> need to be included to use these functionalities.

    diff --git a/doc/api/a00225.html b/doc/api/a00225.html index 23df10a8..f9b05078 100644 --- a/doc/api/a00225.html +++ b/doc/api/a00225.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_rotate_vector + +0.9.6: GLM_GTX_raw_data @@ -16,9 +16,9 @@ + @@ -26,361 +26,103 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    GLM_GTX_rotate_vector
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + +

    -Functions

    template<typename T , precision P>
    detail::tmat4x4< T, P > orientation (detail::tvec3< T, P > const &Normal, detail::tvec3< T, P > const &Up)
     
    template<typename T , precision P>
    detail::tvec2< T, P > rotate (detail::tvec2< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotate (detail::tvec3< T, P > const &v, T const &angle, detail::tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotate (detail::tvec4< T, P > const &v, T const &angle, detail::tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotateX (detail::tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotateX (detail::tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotateY (detail::tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotateY (detail::tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec3< T, P > rotateZ (detail::tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    detail::tvec4< T, P > rotateZ (detail::tvec4< T, P > const &v, T const &angle)
     

    +Typedefs

    typedef detail::uint8 byte
     
    typedef detail::uint32 dword
     
    typedef detail::uint64 qword
     
    typedef detail::uint16 word
     

    Detailed Description

    -

    Function to directly rotate a vector.

    -

    <glm/gtx/rotate_vector.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - +

    Projection of a vector to other one.

    +

    <glm/gtx/raw_data.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    +
    - - - - - - - - - - - - - - - +
    detail::tmat4x4<T, P> glm::orientation (detail::tvec3< T, P > const & Normal,
    detail::tvec3< T, P > const & Up 
    )typedef detail::uint8 byte
    -

    Build a rotation matrix from a normal and a up vector.

    -

    From GLM_GTX_rotate_vector extension.

    +

    Type for byte numbers.

    +

    From GLM_GTX_raw_data extension.

    + +

    Definition at line 55 of file raw_data.hpp.

    - +
    - - - - - - - - - - - - - - - +
    detail::tvec2<T, P> glm::rotate (detail::tvec2< T, P > const & v,
    T const & angle 
    )typedef detail::uint32 dword
    -

    Rotate a two dimensional vector.

    -

    From GLM_GTX_rotate_vector extension.

    +

    Type for dword numbers.

    +

    From GLM_GTX_raw_data extension.

    + +

    Definition at line 63 of file raw_data.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tvec3<T, P> glm::rotate (detail::tvec3< T, P > const & v,
    T const & angle,
    detail::tvec3< T, P > const & normal 
    )typedef detail::uint64 qword
    -

    Rotate a three dimensional vector around an axis.

    -

    From GLM_GTX_rotate_vector extension.

    +

    Type for qword numbers.

    +

    From GLM_GTX_raw_data extension.

    + +

    Definition at line 67 of file raw_data.hpp.

    - +
    - - - - - - - - - - - - - - - - - - - - - +
    detail::tvec4<T, P> glm::rotate (detail::tvec4< T, P > const & v,
    T const & angle,
    detail::tvec3< T, P > const & normal 
    )typedef detail::uint16 word
    -

    Rotate a four dimensional vector around an axis.

    -

    From GLM_GTX_rotate_vector extension.

    +

    Type for word numbers.

    +

    From GLM_GTX_raw_data extension.

    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T, P> glm::rotateX (detail::tvec3< T, P > const & v,
    T const & angle 
    )
    -
    - -

    Rotate a three dimensional vector around the X axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec4<T, P> glm::rotateX (detail::tvec4< T, P > const & v,
    T const & angle 
    )
    -
    - -

    Rotate a four dimentionnals vector around the X axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T, P> glm::rotateY (detail::tvec3< T, P > const & v,
    T const & angle 
    )
    -
    - -

    Rotate a three dimensional vector around the Y axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec4<T, P> glm::rotateY (detail::tvec4< T, P > const & v,
    T const & angle 
    )
    -
    - -

    Rotate a four dimensional vector around the X axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec3<T, P> glm::rotateZ (detail::tvec3< T, P > const & v,
    T const & angle 
    )
    -
    - -

    Rotate a three dimensional vector around the Z axis.

    -

    From GLM_GTX_rotate_vector extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tvec4<T, P> glm::rotateZ (detail::tvec4< T, P > const & v,
    T const & angle 
    )
    -
    - -

    Rotate a four dimensional vector around the X axis.

    -

    From GLM_GTX_rotate_vector extension.

    +

    Definition at line 59 of file raw_data.hpp.

    @@ -389,7 +131,7 @@ Functions diff --git a/doc/api/a00226.html b/doc/api/a00226.html index e1bd2e7f..90618170 100644 --- a/doc/api/a00226.html +++ b/doc/api/a00226.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_simd_mat4 + +0.9.6: GLM_GTX_rotate_normalized_axis @@ -16,9 +16,9 @@ + @@ -26,30 +26,140 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    +
    -
    +
    GLM_GTX_rotate_normalized_axis
    -

    SIMD implementation of mat4 type.

    -

    <glm/gtx/simd_mat4.hpp> need to be included to use these functionalities.

    + + + + + + + + +

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rotateNormalizedAxis (tmat4x4< T, P > const &m, T const &angle, tvec3< T, P > const &axis)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tquat< T, P > rotateNormalizedAxis (tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)
     
    +

    Detailed Description

    +

    Quaternions and matrices rotations around normalized axis.

    +

    <glm/gtx/rotate_normalized_axis.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::rotateNormalizedAxis (tmat4x4< T, P > const & m,
    T const & angle,
    tvec3< T, P > const & axis 
    )
    +
    + +

    Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.

    +
    Parameters
    + + + + +
    mInput matrix multiplied by this rotation matrix.
    angleRotation angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisRotation axis, must be normalized.
    +
    +
    +
    Template Parameters
    + + +
    TValue type used to build the matrix. Currently supported: half (not recommanded), float or double.
    +
    +
    +
    See also
    GLM_GTX_rotate_normalized_axis
    +
    +- rotate(T angle, T x, T y, T z)
    +
    +- rotate(tmat4x4<T, P> const & m, T angle, T x, T y, T z)
    +
    +- rotate(T angle, tvec3<T, P> const & v)
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tquat<T, P> glm::rotateNormalizedAxis (tquat< T, P > const & q,
    T const & angle,
    tvec3< T, P > const & axis 
    )
    +
    + +

    Rotates a quaternion from a vector of 3 components normalized axis and an angle.

    +
    Parameters
    + + + + +
    qSource orientation
    angleAngle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
    axisNormalized axis of the rotation, must be normalized.
    +
    +
    +
    See also
    GLM_GTX_rotate_normalized_axis
    + +
    +
    diff --git a/doc/api/a00227.html b/doc/api/a00227.html index 0d361d90..fcfd1ba5 100644 --- a/doc/api/a00227.html +++ b/doc/api/a00227.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_simd_quat + +0.9.6: GLM_GTX_rotate_vector @@ -16,9 +16,9 @@ + @@ -26,32 +26,414 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    +
    -
    +
    GLM_GTX_rotate_vector
    -

    SIMD implementation of quat type.

    -

    SIMD implementation of vec4 type.

    -

    <glm/gtx/simd_quat.hpp> need to be included to use these functionalities.

    -

    <glm/gtx/simd_vec4.hpp> need to be included to use these functionalities.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > orientation (tvec3< T, P > const &Normal, tvec3< T, P > const &Up)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec2< T, P > rotate (tvec2< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotate (tvec3< T, P > const &v, T const &angle, tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotate (tvec4< T, P > const &v, T const &angle, tvec3< T, P > const &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotateX (tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotateX (tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotateY (tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotateY (tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > rotateZ (tvec3< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec4< T, P > rotateZ (tvec4< T, P > const &v, T const &angle)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tvec3< T, P > slerp (tvec3< T, P > const &x, tvec3< T, P > const &y, T const &a)
     
    +

    Detailed Description

    +

    Function to directly rotate a vector.

    +

    <glm/gtx/rotate_vector.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::orientation (tvec3< T, P > const & Normal,
    tvec3< T, P > const & Up 
    )
    +
    + +

    Build a rotation matrix from a normal and a up vector.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec2<T, P> glm::rotate (tvec2< T, P > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a two dimensional vector.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::rotate (tvec3< T, P > const & v,
    T const & angle,
    tvec3< T, P > const & normal 
    )
    +
    + +

    Rotate a three dimensional vector around an axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<T, P> glm::rotate (tvec4< T, P > const & v,
    T const & angle,
    tvec3< T, P > const & normal 
    )
    +
    + +

    Rotate a four dimensional vector around an axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::rotateX (tvec3< T, P > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a three dimensional vector around the X axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<T, P> glm::rotateX (tvec4< T, P > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a four dimentionnals vector around the X axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::rotateY (tvec3< T, P > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a three dimensional vector around the Y axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<T, P> glm::rotateY (tvec4< T, P > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a four dimensional vector around the X axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::rotateZ (tvec3< T, P > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a three dimensional vector around the Z axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec4<T, P> glm::rotateZ (tvec4< T, P > const & v,
    T const & angle 
    )
    +
    + +

    Rotate a four dimensional vector around the X axis.

    +

    From GLM_GTX_rotate_vector extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tvec3<T, P> glm::slerp (tvec3< T, P > const & x,
    tvec3< T, P > const & y,
    T const & a 
    )
    +
    + +

    Returns Spherical interpolation between two vectors.

    +
    Parameters
    + + + + +
    xA first vector
    yA second vector
    aInterpolation factor. The interpolation is defined beyond the range [0, 1].
    +
    +
    +
    See also
    GLM_GTX_rotate_vector
    + +
    +
    diff --git a/doc/api/a00228.html b/doc/api/a00228.html index bea683bb..744065a4 100644 --- a/doc/api/a00228.html +++ b/doc/api/a00228.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_spline + +0.9.6: GLM_GTX_scalar_relational @@ -16,9 +16,9 @@ + @@ -26,188 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    - +
    GLM_GTX_scalar_relational
    - - - - - - - - - - - -

    -Functions

    template<typename genType >
    GLM_FUNC_DECL genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
     
    -

    Detailed Description

    -

    Spline functions.

    -

    <glm/gtx/spline.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::catmullRom (genType const & v1,
    genType const & v2,
    genType const & v3,
    genType const & v4,
    typename genType::value_type const & s 
    )
    -
    - -

    Return a point from a catmull rom curve.

    -
    See Also
    GLM_GTX_spline extension.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::cubic (genType const & v1,
    genType const & v2,
    genType const & v3,
    genType const & v4,
    typename genType::value_type const & s 
    )
    -
    - -

    Return a point from a cubic curve.

    -
    See Also
    GLM_GTX_spline extension.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_DECL genType glm::hermite (genType const & v1,
    genType const & t1,
    genType const & v2,
    genType const & t2,
    typename genType::value_type const & s 
    )
    -
    - -

    Return a point from a hermite curve.

    -
    See Also
    GLM_GTX_spline extension.
    - -
    -
    +

    Extend a position from a source to a position at a defined length.

    +

    <glm/gtx/scalar_relational.hpp> need to be included to use these functionalities.

    diff --git a/doc/api/a00229.html b/doc/api/a00229.html index 4fddf018..71e202e1 100644 --- a/doc/api/a00229.html +++ b/doc/api/a00229.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_std_based_type + +0.9.6: GLM_GTX_simd_mat4 @@ -16,9 +16,9 @@ + @@ -26,158 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    -
    GLM_GTX_std_based_type
    +
    - - - - - - - - - - - - - - -

    -Typedefs

    typedef detail::tvec2
    -< std::size_t, defaultp > 
    size2
     
    typedef detail::tvec2
    -< std::size_t, defaultp > 
    size2_t
     
    typedef detail::tvec3
    -< std::size_t, defaultp > 
    size3
     
    typedef detail::tvec3
    -< std::size_t, defaultp > 
    size3_t
     
    typedef detail::tvec4
    -< std::size_t, defaultp > 
    size4
     
    typedef detail::tvec4
    -< std::size_t, defaultp > 
    size4_t
     
    -

    Detailed Description

    -

    Adds vector types based on STL value types.

    -

    <glm/gtx/std_based_type.hpp> need to be included to use these functionalities.

    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef detail::tvec2<std::size_t, defaultp> size2
    -
    - -

    Vector type based of two std::size_t components.

    -
    See Also
    GLM_GTX_std_based_type
    - -

    Definition at line 56 of file std_based_type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec2<std::size_t, defaultp> size2_t
    -
    - -

    Vector type based of two std::size_t components.

    -
    See Also
    GLM_GTX_std_based_type
    - -

    Definition at line 68 of file std_based_type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<std::size_t, defaultp> size3
    -
    - -

    Vector type based of three std::size_t components.

    -
    See Also
    GLM_GTX_std_based_type
    - -

    Definition at line 60 of file std_based_type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec3<std::size_t, defaultp> size3_t
    -
    - -

    Vector type based of three std::size_t components.

    -
    See Also
    GLM_GTX_std_based_type
    - -

    Definition at line 72 of file std_based_type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<std::size_t, defaultp> size4
    -
    - -

    Vector type based of four std::size_t components.

    -
    See Also
    GLM_GTX_std_based_type
    - -

    Definition at line 64 of file std_based_type.hpp.

    - -
    -
    - -
    -
    - - - - -
    typedef detail::tvec4<std::size_t, defaultp> size4_t
    -
    - -

    Vector type based of four std::size_t components.

    -
    See Also
    GLM_GTX_std_based_type
    - -

    Definition at line 76 of file std_based_type.hpp.

    - -
    -
    +

    SIMD implementation of mat4 type.

    +

    <glm/gtx/simd_mat4.hpp> need to be included to use these functionalities.

    diff --git a/doc/api/a00230.html b/doc/api/a00230.html index cdf4838a..8ea2ff73 100644 --- a/doc/api/a00230.html +++ b/doc/api/a00230.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_string_cast + +0.9.6: GLM_GTX_simd_quat @@ -16,9 +16,9 @@ + @@ -26,60 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    -
    +
    - - - - - -

    -Functions

    template<typename genType >
    std::string to_string (genType const &x)
     
    -

    Detailed Description

    -

    Setup strings for GLM type values.

    -

    <glm/gtx/string_cast.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - -
    std::string glm::to_string (genType const & x)
    -
    - -

    Create a string from a GLM type value.

    -
    See Also
    GLM_GTX_string_cast extension.
    - -
    -
    +

    SIMD implementation of quat type.

    +

    <glm/gtx/simd_quat.hpp> need to be included to use these functionalities.

    diff --git a/doc/api/a00231.html b/doc/api/a00231.html index f365e5b9..647665e8 100644 --- a/doc/api/a00231.html +++ b/doc/api/a00231.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_transform + +0.9.6: GLM_GTX_simd_vec4 @@ -16,9 +16,9 @@ + @@ -26,123 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    - - - - - - - - - - - -

    -Functions

    template<typename T , precision P>
    detail::tmat4x4< T, P > rotate (T angle, detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > scale (detail::tvec3< T, P > const &v)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > translate (detail::tvec3< T, P > const &v)
     
    -

    Detailed Description

    -

    Add transformation matrices.

    -

    <glm/gtx/transform.hpp> need to be included to use these functionalities.

    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, P> glm::rotate (angle,
    detail::tvec3< T, P > const & v 
    )
    -
    - -

    Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.

    - - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T, P> glm::scale (detail::tvec3< T, P > const & v)
    -
    - -

    Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.

    - - -
    -
    - -
    -
    - - - - - - - - -
    detail::tmat4x4<T, P> glm::translate (detail::tvec3< T, P > const & v)
    -
    - -

    Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.

    - - -
    -
    +

    SIMD implementation of vec4 type.

    +

    <glm/gtx/simd_vec4.hpp> need to be included to use these functionalities.

    diff --git a/doc/api/a00232.html b/doc/api/a00232.html index 41380249..5a498c46 100644 --- a/doc/api/a00232.html +++ b/doc/api/a00232.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_transform2 + +0.9.6: GLM_GTX_spline @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,59 +39,59 @@
    -
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + +

    Functions

    template<typename T , precision P>
    detail::tmat3x3< T, P > proj2D (const detail::tmat3x3< T, P > &m, const detail::tvec3< T, P > &normal)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > proj3D (const detail::tmat4x4< T, P > &m, const detail::tvec3< T, P > &normal)
     
    template<typename valType , precision P>
    detail::tmat4x4< valType, P > scaleBias (valType scale, valType bias)
     
    template<typename valType , precision P>
    detail::tmat4x4< valType, P > scaleBias (detail::tmat4x4< valType, P > const &m, valType scale, valType bias)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > shearX2D (detail::tmat3x3< T, P > const &m, T y)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > shearX3D (const detail::tmat4x4< T, P > &m, T y, T z)
     
    template<typename T , precision P>
    detail::tmat3x3< T, P > shearY2D (detail::tmat3x3< T, P > const &m, T x)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > shearY3D (const detail::tmat4x4< T, P > &m, T x, T z)
     
    template<typename T , precision P>
    detail::tmat4x4< T, P > shearZ3D (const detail::tmat4x4< T, P > &m, T x, T y)
     
    template<typename genType >
    GLM_FUNC_DECL genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
     
    template<typename genType >
    GLM_FUNC_DECL genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
     

    Detailed Description

    -

    Add extra transformation matrices.

    -

    <glm/gtx/transform2.hpp> need to be included to use these functionalities.

    +

    Spline functions.

    +

    <glm/gtx/spline.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -103,26 +101,44 @@ Functions
    detail::tmat3x3<T, P> glm::proj2D GLM_FUNC_DECL genType glm::catmullRom (const detail::tmat3x3< T, P > & m, genType const & v1,
    const detail::tvec3< T, P > & normal genType const & v2,
    genType const & v3,
    genType const & v4,
    typename genType::value_type const & s 
    -

    Build planar projection matrix along normal axis.

    -

    From GLM_GTX_transform2 extension.

    +

    Return a point from a catmull rom curve.

    +
    See also
    GLM_GTX_spline extension.
    - +
    - + - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -132,26 +148,44 @@ Functions
    detail::tmat4x4<T, P> glm::proj3D GLM_FUNC_DECL genType glm::cubic (const detail::tmat4x4< T, P > & m, genType const & v1,
    const detail::tvec3< T, P > & normal genType const & v2,
    genType const & v3,
    genType const & v4,
    typename genType::value_type const & s 
    -

    Build planar projection matrix along normal axis.

    -

    From GLM_GTX_transform2 extension.

    +

    Return a point from a cubic curve.

    +
    See also
    GLM_GTX_spline extension.
    - +
    - + - - + + - - + + + + + + + + + + + + + + + + + + + + @@ -161,205 +195,8 @@ Functions
    detail::tmat4x4<valType, P> glm::scaleBias GLM_FUNC_DECL genType glm::hermite (valType scale, genType const & v1,
    valType bias genType const & t1,
    genType const & v2,
    genType const & t2,
    typename genType::value_type const & s 
    -

    Build a scale bias matrix.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<valType, P> glm::scaleBias (detail::tmat4x4< valType, P > const & m,
    valType scale,
    valType bias 
    )
    -
    - -

    Build a scale bias matrix.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat3x3<T, P> glm::shearX2D (detail::tmat3x3< T, P > const & m,
    y 
    )
    -
    - -

    Transforms a matrix with a shearing on X axis.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, P> glm::shearX3D (const detail::tmat4x4< T, P > & m,
    y,
    z 
    )
    -
    - -

    Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    detail::tmat3x3<T, P> glm::shearY2D (detail::tmat3x3< T, P > const & m,
    x 
    )
    -
    - -

    Transforms a matrix with a shearing on Y axis.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, P> glm::shearY3D (const detail::tmat4x4< T, P > & m,
    x,
    z 
    )
    -
    - -

    Transforms a matrix with a shearing on Y axis.

    -

    From GLM_GTX_transform2 extension.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    detail::tmat4x4<T, P> glm::shearZ3D (const detail::tmat4x4< T, P > & m,
    x,
    y 
    )
    -
    - -

    Transforms a matrix with a shearing on Z axis.

    -

    From GLM_GTX_transform2 extension.

    +

    Return a point from a hermite curve.

    +
    See also
    GLM_GTX_spline extension.
    @@ -368,7 +205,7 @@ Functions diff --git a/doc/api/a00233.html b/doc/api/a00233.html index b8418eb0..fb344719 100644 --- a/doc/api/a00233.html +++ b/doc/api/a00233.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_vec1 + +0.9.6: GLM_GTX_std_based_type @@ -16,9 +16,9 @@ + @@ -26,30 +26,196 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -

    Add vec1, ivec1, uvec1 and bvec1 types.

    -

    <glm/gtx/vec1.hpp> need to be included to use these functionalities.

    + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef tvec1< std::size_t,
    +defaultp > 
    size1
     
    typedef tvec1< std::size_t,
    +defaultp > 
    size1_t
     
    typedef tvec2< std::size_t,
    +defaultp > 
    size2
     
    typedef tvec2< std::size_t,
    +defaultp > 
    size2_t
     
    typedef tvec3< std::size_t,
    +defaultp > 
    size3
     
    typedef tvec3< std::size_t,
    +defaultp > 
    size3_t
     
    typedef tvec4< std::size_t,
    +defaultp > 
    size4
     
    typedef tvec4< std::size_t,
    +defaultp > 
    size4_t
     
    +

    Detailed Description

    +

    Adds vector types based on STL value types.

    +

    <glm/gtx/std_based_type.hpp> need to be included to use these functionalities.

    +

    Typedef Documentation

    + +
    +
    + + + + +
    typedef tvec1<std::size_t, defaultp> size1
    +
    + +

    Vector type based of one std::size_t component.

    +
    See also
    GLM_GTX_std_based_type
    + +

    Definition at line 55 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec1<std::size_t, defaultp> size1_t
    +
    + +

    Vector type based of one std::size_t component.

    +
    See also
    GLM_GTX_std_based_type
    + +

    Definition at line 71 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<std::size_t, defaultp> size2
    +
    + +

    Vector type based of two std::size_t components.

    +
    See also
    GLM_GTX_std_based_type
    + +

    Definition at line 59 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec2<std::size_t, defaultp> size2_t
    +
    + +

    Vector type based of two std::size_t components.

    +
    See also
    GLM_GTX_std_based_type
    + +

    Definition at line 75 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<std::size_t, defaultp> size3
    +
    + +

    Vector type based of three std::size_t components.

    +
    See also
    GLM_GTX_std_based_type
    + +

    Definition at line 63 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec3<std::size_t, defaultp> size3_t
    +
    + +

    Vector type based of three std::size_t components.

    +
    See also
    GLM_GTX_std_based_type
    + +

    Definition at line 79 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<std::size_t, defaultp> size4
    +
    + +

    Vector type based of four std::size_t components.

    +
    See also
    GLM_GTX_std_based_type
    + +

    Definition at line 67 of file std_based_type.hpp.

    + +
    +
    + +
    +
    + + + + +
    typedef tvec4<std::size_t, defaultp> size4_t
    +
    + +

    Vector type based of four std::size_t components.

    +
    See also
    GLM_GTX_std_based_type
    + +

    Definition at line 83 of file std_based_type.hpp.

    + +
    +
    diff --git a/doc/api/a00234.html b/doc/api/a00234.html index 25ee17be..5490f301 100644 --- a/doc/api/a00234.html +++ b/doc/api/a00234.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_vector_angle + +0.9.6: GLM_GTX_string_cast @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,118 +39,36 @@
    -
    GLM_GTX_vector_angle
    +
    - - - - - - - - - + + +

    Functions

    template<typename vecType >
    GLM_FUNC_QUALIFIER
    -vecType::value_type 
    angle (vecType const &x, vecType const &y)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec2< T, P > const &x, detail::tvec2< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_QUALIFIER T orientedAngle (detail::tvec3< T, P > const &x, detail::tvec3< T, P > const &y, detail::tvec3< T, P > const &ref)
     
    template<template< typename, precision > class matType, typename T , precision P>
    GLM_FUNC_DECL std::string to_string (matType< T, P > const &x)
     

    Detailed Description

    -

    Compute angle between vectors.

    -

    <glm/gtx/vector_angle.hpp> need to be included to use these functionalities.

    +

    Setup strings for GLM type values.

    +

    <glm/gtx/string_cast.hpp> need to be included to use these functionalities. This extension is not supported with CUDA

    Function Documentation

    - +
    - + - - - - - + + - - - - - - -
    GLM_FUNC_QUALIFIER vecType::value_type glm::angle GLM_FUNC_DECL std::string glm::to_string (vecType const & x,
    matType< T, P > const & x) vecType const & y 
    )
    -

    Returns the absolute angle between two vectors Parameters need to be normalized.

    -
    See Also
    GLM_GTX_vector_angle extension
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_QUALIFIER T glm::orientedAngle (detail::tvec2< T, P > const & x,
    detail::tvec2< T, P > const & y 
    )
    -
    - -

    Returns the oriented angle between two 2d vectors Parameters need to be normalized.

    -
    See Also
    GLM_GTX_vector_angle extension.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLM_FUNC_QUALIFIER T glm::orientedAngle (detail::tvec3< T, P > const & x,
    detail::tvec3< T, P > const & y,
    detail::tvec3< T, P > const & ref 
    )
    -
    - -

    Returns the oriented angle between two 3d vectors based from a reference axis.

    -

    Parameters need to be normalized.

    -
    See Also
    GLM_GTX_vector_angle extension.
    +

    Create a string from a GLM vector or matrix typed variable.

    +
    See also
    GLM_GTX_string_cast extension.
    @@ -161,7 +77,7 @@ vecType::value_type  diff --git a/doc/api/a00235.html b/doc/api/a00235.html index a91b973e..45e11b46 100644 --- a/doc/api/a00235.html +++ b/doc/api/a00235.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_vector_query + +0.9.6: GLM_GTX_transform @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,56 +39,41 @@
    -
    GLM_GTX_vector_query
    +
    - - - - - - - - - - - - - - - - - - + + + + + + + + +

    Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    bool areCollinear (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool areOrthogonal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool areOrthonormal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    vecType< bool, P > isCompNull (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool isNormalized (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    bool isNull (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > rotate (T angle, tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > scale (tvec3< T, P > const &v)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > translate (tvec3< T, P > const &v)
     

    Detailed Description

    -

    Query informations of vector types.

    -

    <glm/gtx/vector_query.hpp> need to be included to use these functionalities.

    +

    Add transformation matrices.

    +

    <glm/gtx/transform.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + - - - - - - - - + + @@ -100,165 +83,52 @@ Functions
    bool glm::areCollinear GLM_FUNC_DECL tmat4x4<T, P> glm::rotate (vecType< T, P > const & v0, angle,
    vecType< T, P > const & v1,
    T const & epsilon tvec3< T, P > const & v 
    -

    Check whether two vectors are collinears.

    -
    See Also
    GLM_GTX_vector_query extensions.
    +

    Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.

    +
    See also
    GLM_GTC_matrix_transform
    +
    +GLM_GTX_transform
    - +
    - + - - - - - + + - - - - - - - - - - - - -
    bool glm::areOrthogonal GLM_FUNC_DECL tmat4x4<T, P> glm::scale (vecType< T, P > const & v0,
    tvec3< T, P > const & v) vecType< T, P > const & v1,
    T const & epsilon 
    )
    -

    Check whether two vectors are orthogonals.

    -
    See Also
    GLM_GTX_vector_query extensions.
    +

    Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.

    +
    See also
    GLM_GTC_matrix_transform
    +
    +GLM_GTX_transform
    - +
    - + - - - - - + + - - - - - - - - - - - - -
    bool glm::areOrthonormal GLM_FUNC_DECL tmat4x4<T, P> glm::translate (vecType< T, P > const & v0,
    tvec3< T, P > const & v) vecType< T, P > const & v1,
    T const & epsilon 
    )
    -

    Check whether two vectors are orthonormal.

    -
    See Also
    GLM_GTX_vector_query extensions.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    vecType<bool, P> glm::isCompNull (vecType< T, P > const & v,
    T const & epsilon 
    )
    -
    - -

    Check whether a each component of a vector is null.

    -
    See Also
    GLM_GTX_vector_query extensions.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool glm::isNormalized (vecType< T, P > const & v,
    T const & epsilon 
    )
    -
    - -

    Check whether a vector is normalized.

    -
    See Also
    GLM_GTX_vector_query extensions.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool glm::isNull (vecType< T, P > const & v,
    T const & epsilon 
    )
    -
    - -

    Check whether a vector is null.

    -
    See Also
    GLM_GTX_vector_query extensions.
    +

    Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.

    +
    See also
    GLM_GTC_matrix_transform
    +
    +GLM_GTX_transform
    @@ -267,7 +137,7 @@ Functions diff --git a/doc/api/a00236.html b/doc/api/a00236.html index 5656d3e5..49a9dda8 100644 --- a/doc/api/a00236.html +++ b/doc/api/a00236.html @@ -3,8 +3,8 @@ - -GLM: GLM_GTX_wrap + +0.9.6: GLM_GTX_transform2 @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -41,80 +39,325 @@ +
    - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    template<typename genType >
    GLM_FUNC_DECL genType clamp (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType mirrorRepeat (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType repeat (genType const &Texcoord)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > proj2D (const tmat3x3< T, P > &m, const tvec3< T, P > &normal)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > proj3D (const tmat4x4< T, P > &m, const tvec3< T, P > &normal)
     
    template<typename valType , precision P>
    GLM_FUNC_DECL tmat4x4< valType, P > scaleBias (valType scale, valType bias)
     
    template<typename valType , precision P>
    GLM_FUNC_DECL tmat4x4< valType, P > scaleBias (tmat4x4< valType, P > const &m, valType scale, valType bias)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > shearX2D (tmat3x3< T, P > const &m, T y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > shearX3D (const tmat4x4< T, P > &m, T y, T z)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat3x3< T, P > shearY2D (tmat3x3< T, P > const &m, T x)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > shearY3D (const tmat4x4< T, P > &m, T x, T z)
     
    template<typename T , precision P>
    GLM_FUNC_DECL tmat4x4< T, P > shearZ3D (const tmat4x4< T, P > &m, T x, T y)
     

    Detailed Description

    -

    Wrapping mode of texture coordinates.

    -

    <glm/gtx/wrap.hpp> need to be included to use these functionalities.

    +

    Add extra transformation matrices.

    +

    <glm/gtx/transform2.hpp> need to be included to use these functionalities.

    Function Documentation

    - +
    - + - - + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::clamp GLM_FUNC_DECL tmat3x3<T, P> glm::proj2D (genType const & Texcoord)const tmat3x3< T, P > & m,
    const tvec3< T, P > & normal 
    )
    -

    Simulate GL_CLAMP OpenGL wrap mode.

    -
    See Also
    GLM_GTX_wrap extension.
    +

    Build planar projection matrix along normal axis.

    +

    From GLM_GTX_transform2 extension.

    - +
    - + - - + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::mirrorRepeat GLM_FUNC_DECL tmat4x4<T, P> glm::proj3D (genType const & Texcoord)const tmat4x4< T, P > & m,
    const tvec3< T, P > & normal 
    )
    -

    Simulate GL_MIRROR_REPEAT OpenGL wrap mode.

    -
    See Also
    GLM_GTX_wrap extension.
    +

    Build planar projection matrix along normal axis.

    +

    From GLM_GTX_transform2 extension.

    - +
    - + - - + + + + + + + + + + + +
    GLM_FUNC_DECL genType glm::repeat GLM_FUNC_DECL tmat4x4<valType, P> glm::scaleBias (genType const & Texcoord)valType scale,
    valType bias 
    )
    -

    Simulate GL_REPEAT OpenGL wrap mode.

    -
    See Also
    GLM_GTX_wrap extension.
    +

    Build a scale bias matrix.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<valType, P> glm::scaleBias (tmat4x4< valType, P > const & m,
    valType scale,
    valType bias 
    )
    +
    + +

    Build a scale bias matrix.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat3x3<T, P> glm::shearX2D (tmat3x3< T, P > const & m,
    y 
    )
    +
    + +

    Transforms a matrix with a shearing on X axis.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::shearX3D (const tmat4x4< T, P > & m,
    y,
    z 
    )
    +
    + +

    Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat3x3<T, P> glm::shearY2D (tmat3x3< T, P > const & m,
    x 
    )
    +
    + +

    Transforms a matrix with a shearing on Y axis.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::shearY3D (const tmat4x4< T, P > & m,
    x,
    z 
    )
    +
    + +

    Transforms a matrix with a shearing on Y axis.

    +

    From GLM_GTX_transform2 extension.

    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL tmat4x4<T, P> glm::shearZ3D (const tmat4x4< T, P > & m,
    x,
    y 
    )
    +
    + +

    Transforms a matrix with a shearing on Z axis.

    +

    From GLM_GTX_transform2 extension.

    @@ -123,7 +366,7 @@ Functions diff --git a/doc/api/a00237.html b/doc/api/a00237.html index e0f5817f..a362ef20 100644 --- a/doc/api/a00237.html +++ b/doc/api/a00237.html @@ -3,8 +3,8 @@ - -GLM: GLM_VIRTREV_xstream: xml like output + +0.9.6: GLM_GTX_type_aligned @@ -16,9 +16,9 @@ + @@ -26,30 +26,7786 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    +
    -
    GLM_VIRTREV_xstream: xml like output
    +
    GLM_GTX_type_aligned
    -

    Streaming vector and matrix in a xml way.

    -

    Include <glm/virtrev/xstream.hpp> for this functionality.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

     GLM_ALIGNED_TYPEDEF (lowp_int8, aligned_lowp_int8, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_int16, aligned_lowp_int16, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_int32, aligned_lowp_int32, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_int64, aligned_lowp_int64, 8)
     
     GLM_ALIGNED_TYPEDEF (lowp_int8_t, aligned_lowp_int8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_int16_t, aligned_lowp_int16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_int32_t, aligned_lowp_int32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_int64_t, aligned_lowp_int64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (lowp_i8, aligned_lowp_i8, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_i16, aligned_lowp_i16, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_i32, aligned_lowp_i32, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_i64, aligned_lowp_i64, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_int8, aligned_mediump_int8, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_int16, aligned_mediump_int16, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_int32, aligned_mediump_int32, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_int64, aligned_mediump_int64, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_int8_t, aligned_mediump_int8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_int16_t, aligned_mediump_int16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_int32_t, aligned_mediump_int32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_int64_t, aligned_mediump_int64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_i8, aligned_mediump_i8, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_i16, aligned_mediump_i16, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_i32, aligned_mediump_i32, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_i64, aligned_mediump_i64, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_int8, aligned_highp_int8, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_int16, aligned_highp_int16, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_int32, aligned_highp_int32, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_int64, aligned_highp_int64, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_int8_t, aligned_highp_int8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_int16_t, aligned_highp_int16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_int32_t, aligned_highp_int32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_int64_t, aligned_highp_int64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_i8, aligned_highp_i8, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_i16, aligned_highp_i16, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_i32, aligned_highp_i32, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_i64, aligned_highp_i64, 8)
     
     GLM_ALIGNED_TYPEDEF (int8, aligned_int8, 1)
     
     GLM_ALIGNED_TYPEDEF (int16, aligned_int16, 2)
     
     GLM_ALIGNED_TYPEDEF (int32, aligned_int32, 4)
     
     GLM_ALIGNED_TYPEDEF (int64, aligned_int64, 8)
     
     GLM_ALIGNED_TYPEDEF (int8_t, aligned_int8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (int16_t, aligned_int16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (int32_t, aligned_int32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (int64_t, aligned_int64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (i8, aligned_i8, 1)
     
     GLM_ALIGNED_TYPEDEF (i16, aligned_i16, 2)
     
     GLM_ALIGNED_TYPEDEF (i32, aligned_i32, 4)
     
     GLM_ALIGNED_TYPEDEF (i64, aligned_i64, 8)
     
     GLM_ALIGNED_TYPEDEF (ivec1, aligned_ivec1, 4)
     
     GLM_ALIGNED_TYPEDEF (ivec2, aligned_ivec2, 8)
     
     GLM_ALIGNED_TYPEDEF (ivec3, aligned_ivec3, 16)
     
     GLM_ALIGNED_TYPEDEF (ivec4, aligned_ivec4, 16)
     
     GLM_ALIGNED_TYPEDEF (i8vec1, aligned_i8vec1, 1)
     
     GLM_ALIGNED_TYPEDEF (i8vec2, aligned_i8vec2, 2)
     
     GLM_ALIGNED_TYPEDEF (i8vec3, aligned_i8vec3, 4)
     
     GLM_ALIGNED_TYPEDEF (i8vec4, aligned_i8vec4, 4)
     
     GLM_ALIGNED_TYPEDEF (i16vec1, aligned_i16vec1, 2)
     
     GLM_ALIGNED_TYPEDEF (i16vec2, aligned_i16vec2, 4)
     
     GLM_ALIGNED_TYPEDEF (i16vec3, aligned_i16vec3, 8)
     
     GLM_ALIGNED_TYPEDEF (i16vec4, aligned_i16vec4, 8)
     
     GLM_ALIGNED_TYPEDEF (i32vec1, aligned_i32vec1, 4)
     
     GLM_ALIGNED_TYPEDEF (i32vec2, aligned_i32vec2, 8)
     
     GLM_ALIGNED_TYPEDEF (i32vec3, aligned_i32vec3, 16)
     
     GLM_ALIGNED_TYPEDEF (i32vec4, aligned_i32vec4, 16)
     
     GLM_ALIGNED_TYPEDEF (i64vec1, aligned_i64vec1, 8)
     
     GLM_ALIGNED_TYPEDEF (i64vec2, aligned_i64vec2, 16)
     
     GLM_ALIGNED_TYPEDEF (i64vec3, aligned_i64vec3, 32)
     
     GLM_ALIGNED_TYPEDEF (i64vec4, aligned_i64vec4, 32)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint8, aligned_lowp_uint8, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint16, aligned_lowp_uint16, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint32, aligned_lowp_uint32, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint64, aligned_lowp_uint64, 8)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint8_t, aligned_lowp_uint8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint16_t, aligned_lowp_uint16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint32_t, aligned_lowp_uint32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_uint64_t, aligned_lowp_uint64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (lowp_u8, aligned_lowp_u8, 1)
     
     GLM_ALIGNED_TYPEDEF (lowp_u16, aligned_lowp_u16, 2)
     
     GLM_ALIGNED_TYPEDEF (lowp_u32, aligned_lowp_u32, 4)
     
     GLM_ALIGNED_TYPEDEF (lowp_u64, aligned_lowp_u64, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint8, aligned_mediump_uint8, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint16, aligned_mediump_uint16, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint32, aligned_mediump_uint32, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint64, aligned_mediump_uint64, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint8_t, aligned_mediump_uint8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint16_t, aligned_mediump_uint16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint32_t, aligned_mediump_uint32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_uint64_t, aligned_mediump_uint64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (mediump_u8, aligned_mediump_u8, 1)
     
     GLM_ALIGNED_TYPEDEF (mediump_u16, aligned_mediump_u16, 2)
     
     GLM_ALIGNED_TYPEDEF (mediump_u32, aligned_mediump_u32, 4)
     
     GLM_ALIGNED_TYPEDEF (mediump_u64, aligned_mediump_u64, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_uint8, aligned_highp_uint8, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_uint16, aligned_highp_uint16, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_uint32, aligned_highp_uint32, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_uint64, aligned_highp_uint64, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_uint8_t, aligned_highp_uint8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_uint16_t, aligned_highp_uint16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_uint32_t, aligned_highp_uint32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_uint64_t, aligned_highp_uint64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (highp_u8, aligned_highp_u8, 1)
     
     GLM_ALIGNED_TYPEDEF (highp_u16, aligned_highp_u16, 2)
     
     GLM_ALIGNED_TYPEDEF (highp_u32, aligned_highp_u32, 4)
     
     GLM_ALIGNED_TYPEDEF (highp_u64, aligned_highp_u64, 8)
     
     GLM_ALIGNED_TYPEDEF (uint8, aligned_uint8, 1)
     
     GLM_ALIGNED_TYPEDEF (uint16, aligned_uint16, 2)
     
     GLM_ALIGNED_TYPEDEF (uint32, aligned_uint32, 4)
     
     GLM_ALIGNED_TYPEDEF (uint64, aligned_uint64, 8)
     
     GLM_ALIGNED_TYPEDEF (uint8_t, aligned_uint8_t, 1)
     
     GLM_ALIGNED_TYPEDEF (uint16_t, aligned_uint16_t, 2)
     
     GLM_ALIGNED_TYPEDEF (uint32_t, aligned_uint32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (uint64_t, aligned_uint64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (u8, aligned_u8, 1)
     
     GLM_ALIGNED_TYPEDEF (u16, aligned_u16, 2)
     
     GLM_ALIGNED_TYPEDEF (u32, aligned_u32, 4)
     
     GLM_ALIGNED_TYPEDEF (u64, aligned_u64, 8)
     
     GLM_ALIGNED_TYPEDEF (uvec1, aligned_uvec1, 4)
     
     GLM_ALIGNED_TYPEDEF (uvec2, aligned_uvec2, 8)
     
     GLM_ALIGNED_TYPEDEF (uvec3, aligned_uvec3, 16)
     
     GLM_ALIGNED_TYPEDEF (uvec4, aligned_uvec4, 16)
     
     GLM_ALIGNED_TYPEDEF (u8vec1, aligned_u8vec1, 1)
     
     GLM_ALIGNED_TYPEDEF (u8vec2, aligned_u8vec2, 2)
     
     GLM_ALIGNED_TYPEDEF (u8vec3, aligned_u8vec3, 4)
     
     GLM_ALIGNED_TYPEDEF (u8vec4, aligned_u8vec4, 4)
     
     GLM_ALIGNED_TYPEDEF (u16vec1, aligned_u16vec1, 2)
     
     GLM_ALIGNED_TYPEDEF (u16vec2, aligned_u16vec2, 4)
     
     GLM_ALIGNED_TYPEDEF (u16vec3, aligned_u16vec3, 8)
     
     GLM_ALIGNED_TYPEDEF (u16vec4, aligned_u16vec4, 8)
     
     GLM_ALIGNED_TYPEDEF (u32vec1, aligned_u32vec1, 4)
     
     GLM_ALIGNED_TYPEDEF (u32vec2, aligned_u32vec2, 8)
     
     GLM_ALIGNED_TYPEDEF (u32vec3, aligned_u32vec3, 16)
     
     GLM_ALIGNED_TYPEDEF (u32vec4, aligned_u32vec4, 16)
     
     GLM_ALIGNED_TYPEDEF (u64vec1, aligned_u64vec1, 8)
     
     GLM_ALIGNED_TYPEDEF (u64vec2, aligned_u64vec2, 16)
     
     GLM_ALIGNED_TYPEDEF (u64vec3, aligned_u64vec3, 32)
     
     GLM_ALIGNED_TYPEDEF (u64vec4, aligned_u64vec4, 32)
     
     GLM_ALIGNED_TYPEDEF (float32, aligned_float32, 4)
     
     GLM_ALIGNED_TYPEDEF (float64, aligned_float64, 8)
     
     GLM_ALIGNED_TYPEDEF (float32_t, aligned_float32_t, 4)
     
     GLM_ALIGNED_TYPEDEF (float64_t, aligned_float64_t, 8)
     
     GLM_ALIGNED_TYPEDEF (float32, aligned_f32, 4)
     
     GLM_ALIGNED_TYPEDEF (float64, aligned_f64, 8)
     
     GLM_ALIGNED_TYPEDEF (vec1, aligned_vec1, 4)
     
     GLM_ALIGNED_TYPEDEF (vec2, aligned_vec2, 8)
     
     GLM_ALIGNED_TYPEDEF (vec3, aligned_vec3, 16)
     
     GLM_ALIGNED_TYPEDEF (vec4, aligned_vec4, 16)
     
     GLM_ALIGNED_TYPEDEF (fvec1, aligned_fvec1, 4)
     
     GLM_ALIGNED_TYPEDEF (fvec2, aligned_fvec2, 8)
     
     GLM_ALIGNED_TYPEDEF (fvec3, aligned_fvec3, 16)
     
     GLM_ALIGNED_TYPEDEF (fvec4, aligned_fvec4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32vec1, aligned_f32vec1, 4)
     
     GLM_ALIGNED_TYPEDEF (f32vec2, aligned_f32vec2, 8)
     
     GLM_ALIGNED_TYPEDEF (f32vec3, aligned_f32vec3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32vec4, aligned_f32vec4, 16)
     
     GLM_ALIGNED_TYPEDEF (dvec1, aligned_dvec1, 8)
     
     GLM_ALIGNED_TYPEDEF (dvec2, aligned_dvec2, 16)
     
     GLM_ALIGNED_TYPEDEF (dvec3, aligned_dvec3, 32)
     
     GLM_ALIGNED_TYPEDEF (dvec4, aligned_dvec4, 32)
     
     GLM_ALIGNED_TYPEDEF (f64vec1, aligned_f64vec1, 8)
     
     GLM_ALIGNED_TYPEDEF (f64vec2, aligned_f64vec2, 16)
     
     GLM_ALIGNED_TYPEDEF (f64vec3, aligned_f64vec3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64vec4, aligned_f64vec4, 32)
     
     GLM_ALIGNED_TYPEDEF (mat2, aligned_mat2, 16)
     
     GLM_ALIGNED_TYPEDEF (mat3, aligned_mat3, 16)
     
     GLM_ALIGNED_TYPEDEF (mat4, aligned_mat4, 16)
     
     GLM_ALIGNED_TYPEDEF (mat2x2, aligned_mat2x2, 16)
     
     GLM_ALIGNED_TYPEDEF (mat3x3, aligned_mat3x3, 16)
     
     GLM_ALIGNED_TYPEDEF (mat4x4, aligned_mat4x4, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat2x2, aligned_fmat2, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat3x3, aligned_fmat3, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat4x4, aligned_fmat4, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat2x2, aligned_fmat2x2, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat2x3, aligned_fmat2x3, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat2x4, aligned_fmat2x4, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat3x2, aligned_fmat3x2, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat3x3, aligned_fmat3x3, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat3x4, aligned_fmat3x4, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat4x2, aligned_fmat4x2, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat4x3, aligned_fmat4x3, 16)
     
     GLM_ALIGNED_TYPEDEF (fmat4x4, aligned_fmat4x4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat2x2, aligned_f32mat2, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat3x3, aligned_f32mat3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat4x4, aligned_f32mat4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat2x2, aligned_f32mat2x2, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat2x3, aligned_f32mat2x3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat2x4, aligned_f32mat2x4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat3x2, aligned_f32mat3x2, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat3x3, aligned_f32mat3x3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat3x4, aligned_f32mat3x4, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat4x2, aligned_f32mat4x2, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat4x3, aligned_f32mat4x3, 16)
     
     GLM_ALIGNED_TYPEDEF (f32mat4x4, aligned_f32mat4x4, 16)
     
     GLM_ALIGNED_TYPEDEF (f64mat2x2, aligned_f64mat2, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat3x3, aligned_f64mat3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat4x4, aligned_f64mat4, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat2x2, aligned_f64mat2x2, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat2x3, aligned_f64mat2x3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat2x4, aligned_f64mat2x4, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat3x2, aligned_f64mat3x2, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat3x3, aligned_f64mat3x3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat3x4, aligned_f64mat3x4, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat4x2, aligned_f64mat4x2, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat4x3, aligned_f64mat4x3, 32)
     
     GLM_ALIGNED_TYPEDEF (f64mat4x4, aligned_f64mat4x4, 32)
     
     GLM_ALIGNED_TYPEDEF (quat, aligned_quat, 16)
     
     GLM_ALIGNED_TYPEDEF (fquat, aligned_fquat, 16)
     
     GLM_ALIGNED_TYPEDEF (dquat, aligned_dquat, 32)
     
     GLM_ALIGNED_TYPEDEF (f32quat, aligned_f32quat, 16)
     
     GLM_ALIGNED_TYPEDEF (f64quat, aligned_f64quat, 32)
     
    +

    Detailed Description

    +

    Defines aligned types.

    +

    Precision types defines aligned types.

    +

    <glm/gtx/type_aligned.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_int8 ,
    aligned_lowp_int8 ,
     
    )
    +
    + +

    Low precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_int16 ,
    aligned_lowp_int16 ,
     
    )
    +
    + +

    Low precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_int32 ,
    aligned_lowp_int32 ,
     
    )
    +
    + +

    Low precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_int64 ,
    aligned_lowp_int64 ,
     
    )
    +
    + +

    Low precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_int8_t ,
    aligned_lowp_int8_t ,
     
    )
    +
    + +

    Low precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_int16_t ,
    aligned_lowp_int16_t ,
     
    )
    +
    + +

    Low precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_int32_t ,
    aligned_lowp_int32_t ,
     
    )
    +
    + +

    Low precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_int64_t ,
    aligned_lowp_int64_t ,
     
    )
    +
    + +

    Low precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_i8 ,
    aligned_lowp_i8 ,
     
    )
    +
    + +

    Low precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_i16 ,
    aligned_lowp_i16 ,
     
    )
    +
    + +

    Low precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_i32 ,
    aligned_lowp_i32 ,
     
    )
    +
    + +

    Low precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_i64 ,
    aligned_lowp_i64 ,
     
    )
    +
    + +

    Low precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_int8 ,
    aligned_mediump_int8 ,
     
    )
    +
    + +

    Medium precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_int16 ,
    aligned_mediump_int16 ,
     
    )
    +
    + +

    Medium precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_int32 ,
    aligned_mediump_int32 ,
     
    )
    +
    + +

    Medium precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_int64 ,
    aligned_mediump_int64 ,
     
    )
    +
    + +

    Medium precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_int8_t ,
    aligned_mediump_int8_t ,
     
    )
    +
    + +

    Medium precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_int16_t ,
    aligned_mediump_int16_t ,
     
    )
    +
    + +

    Medium precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_int32_t ,
    aligned_mediump_int32_t ,
     
    )
    +
    + +

    Medium precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_int64_t ,
    aligned_mediump_int64_t ,
     
    )
    +
    + +

    Medium precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_i8 ,
    aligned_mediump_i8 ,
     
    )
    +
    + +

    Medium precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_i16 ,
    aligned_mediump_i16 ,
     
    )
    +
    + +

    Medium precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_i32 ,
    aligned_mediump_i32 ,
     
    )
    +
    + +

    Medium precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_i64 ,
    aligned_mediump_i64 ,
     
    )
    +
    + +

    Medium precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_int8 ,
    aligned_highp_int8 ,
     
    )
    +
    + +

    High precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_int16 ,
    aligned_highp_int16 ,
     
    )
    +
    + +

    High precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_int32 ,
    aligned_highp_int32 ,
     
    )
    +
    + +

    High precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_int64 ,
    aligned_highp_int64 ,
     
    )
    +
    + +

    High precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_int8_t ,
    aligned_highp_int8_t ,
     
    )
    +
    + +

    High precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_int16_t ,
    aligned_highp_int16_t ,
     
    )
    +
    + +

    High precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_int32_t ,
    aligned_highp_int32_t ,
     
    )
    +
    + +

    High precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_int64_t ,
    aligned_highp_int64_t ,
     
    )
    +
    + +

    High precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_i8 ,
    aligned_highp_i8 ,
     
    )
    +
    + +

    High precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_i16 ,
    aligned_highp_i16 ,
     
    )
    +
    + +

    High precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_i32 ,
    aligned_highp_i32 ,
     
    )
    +
    + +

    High precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_i64 ,
    aligned_highp_i64 ,
     
    )
    +
    + +

    High precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (int8 ,
    aligned_int8 ,
     
    )
    +
    + +

    Default precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (int16 ,
    aligned_int16 ,
     
    )
    +
    + +

    Default precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (int32 ,
    aligned_int32 ,
     
    )
    +
    + +

    Default precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (int64 ,
    aligned_int64 ,
     
    )
    +
    + +

    Default precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (int8_t ,
    aligned_int8_t ,
     
    )
    +
    + +

    Default precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (int16_t ,
    aligned_int16_t ,
     
    )
    +
    + +

    Default precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (int32_t ,
    aligned_int32_t ,
     
    )
    +
    + +

    Default precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (int64_t ,
    aligned_int64_t ,
     
    )
    +
    + +

    Default precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i8 ,
    aligned_i8 ,
     
    )
    +
    + +

    Default precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i16 ,
    aligned_i16 ,
     
    )
    +
    + +

    Default precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i32 ,
    aligned_i32 ,
     
    )
    +
    + +

    Default precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i64 ,
    aligned_i64 ,
     
    )
    +
    + +

    Default precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (ivec1 ,
    aligned_ivec1 ,
     
    )
    +
    + +

    Default precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (ivec2 ,
    aligned_ivec2 ,
     
    )
    +
    + +

    Default precision 32 bit signed integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (ivec3 ,
    aligned_ivec3 ,
    16  
    )
    +
    + +

    Default precision 32 bit signed integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (ivec4 ,
    aligned_ivec4 ,
    16  
    )
    +
    + +

    Default precision 32 bit signed integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i8vec1 ,
    aligned_i8vec1 ,
     
    )
    +
    + +

    Default precision 8 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i8vec2 ,
    aligned_i8vec2 ,
     
    )
    +
    + +

    Default precision 8 bit signed integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i8vec3 ,
    aligned_i8vec3 ,
     
    )
    +
    + +

    Default precision 8 bit signed integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i8vec4 ,
    aligned_i8vec4 ,
     
    )
    +
    + +

    Default precision 8 bit signed integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i16vec1 ,
    aligned_i16vec1 ,
     
    )
    +
    + +

    Default precision 16 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i16vec2 ,
    aligned_i16vec2 ,
     
    )
    +
    + +

    Default precision 16 bit signed integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i16vec3 ,
    aligned_i16vec3 ,
     
    )
    +
    + +

    Default precision 16 bit signed integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i16vec4 ,
    aligned_i16vec4 ,
     
    )
    +
    + +

    Default precision 16 bit signed integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i32vec1 ,
    aligned_i32vec1 ,
     
    )
    +
    + +

    Default precision 32 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i32vec2 ,
    aligned_i32vec2 ,
     
    )
    +
    + +

    Default precision 32 bit signed integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i32vec3 ,
    aligned_i32vec3 ,
    16  
    )
    +
    + +

    Default precision 32 bit signed integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i32vec4 ,
    aligned_i32vec4 ,
    16  
    )
    +
    + +

    Default precision 32 bit signed integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i64vec1 ,
    aligned_i64vec1 ,
     
    )
    +
    + +

    Default precision 64 bit signed integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i64vec2 ,
    aligned_i64vec2 ,
    16  
    )
    +
    + +

    Default precision 64 bit signed integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i64vec3 ,
    aligned_i64vec3 ,
    32  
    )
    +
    + +

    Default precision 64 bit signed integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (i64vec4 ,
    aligned_i64vec4 ,
    32  
    )
    +
    + +

    Default precision 64 bit signed integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_uint8 ,
    aligned_lowp_uint8 ,
     
    )
    +
    + +

    Low precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_uint16 ,
    aligned_lowp_uint16 ,
     
    )
    +
    + +

    Low precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_uint32 ,
    aligned_lowp_uint32 ,
     
    )
    +
    + +

    Low precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_uint64 ,
    aligned_lowp_uint64 ,
     
    )
    +
    + +

    Low precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_uint8_t ,
    aligned_lowp_uint8_t ,
     
    )
    +
    + +

    Low precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_uint16_t ,
    aligned_lowp_uint16_t ,
     
    )
    +
    + +

    Low precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_uint32_t ,
    aligned_lowp_uint32_t ,
     
    )
    +
    + +

    Low precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_uint64_t ,
    aligned_lowp_uint64_t ,
     
    )
    +
    + +

    Low precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_u8 ,
    aligned_lowp_u8 ,
     
    )
    +
    + +

    Low precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_u16 ,
    aligned_lowp_u16 ,
     
    )
    +
    + +

    Low precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_u32 ,
    aligned_lowp_u32 ,
     
    )
    +
    + +

    Low precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (lowp_u64 ,
    aligned_lowp_u64 ,
     
    )
    +
    + +

    Low precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_uint8 ,
    aligned_mediump_uint8 ,
     
    )
    +
    + +

    Medium precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_uint16 ,
    aligned_mediump_uint16 ,
     
    )
    +
    + +

    Medium precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_uint32 ,
    aligned_mediump_uint32 ,
     
    )
    +
    + +

    Medium precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_uint64 ,
    aligned_mediump_uint64 ,
     
    )
    +
    + +

    Medium precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_uint8_t ,
    aligned_mediump_uint8_t ,
     
    )
    +
    + +

    Medium precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_uint16_t ,
    aligned_mediump_uint16_t ,
     
    )
    +
    + +

    Medium precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_uint32_t ,
    aligned_mediump_uint32_t ,
     
    )
    +
    + +

    Medium precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_uint64_t ,
    aligned_mediump_uint64_t ,
     
    )
    +
    + +

    Medium precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_u8 ,
    aligned_mediump_u8 ,
     
    )
    +
    + +

    Medium precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_u16 ,
    aligned_mediump_u16 ,
     
    )
    +
    + +

    Medium precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_u32 ,
    aligned_mediump_u32 ,
     
    )
    +
    + +

    Medium precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mediump_u64 ,
    aligned_mediump_u64 ,
     
    )
    +
    + +

    Medium precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_uint8 ,
    aligned_highp_uint8 ,
     
    )
    +
    + +

    High precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_uint16 ,
    aligned_highp_uint16 ,
     
    )
    +
    + +

    High precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_uint32 ,
    aligned_highp_uint32 ,
     
    )
    +
    + +

    High precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_uint64 ,
    aligned_highp_uint64 ,
     
    )
    +
    + +

    High precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_uint8_t ,
    aligned_highp_uint8_t ,
     
    )
    +
    + +

    High precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_uint16_t ,
    aligned_highp_uint16_t ,
     
    )
    +
    + +

    High precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_uint32_t ,
    aligned_highp_uint32_t ,
     
    )
    +
    + +

    High precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_uint64_t ,
    aligned_highp_uint64_t ,
     
    )
    +
    + +

    High precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_u8 ,
    aligned_highp_u8 ,
     
    )
    +
    + +

    High precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_u16 ,
    aligned_highp_u16 ,
     
    )
    +
    + +

    High precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_u32 ,
    aligned_highp_u32 ,
     
    )
    +
    + +

    High precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (highp_u64 ,
    aligned_highp_u64 ,
     
    )
    +
    + +

    High precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uint8 ,
    aligned_uint8 ,
     
    )
    +
    + +

    Default precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uint16 ,
    aligned_uint16 ,
     
    )
    +
    + +

    Default precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uint32 ,
    aligned_uint32 ,
     
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uint64 ,
    aligned_uint64 ,
     
    )
    +
    + +

    Default precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uint8_t ,
    aligned_uint8_t ,
     
    )
    +
    + +

    Default precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uint16_t ,
    aligned_uint16_t ,
     
    )
    +
    + +

    Default precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uint32_t ,
    aligned_uint32_t ,
     
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uint64_t ,
    aligned_uint64_t ,
     
    )
    +
    + +

    Default precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u8 ,
    aligned_u8 ,
     
    )
    +
    + +

    Default precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u16 ,
    aligned_u16 ,
     
    )
    +
    + +

    Default precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u32 ,
    aligned_u32 ,
     
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u64 ,
    aligned_u64 ,
     
    )
    +
    + +

    Default precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uvec1 ,
    aligned_uvec1 ,
     
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uvec2 ,
    aligned_uvec2 ,
     
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uvec3 ,
    aligned_uvec3 ,
    16  
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (uvec4 ,
    aligned_uvec4 ,
    16  
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u8vec1 ,
    aligned_u8vec1 ,
     
    )
    +
    + +

    Default precision 8 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u8vec2 ,
    aligned_u8vec2 ,
     
    )
    +
    + +

    Default precision 8 bit unsigned integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u8vec3 ,
    aligned_u8vec3 ,
     
    )
    +
    + +

    Default precision 8 bit unsigned integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u8vec4 ,
    aligned_u8vec4 ,
     
    )
    +
    + +

    Default precision 8 bit unsigned integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u16vec1 ,
    aligned_u16vec1 ,
     
    )
    +
    + +

    Default precision 16 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u16vec2 ,
    aligned_u16vec2 ,
     
    )
    +
    + +

    Default precision 16 bit unsigned integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u16vec3 ,
    aligned_u16vec3 ,
     
    )
    +
    + +

    Default precision 16 bit unsigned integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u16vec4 ,
    aligned_u16vec4 ,
     
    )
    +
    + +

    Default precision 16 bit unsigned integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u32vec1 ,
    aligned_u32vec1 ,
     
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u32vec2 ,
    aligned_u32vec2 ,
     
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u32vec3 ,
    aligned_u32vec3 ,
    16  
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u32vec4 ,
    aligned_u32vec4 ,
    16  
    )
    +
    + +

    Default precision 32 bit unsigned integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u64vec1 ,
    aligned_u64vec1 ,
     
    )
    +
    + +

    Default precision 64 bit unsigned integer aligned scalar type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u64vec2 ,
    aligned_u64vec2 ,
    16  
    )
    +
    + +

    Default precision 64 bit unsigned integer aligned vector of 2 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u64vec3 ,
    aligned_u64vec3 ,
    32  
    )
    +
    + +

    Default precision 64 bit unsigned integer aligned vector of 3 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (u64vec4 ,
    aligned_u64vec4 ,
    32  
    )
    +
    + +

    Default precision 64 bit unsigned integer aligned vector of 4 components type.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (float32 ,
    aligned_float32 ,
     
    )
    +
    + +

    32 bit single-precision floating-point aligned scalar.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (float64 ,
    aligned_float64 ,
     
    )
    +
    + +

    64 bit double-precision floating-point aligned scalar.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (float32_t ,
    aligned_float32_t ,
     
    )
    +
    + +

    32 bit single-precision floating-point aligned scalar.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (float64_t ,
    aligned_float64_t ,
     
    )
    +
    + +

    64 bit double-precision floating-point aligned scalar.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (float32 ,
    aligned_f32 ,
     
    )
    +
    + +

    32 bit single-precision floating-point aligned scalar.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (float64 ,
    aligned_f64 ,
     
    )
    +
    + +

    64 bit double-precision floating-point aligned scalar.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (vec1 ,
    aligned_vec1 ,
     
    )
    +
    + +

    Single-precision floating-point aligned vector of 1 component.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (vec2 ,
    aligned_vec2 ,
     
    )
    +
    + +

    Single-precision floating-point aligned vector of 2 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (vec3 ,
    aligned_vec3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned vector of 3 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (vec4 ,
    aligned_vec4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned vector of 4 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fvec1 ,
    aligned_fvec1 ,
     
    )
    +
    + +

    Single-precision floating-point aligned vector of 1 component.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fvec2 ,
    aligned_fvec2 ,
     
    )
    +
    + +

    Single-precision floating-point aligned vector of 2 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fvec3 ,
    aligned_fvec3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned vector of 3 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fvec4 ,
    aligned_fvec4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned vector of 4 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32vec1 ,
    aligned_f32vec1 ,
     
    )
    +
    + +

    Single-precision floating-point aligned vector of 1 component.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32vec2 ,
    aligned_f32vec2 ,
     
    )
    +
    + +

    Single-precision floating-point aligned vector of 2 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32vec3 ,
    aligned_f32vec3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned vector of 3 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32vec4 ,
    aligned_f32vec4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned vector of 4 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (dvec1 ,
    aligned_dvec1 ,
     
    )
    +
    + +

    Double-precision floating-point aligned vector of 1 component.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (dvec2 ,
    aligned_dvec2 ,
    16  
    )
    +
    + +

    Double-precision floating-point aligned vector of 2 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (dvec3 ,
    aligned_dvec3 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned vector of 3 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (dvec4 ,
    aligned_dvec4 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned vector of 4 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64vec1 ,
    aligned_f64vec1 ,
     
    )
    +
    + +

    Double-precision floating-point aligned vector of 1 component.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64vec2 ,
    aligned_f64vec2 ,
    16  
    )
    +
    + +

    Double-precision floating-point aligned vector of 2 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64vec3 ,
    aligned_f64vec3 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned vector of 3 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64vec4 ,
    aligned_f64vec4 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned vector of 4 components.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mat2 ,
    aligned_mat2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 1x1 matrix.

    +
    See also
    GLM_GTX_type_aligned Single-precision floating-point aligned 2x2 matrix.
    +
    +GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mat3 ,
    aligned_mat3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mat4 ,
    aligned_mat4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mat2x2 ,
    aligned_mat2x2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 1x1 matrix.

    +
    See also
    GLM_GTX_type_aligned Single-precision floating-point aligned 2x2 matrix.
    +
    +GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mat3x3 ,
    aligned_mat3x3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (mat4x4 ,
    aligned_mat4x4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat2x2 ,
    aligned_fmat2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 1x1 matrix.

    +
    See also
    GLM_GTX_type_aligned Single-precision floating-point aligned 2x2 matrix.
    +
    +GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat3x3 ,
    aligned_fmat3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat4x4 ,
    aligned_fmat4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat2x2 ,
    aligned_fmat2x2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 1x1 matrix.

    +
    See also
    GLM_GTX_type_aligned Single-precision floating-point aligned 2x2 matrix.
    +
    +GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat2x3 ,
    aligned_fmat2x3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 2x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat2x4 ,
    aligned_fmat2x4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 2x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat3x2 ,
    aligned_fmat3x2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x2 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat3x3 ,
    aligned_fmat3x3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat3x4 ,
    aligned_fmat3x4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat4x2 ,
    aligned_fmat4x2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x2 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat4x3 ,
    aligned_fmat4x3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fmat4x4 ,
    aligned_fmat4x4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat2x2 ,
    aligned_f32mat2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 1x1 matrix.

    +
    See also
    GLM_GTX_type_aligned Single-precision floating-point aligned 2x2 matrix.
    +
    +GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat3x3 ,
    aligned_f32mat3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat4x4 ,
    aligned_f32mat4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat2x2 ,
    aligned_f32mat2x2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 1x1 matrix.

    +
    See also
    GLM_GTX_type_aligned Single-precision floating-point aligned 2x2 matrix.
    +
    +GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat2x3 ,
    aligned_f32mat2x3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 2x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat2x4 ,
    aligned_f32mat2x4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 2x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat3x2 ,
    aligned_f32mat3x2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x2 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat3x3 ,
    aligned_f32mat3x3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat3x4 ,
    aligned_f32mat3x4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 3x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat4x2 ,
    aligned_f32mat4x2 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x2 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat4x3 ,
    aligned_f32mat4x3 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32mat4x4 ,
    aligned_f32mat4x4 ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned 4x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat2x2 ,
    aligned_f64mat2 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 1x1 matrix.

    +
    See also
    GLM_GTX_type_aligned Double-precision floating-point aligned 2x2 matrix.
    +
    +GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat3x3 ,
    aligned_f64mat3 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 3x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat4x4 ,
    aligned_f64mat4 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 4x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat2x2 ,
    aligned_f64mat2x2 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 1x1 matrix.

    +
    See also
    GLM_GTX_type_aligned Double-precision floating-point aligned 2x2 matrix.
    +
    +GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat2x3 ,
    aligned_f64mat2x3 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 2x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat2x4 ,
    aligned_f64mat2x4 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 2x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat3x2 ,
    aligned_f64mat3x2 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 3x2 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat3x3 ,
    aligned_f64mat3x3 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 3x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat3x4 ,
    aligned_f64mat3x4 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 3x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat4x2 ,
    aligned_f64mat4x2 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 4x2 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat4x3 ,
    aligned_f64mat4x3 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 4x3 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64mat4x4 ,
    aligned_f64mat4x4 ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned 4x4 matrix.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (quat ,
    aligned_quat ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned quaternion.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (fquat ,
    aligned_fquat ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned quaternion.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (dquat ,
    aligned_dquat ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned quaternion.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f32quat ,
    aligned_f32quat ,
    16  
    )
    +
    + +

    Single-precision floating-point aligned quaternion.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    glm::GLM_ALIGNED_TYPEDEF (f64quat ,
    aligned_f64quat ,
    32  
    )
    +
    + +

    Double-precision floating-point aligned quaternion.

    +
    See also
    GLM_GTX_type_aligned
    + +
    +
    diff --git a/doc/api/a00238.html b/doc/api/a00238.html index 6145b10b..ef79d819 100644 --- a/doc/api/a00238.html +++ b/doc/api/a00238.html @@ -3,8 +3,8 @@ - -GLM: Gtx_scalar_relational + +0.9.6: GLM_GTX_vector_angle @@ -16,9 +16,9 @@ + @@ -26,28 +26,138 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    +
    -
    Gtx_scalar_relational
    +
    GLM_GTX_vector_angle
    + + + + + + + + + + + +

    +Functions

    template<typename vecType >
    GLM_FUNC_DECL vecType::value_type angle (vecType const &x, vecType const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T orientedAngle (tvec2< T, P > const &x, tvec2< T, P > const &y)
     
    template<typename T , precision P>
    GLM_FUNC_DECL T orientedAngle (tvec3< T, P > const &x, tvec3< T, P > const &y, tvec3< T, P > const &ref)
     
    +

    Detailed Description

    +

    Compute angle between vectors.

    +

    <glm/gtx/vector_angle.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType::value_type glm::angle (vecType const & x,
    vecType const & y 
    )
    +
    + +

    Returns the absolute angle between two vectors Parameters need to be normalized.

    +
    See also
    GLM_GTX_vector_angle extension
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::orientedAngle (tvec2< T, P > const & x,
    tvec2< T, P > const & y 
    )
    +
    + +

    Returns the oriented angle between two 2d vectors Parameters need to be normalized.

    +
    See also
    GLM_GTX_vector_angle extension.
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL T glm::orientedAngle (tvec3< T, P > const & x,
    tvec3< T, P > const & y,
    tvec3< T, P > const & ref 
    )
    +
    + +

    Returns the oriented angle between two 3d vectors based from a reference axis.

    +

    Parameters need to be normalized.

    See also
    GLM_GTX_vector_angle extension.
    + +
    +
    diff --git a/doc/api/a00239.html b/doc/api/a00239.html new file mode 100644 index 00000000..accee88b --- /dev/null +++ b/doc/api/a00239.html @@ -0,0 +1,271 @@ + + + + + + +0.9.6: GLM_GTX_vector_query + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + +
    +
    + +
    +
    GLM_GTX_vector_query
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool areCollinear (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool areOrthogonal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool areOrthonormal (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL vecType< bool, P > isCompNull (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool isNormalized (vecType< T, P > const &v, T const &epsilon)
     
    template<typename T , precision P, template< typename, precision > class vecType>
    GLM_FUNC_DECL bool isNull (vecType< T, P > const &v, T const &epsilon)
     
    +

    Detailed Description

    +

    Query informations of vector types.

    +

    <glm/gtx/vector_query.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL bool glm::areCollinear (vecType< T, P > const & v0,
    vecType< T, P > const & v1,
    T const & epsilon 
    )
    +
    + +

    Check whether two vectors are collinears.

    +
    See also
    GLM_GTX_vector_query extensions.
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL bool glm::areOrthogonal (vecType< T, P > const & v0,
    vecType< T, P > const & v1,
    T const & epsilon 
    )
    +
    + +

    Check whether two vectors are orthogonals.

    +
    See also
    GLM_GTX_vector_query extensions.
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL bool glm::areOrthonormal (vecType< T, P > const & v0,
    vecType< T, P > const & v1,
    T const & epsilon 
    )
    +
    + +

    Check whether two vectors are orthonormal.

    +
    See also
    GLM_GTX_vector_query extensions.
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL vecType<bool, P> glm::isCompNull (vecType< T, P > const & v,
    T const & epsilon 
    )
    +
    + +

    Check whether a each component of a vector is null.

    +
    See also
    GLM_GTX_vector_query extensions.
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL bool glm::isNormalized (vecType< T, P > const & v,
    T const & epsilon 
    )
    +
    + +

    Check whether a vector is normalized.

    +
    See also
    GLM_GTX_vector_query extensions.
    + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLM_FUNC_DECL bool glm::isNull (vecType< T, P > const & v,
    T const & epsilon 
    )
    +
    + +

    Check whether a vector is null.

    +
    See also
    GLM_GTX_vector_query extensions.
    + +
    +
    +
    + + + + diff --git a/doc/api/a00240.html b/doc/api/a00240.html index 9d09b446..65428c18 100644 --- a/doc/api/a00240.html +++ b/doc/api/a00240.html @@ -3,8 +3,8 @@ - -GLM: Todo List + +0.9.6: GLM_GTX_wrap @@ -16,9 +16,9 @@ + @@ -26,38 +26,102 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    +
    -
    Todo List
    +
    -
    -
    Member glm::bitCount (genIUType< T > const &Value)
    -
    Clarify the declaration to specify that scalars are suported.
    -
    Member glm::epsilon ()
    -
    Implement epsilon for half-precision floating point type.
    -
    Member glm::findLSB (genIUType< T > const &Value)
    -
    Clarify the declaration to specify that scalars are suported.
    -
    Member glm::findMSB (genIUType< T > const &Value)
    -
    Clarify the declaration to specify that scalars are suported.
    -
    -
    + + + + + + + + + + + +

    +Functions

    template<typename genType >
    GLM_FUNC_DECL genType clamp (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType mirrorRepeat (genType const &Texcoord)
     
    template<typename genType >
    GLM_FUNC_DECL genType repeat (genType const &Texcoord)
     
    +

    Detailed Description

    +

    Wrapping mode of texture coordinates.

    +

    <glm/gtx/wrap.hpp> need to be included to use these functionalities.

    +

    Function Documentation

    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::clamp (genType const & Texcoord)
    +
    + +

    Simulate GL_CLAMP OpenGL wrap mode.

    +
    See also
    GLM_GTX_wrap extension.
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::mirrorRepeat (genType const & Texcoord)
    +
    + +

    Simulate GL_MIRROR_REPEAT OpenGL wrap mode.

    +
    See also
    GLM_GTX_wrap extension.
    + +
    +
    + +
    +
    + + + + + + + + +
    GLM_FUNC_DECL genType glm::repeat (genType const & Texcoord)
    +
    + +

    Simulate GL_REPEAT OpenGL wrap mode.

    +
    See also
    GLM_GTX_wrap extension.
    + +
    +
    + diff --git a/doc/api/dir_04e4a28b8d58785d7769817294d623f5.html b/doc/api/dir_04e4a28b8d58785d7769817294d623f5.html deleted file mode 100644 index ba4be446..00000000 --- a/doc/api/dir_04e4a28b8d58785d7769817294d623f5.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - -GLM: virtrev Directory Reference - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - -
    -
    -
    -
    virtrev Directory Reference
    -
    -
    - - - - -

    -Files

    file  xstream.hpp [code]
     
    -
    - - - - diff --git a/doc/api/dir_968fb7988749a6351e7b3d0c1783dec4.html b/doc/api/dir_0c6652232a835be54bedd6cfd7502504.html similarity index 71% rename from doc/api/dir_968fb7988749a6351e7b3d0c1783dec4.html rename to doc/api/dir_0c6652232a835be54bedd6cfd7502504.html index af15b98c..731c6f64 100644 --- a/doc/api/dir_968fb7988749a6351e7b3d0c1783dec4.html +++ b/doc/api/dir_0c6652232a835be54bedd6cfd7502504.html @@ -3,8 +3,8 @@ - -GLM: Groove Directory Reference + +0.9.6: G-Truc Directory Reference @@ -16,9 +16,9 @@ + @@ -26,30 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    Groove Directory Reference
    +
    G-Truc Directory Reference
    - +

    Directories

    directory  Documents
    directory  glm
     
    @@ -57,7 +55,7 @@ Directories diff --git a/doc/api/dir_8ceffd4ee35c3518d4e8bdc7e638efe8.html b/doc/api/dir_153b03dd71a7bff437c38ec53cb2e014.html similarity index 74% rename from doc/api/dir_8ceffd4ee35c3518d4e8bdc7e638efe8.html rename to doc/api/dir_153b03dd71a7bff437c38ec53cb2e014.html index f8528c9f..23cc25e9 100644 --- a/doc/api/dir_8ceffd4ee35c3518d4e8bdc7e638efe8.html +++ b/doc/api/dir_153b03dd71a7bff437c38ec53cb2e014.html @@ -3,8 +3,8 @@ - -GLM: Users Directory Reference + +0.9.6: Source Directory Reference @@ -16,9 +16,9 @@ + @@ -26,30 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    Users Directory Reference
    +
    Source Directory Reference
    - +

    Directories

    directory  Groove
    directory  G-Truc
     
    @@ -57,7 +55,7 @@ Directories diff --git a/doc/api/dir_e50778361fd4ab4de52181ed9eb2b726.html b/doc/api/dir_5cf96241cdcf6779b80e104875f9716f.html similarity index 56% rename from doc/api/dir_e50778361fd4ab4de52181ed9eb2b726.html rename to doc/api/dir_5cf96241cdcf6779b80e104875f9716f.html index 985b0ce6..35f81cd3 100644 --- a/doc/api/dir_e50778361fd4ab4de52181ed9eb2b726.html +++ b/doc/api/dir_5cf96241cdcf6779b80e104875f9716f.html @@ -3,8 +3,8 @@ - -GLM: glm Directory Reference + +0.9.6: glm Directory Reference @@ -16,9 +16,9 @@ + @@ -26,19 +26,17 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    @@ -49,62 +47,60 @@ - + - + - - - +

    Directories

    directory  detail
    directory  detail
     
    directory  gtc
    directory  gtc
     
    directory  gtx
     
    directory  virtrev
    directory  gtx
     
    - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

    Files

    file  common.hpp [code]
    file  common.hpp [code]
     
    file  exponential.hpp [code]
    file  exponential.hpp [code]
     
    file  ext.hpp [code]
    file  ext.hpp [code]
     
    file  fwd.hpp [code]
    file  fwd.hpp [code]
     
    file  geometric.hpp [code]
    file  geometric.hpp [code]
     
    file  glm.hpp [code]
    file  glm.hpp [code]
     
    file  integer.hpp [code]
    file  integer.hpp [code]
     
    file  mat2x2.hpp [code]
    file  mat2x2.hpp [code]
     
    file  mat2x3.hpp [code]
    file  mat2x3.hpp [code]
     
    file  mat2x4.hpp [code]
    file  mat2x4.hpp [code]
     
    file  mat3x2.hpp [code]
    file  mat3x2.hpp [code]
     
    file  mat3x3.hpp [code]
    file  mat3x3.hpp [code]
     
    file  mat3x4.hpp [code]
    file  mat3x4.hpp [code]
     
    file  mat4x2.hpp [code]
    file  mat4x2.hpp [code]
     
    file  mat4x3.hpp [code]
    file  mat4x3.hpp [code]
     
    file  mat4x4.hpp [code]
    file  mat4x4.hpp [code]
     
    file  matrix.hpp [code]
    file  matrix.hpp [code]
     
    file  packing.hpp [code]
    file  packing.hpp [code]
     
    file  trigonometric.hpp [code]
    file  trigonometric.hpp [code]
     
    file  vec2.hpp [code]
    file  vec2.hpp [code]
     
    file  vec3.hpp [code]
    file  vec3.hpp [code]
     
    file  vec4.hpp [code]
    file  vec4.hpp [code]
     
    file  vector_relational.hpp [code]
    file  vector_relational.hpp [code]
     
    @@ -112,7 +108,7 @@ Files diff --git a/doc/api/dir_a8d99eddac27b2368ab5252ce80ded11.html b/doc/api/dir_5d3642ea3c7f2dae4a957f2cf472c9ae.html similarity index 55% rename from doc/api/dir_a8d99eddac27b2368ab5252ce80ded11.html rename to doc/api/dir_5d3642ea3c7f2dae4a957f2cf472c9ae.html index 5e24055d..bb8f35aa 100644 --- a/doc/api/dir_a8d99eddac27b2368ab5252ce80ded11.html +++ b/doc/api/dir_5d3642ea3c7f2dae4a957f2cf472c9ae.html @@ -3,8 +3,8 @@ - -GLM: gtx Directory Reference + +0.9.6: gtx Directory Reference @@ -16,9 +16,9 @@ + @@ -26,19 +26,17 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    @@ -49,129 +47,123 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - +

    Files

    file  associated_min_max.hpp [code]
    file  associated_min_max.hpp [code]
     
    file  bit.hpp [code]
    file  bit.hpp [code]
     
    file  closest_point.hpp [code]
    file  closest_point.hpp [code]
     
    file  color_space.hpp [code]
    file  color_space.hpp [code]
     
    file  color_space_YCoCg.hpp [code]
    file  color_space_YCoCg.hpp [code]
     
    file  compatibility.hpp [code]
    file  gtx/common.hpp [code]
     
    file  component_wise.hpp [code]
    file  compatibility.hpp [code]
     
    file  gtx/constants.hpp [code]
    file  component_wise.hpp [code]
     
    file  dual_quaternion.hpp [code]
    file  dual_quaternion.hpp [code]
     
    file  gtx/epsilon.hpp [code]
    file  euler_angles.hpp [code]
     
    file  euler_angles.hpp [code]
    file  extend.hpp [code]
     
    file  extend.hpp [code]
    file  extented_min_max.hpp [code]
     
    file  extented_min_max.hpp [code]
    file  fast_exponential.hpp [code]
     
    file  fast_exponential.hpp [code]
    file  fast_square_root.hpp [code]
     
    file  fast_square_root.hpp [code]
    file  fast_trigonometry.hpp [code]
     
    file  fast_trigonometry.hpp [code]
    file  gradient_paint.hpp [code]
     
    file  gradient_paint.hpp [code]
    file  handed_coordinate_space.hpp [code]
     
    file  handed_coordinate_space.hpp [code]
    file  inertia.hpp [code]
     
    file  inertia.hpp [code]
    file  gtx/integer.hpp [code]
     
    file  int_10_10_10_2.hpp [code]
    file  intersect.hpp [code]
     
    file  gtx/integer.hpp [code]
    file  io.hpp [code]
     
    file  intersect.hpp [code]
    file  log_base.hpp [code]
     
    file  io.hpp [code]
    file  matrix_cross_product.hpp [code]
     
    file  log_base.hpp [code]
    file  matrix_decompose.hpp [code]
     
    file  matrix_cross_product.hpp [code]
    file  matrix_interpolation.hpp [code]
     
    file  matrix_interpolation.hpp [code]
    file  matrix_major_storage.hpp [code]
     
    file  matrix_major_storage.hpp [code]
    file  matrix_operation.hpp [code]
     
    file  matrix_operation.hpp [code]
    file  matrix_query.hpp [code]
     
    file  matrix_query.hpp [code]
    file  matrix_transform_2d.hpp [code]
     
    file  mixed_product.hpp [code]
    file  mixed_product.hpp [code]
     
    file  multiple.hpp [code]
    file  multiple.hpp [code]
     
    file  gtx/noise.hpp [code]
    file  norm.hpp [code]
     
    file  norm.hpp [code]
    file  normal.hpp [code]
     
    file  normal.hpp [code]
    file  normalize_dot.hpp [code]
     
    file  normalize_dot.hpp [code]
    file  number_precision.hpp [code]
     
    file  number_precision.hpp [code]
    file  optimum_pow.hpp [code]
     
    file  optimum_pow.hpp [code]
    file  orthonormalize.hpp [code]
     
    file  orthonormalize.hpp [code]
    file  perpendicular.hpp [code]
     
    file  perpendicular.hpp [code]
    file  polar_coordinates.hpp [code]
     
    file  polar_coordinates.hpp [code]
    file  projection.hpp [code]
     
    file  projection.hpp [code]
    file  gtx/quaternion.hpp [code]
     
    file  gtx/quaternion.hpp [code]
    file  range.hpp [code]
     
    file  gtx/random.hpp [code]
    file  raw_data.hpp [code]
     
    file  raw_data.hpp [code]
    file  rotate_normalized_axis.hpp [code]
     
    file  gtx/reciprocal.hpp [code]
    file  rotate_vector.hpp [code]
     
    file  rotate_normalized_axis.hpp [code]
    file  scalar_multiplication.hpp [code]
     
    file  rotate_vector.hpp [code]
    file  scalar_relational.hpp [code]
     
    file  scalar_relational.hpp [code]
    file  simd_mat4.hpp [code]
     
    file  simd_mat4.hpp [code]
    file  simd_quat.hpp [code]
     
    file  simd_quat.hpp [code]
    file  simd_vec4.hpp [code]
     
    file  simd_vec4.hpp [code]
    file  spline.hpp [code]
     
    file  spline.hpp [code]
    file  std_based_type.hpp [code]
     
    file  std_based_type.hpp [code]
    file  string_cast.hpp [code]
     
    file  string_cast.hpp [code]
    file  transform.hpp [code]
     
    file  transform.hpp [code]
    file  transform2.hpp [code]
     
    file  transform2.hpp [code]
    file  type_aligned.hpp [code]
     
    file  gtx/ulp.hpp [code]
    file  vector_angle.hpp [code]
     
    file  unsigned_int.hpp [code]
    file  vector_query.hpp [code]
     
    file  vec1.hpp [code]
     
    file  vector_angle.hpp [code]
     
    file  vector_query.hpp [code]
     
    file  wrap.hpp [code]
    file  wrap.hpp [code]
     
    @@ -179,7 +171,7 @@ Files diff --git a/doc/api/dir_6e418c18ca640a0404613de005739e2e.html b/doc/api/dir_885cc87fac2d91e269af0a5a959fa5f6.html similarity index 68% rename from doc/api/dir_6e418c18ca640a0404613de005739e2e.html rename to doc/api/dir_885cc87fac2d91e269af0a5a959fa5f6.html index 34916310..cb56305c 100644 --- a/doc/api/dir_6e418c18ca640a0404613de005739e2e.html +++ b/doc/api/dir_885cc87fac2d91e269af0a5a959fa5f6.html @@ -3,8 +3,8 @@ - -GLM: Documents Directory Reference + +0.9.6: E: Directory Reference @@ -16,9 +16,9 @@ + @@ -26,30 +26,28 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    -
    Documents Directory Reference
    +
    E: Directory Reference
    - +

    Directories

    directory  GitHub
    directory  Source
     
    @@ -57,7 +55,7 @@ Directories diff --git a/doc/api/dir_8aa733b201d3a9f98631fbccc86ae6c7.html b/doc/api/dir_8aa733b201d3a9f98631fbccc86ae6c7.html new file mode 100644 index 00000000..7bbe3074 --- /dev/null +++ b/doc/api/dir_8aa733b201d3a9f98631fbccc86ae6c7.html @@ -0,0 +1,95 @@ + + + + + + +0.9.6: gtc Directory Reference + + + + + + +
    +
    + + + + + + + +
    +
    0.9.6 +
    +
    +
    + + + + +
    +
    +
    +
    gtc Directory Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Files

    file  bitfield.hpp [code]
     
    file  constants.hpp [code]
     
    file  epsilon.hpp [code]
     
    file  gtc/integer.hpp [code]
     
    file  matrix_access.hpp [code]
     
    file  matrix_integer.hpp [code]
     
    file  matrix_inverse.hpp [code]
     
    file  matrix_transform.hpp [code]
     
    file  noise.hpp [code]
     
    file  gtc/packing.hpp [code]
     
    file  gtc/quaternion.hpp [code]
     
    file  random.hpp [code]
     
    file  reciprocal.hpp [code]
     
    file  round.hpp [code]
     
    file  type_precision.hpp [code]
     
    file  type_ptr.hpp [code]
     
    file  ulp.hpp [code]
     
    file  vec1.hpp [code]
     
    +
    + + + + diff --git a/doc/api/dir_4d1ca7e3aefdd5b86b5dba8da1c3d503.html b/doc/api/dir_9b22c367036d391e575f56d067c9855b.html similarity index 58% rename from doc/api/dir_4d1ca7e3aefdd5b86b5dba8da1c3d503.html rename to doc/api/dir_9b22c367036d391e575f56d067c9855b.html index b8233111..1e1fbfd7 100644 --- a/doc/api/dir_4d1ca7e3aefdd5b86b5dba8da1c3d503.html +++ b/doc/api/dir_9b22c367036d391e575f56d067c9855b.html @@ -3,8 +3,8 @@ - -GLM: detail Directory Reference + +0.9.6: detail Directory Reference @@ -16,9 +16,9 @@ + @@ -26,19 +26,17 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    @@ -49,95 +47,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - +

    Files

    file  _features.hpp [code]
    file  _features.hpp [code]
     
    file  _fixes.hpp [code]
    file  _fixes.hpp [code]
     
    file  _literals.hpp [code]
    file  _noise.hpp [code]
     
    file  _noise.hpp [code]
    file  _swizzle.hpp [code]
     
    file  _swizzle.hpp [code]
    file  _swizzle_func.hpp [code]
     
    file  _swizzle_func.hpp [code]
    file  _vectorize.hpp [code]
     
    file  _vectorize.hpp [code]
    file  func_common.hpp [code]
     
    file  func_common.hpp [code]
    file  func_exponential.hpp [code]
     
    file  func_exponential.hpp [code]
    file  func_geometric.hpp [code]
     
    file  func_geometric.hpp [code]
    file  func_integer.hpp [code]
     
    file  func_integer.hpp [code]
    file  func_matrix.hpp [code]
     
    file  func_matrix.hpp [code]
    file  func_noise.hpp [code]
     
    file  func_noise.hpp [code]
    file  func_packing.hpp [code]
     
    file  func_packing.hpp [code]
    file  func_trigonometric.hpp [code]
     
    file  func_trigonometric.hpp [code]
    file  func_vector_relational.hpp [code]
     
    file  func_vector_relational.hpp [code]
    file  intrinsic_common.hpp [code]
     
    file  hint.hpp [code]
    file  intrinsic_exponential.hpp [code]
     
    file  intrinsic_common.hpp [code]
    file  intrinsic_geometric.hpp [code]
     
    file  intrinsic_exponential.hpp [code]
    file  intrinsic_integer.hpp [code]
     
    file  intrinsic_geometric.hpp [code]
    file  intrinsic_matrix.hpp [code]
     
    file  intrinsic_integer.hpp [code]
    file  intrinsic_trigonometric.hpp [code]
     
    file  intrinsic_matrix.hpp [code]
    file  intrinsic_vector_relational.hpp [code]
     
    file  intrinsic_trigonometric.hpp [code]
    file  precision.hpp [code]
     
    file  intrinsic_vector_relational.hpp [code]
    file  setup.hpp [code]
     
    file  precision.hpp [code]
    file  type_float.hpp [code]
     
    file  setup.hpp [code]
    file  type_gentype.hpp [code]
     
    file  type_float.hpp [code]
    file  type_half.hpp [code]
     
    file  type_gentype.hpp [code]
    file  type_int.hpp [code]
     
    file  type_half.hpp [code]
    file  type_mat.hpp [code]
     
    file  type_int.hpp [code]
    file  type_mat2x2.hpp [code]
     
    file  type_mat.hpp [code]
    file  type_mat2x3.hpp [code]
     
    file  type_mat2x2.hpp [code]
    file  type_mat2x4.hpp [code]
     
    file  type_mat2x3.hpp [code]
    file  type_mat3x2.hpp [code]
     
    file  type_mat2x4.hpp [code]
    file  type_mat3x3.hpp [code]
     
    file  type_mat3x2.hpp [code]
    file  type_mat3x4.hpp [code]
     
    file  type_mat3x3.hpp [code]
    file  type_mat4x2.hpp [code]
     
    file  type_mat3x4.hpp [code]
    file  type_mat4x3.hpp [code]
     
    file  type_mat4x2.hpp [code]
    file  type_mat4x4.hpp [code]
     
    file  type_mat4x3.hpp [code]
    file  type_vec.hpp [code]
     
    file  type_mat4x4.hpp [code]
    file  type_vec1.hpp [code]
     
    file  type_vec.hpp [code]
    file  type_vec2.hpp [code]
     
    file  type_vec1.hpp [code]
    file  type_vec3.hpp [code]
     
    file  type_vec2.hpp [code]
     
    file  type_vec3.hpp [code]
     
    file  type_vec4.hpp [code]
    file  type_vec4.hpp [code]
     
    @@ -145,7 +139,7 @@ Files diff --git a/doc/api/dir_edf753475b928be648c1cf1c6443cf63.html b/doc/api/dir_e2c7faa62a52820b5be8795affd6e495.html similarity index 65% rename from doc/api/dir_edf753475b928be648c1cf1c6443cf63.html rename to doc/api/dir_e2c7faa62a52820b5be8795affd6e495.html index e228e45e..33e51156 100644 --- a/doc/api/dir_edf753475b928be648c1cf1c6443cf63.html +++ b/doc/api/dir_e2c7faa62a52820b5be8795affd6e495.html @@ -3,8 +3,8 @@ - -GLM: glm Directory Reference + +0.9.6: glm Directory Reference @@ -16,9 +16,9 @@ + @@ -26,19 +26,17 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    @@ -49,9 +47,9 @@ - + - +

    Directories

    directory  doc
    directory  doc
     
    directory  glm
    directory  glm
     
    @@ -59,7 +57,7 @@ Directories diff --git a/doc/api/dir_e3ecd7863bd215c92a17f47e2ae3be43.html b/doc/api/dir_e3ecd7863bd215c92a17f47e2ae3be43.html deleted file mode 100644 index c6678a0e..00000000 --- a/doc/api/dir_e3ecd7863bd215c92a17f47e2ae3be43.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - -GLM: GitHub Directory Reference - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - -
    -
    -
    -
    GitHub Directory Reference
    -
    -
    - - - - -

    -Directories

    directory  glm
     
    -
    - - - - diff --git a/doc/api/dir_89daaa151958d75313fcd89dd5f4bdb8.html b/doc/api/dir_e6d11964c5662039c68343b35ca5648c.html similarity index 62% rename from doc/api/dir_89daaa151958d75313fcd89dd5f4bdb8.html rename to doc/api/dir_e6d11964c5662039c68343b35ca5648c.html index e123e913..6f696ed1 100644 --- a/doc/api/dir_89daaa151958d75313fcd89dd5f4bdb8.html +++ b/doc/api/dir_e6d11964c5662039c68343b35ca5648c.html @@ -3,8 +3,8 @@ - -GLM: doc Directory Reference + +0.9.6: doc Directory Reference @@ -16,9 +16,9 @@ + @@ -26,19 +26,17 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - +
    @@ -49,9 +47,9 @@ - + - +

    Files

    file  man.doxy [code]
    file  man.doxy [code]
     
    file  pages.doxy [code]
    file  pages.doxy [code]
     
    @@ -59,7 +57,7 @@ Files diff --git a/doc/api/dir_f7324829a002c536307b42a892c06451.html b/doc/api/dir_f7324829a002c536307b42a892c06451.html deleted file mode 100644 index bce28a80..00000000 --- a/doc/api/dir_f7324829a002c536307b42a892c06451.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - -GLM: gtc Directory Reference - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - -
    -
    -
    -
    gtc Directory Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Files

    file  gtc/constants.hpp [code]
     
    file  gtc/epsilon.hpp [code]
     
    file  matrix_access.hpp [code]
     
    file  matrix_integer.hpp [code]
     
    file  matrix_inverse.hpp [code]
     
    file  matrix_transform.hpp [code]
     
    file  gtc/noise.hpp [code]
     
    file  gtc/packing.hpp [code]
     
    file  gtc/quaternion.hpp [code]
     
    file  gtc/random.hpp [code]
     
    file  gtc/reciprocal.hpp [code]
     
    file  type_precision.hpp [code]
     
    file  type_ptr.hpp [code]
     
    file  gtc/ulp.hpp [code]
     
    -
    - - - - diff --git a/doc/api/dynsections.js b/doc/api/dynsections.js index 2f15470d..1e6bf07f 100644 --- a/doc/api/dynsections.js +++ b/doc/api/dynsections.js @@ -24,19 +24,20 @@ function updateStripes() $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); } + function toggleLevel(level) { - $('table.directory tr').each(function(){ + $('table.directory tr').each(function() { var l = this.id.split('_').length-1; var i = $('#img'+this.id.substring(3)); var a = $('#arr'+this.id.substring(3)); if (l - -GLM: File List + +0.9.6: File List @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -49,153 +47,151 @@
    Here is a list of all documented files with brief descriptions:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    o*_features.hpp
    o*_fixes.hpp
    o*_literals.hpp
    o*_noise.hppOpenGL Mathematics (glm.g-truc.net)
    o*_swizzle.hpp
    o*_swizzle_func.hpp
    o*_vectorize.hpp
    o*associated_min_max.hppOpenGL Mathematics (glm.g-truc.net)
    o*bit.hppOpenGL Mathematics (glm.g-truc.net)
    o*closest_point.hpp
    o*color_space.hppOpenGL Mathematics (glm.g-truc.net)
    o*color_space_YCoCg.hppOpenGL Mathematics (glm.g-truc.net)
    o*common.hppOpenGL Mathematics (glm.g-truc.net)
    o*compatibility.hppOpenGL Mathematics (glm.g-truc.net)
    o*component_wise.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtc/constants.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtx/constants.hpp
    o*dual_quaternion.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtc/epsilon.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtx/epsilon.hpp
    o*euler_angles.hppOpenGL Mathematics (glm.g-truc.net)
    o*exponential.hppOpenGL Mathematics (glm.g-truc.net)
    o*ext.hpp
    o*extend.hppOpenGL Mathematics (glm.g-truc.net)
    o*extented_min_max.hppOpenGL Mathematics (glm.g-truc.net)
    o*fast_exponential.hppOpenGL Mathematics (glm.g-truc.net)
    o*fast_square_root.hppOpenGL Mathematics (glm.g-truc.net)
    o*fast_trigonometry.hppOpenGL Mathematics (glm.g-truc.net)
    o*func_common.hpp
    o*func_exponential.hpp
    o*func_geometric.hpp
    o*func_integer.hpp
    o*func_matrix.hpp
    o*func_noise.hpp
    o*func_packing.hpp
    o*func_trigonometric.hpp
    o*func_vector_relational.hpp
    o*fwd.hppOpenGL Mathematics (glm.g-truc.net)
    o*geometric.hppOpenGL Mathematics (glm.g-truc.net)
    o*glm.hppOpenGL Mathematics (glm.g-truc.net)
    o*gradient_paint.hppOpenGL Mathematics (glm.g-truc.net)
    o*handed_coordinate_space.hppOpenGL Mathematics (glm.g-truc.net)
    o*hint.hpp
    o*inertia.hppOpenGL Mathematics (glm.g-truc.net)
    o*int_10_10_10_2.hpp
    o*gtx/integer.hppOpenGL Mathematics (glm.g-truc.net)
    o*integer.hppOpenGL Mathematics (glm.g-truc.net)
    o*intersect.hppOpenGL Mathematics (glm.g-truc.net)
    o*intrinsic_common.hpp
    o*intrinsic_exponential.hpp
    o*intrinsic_geometric.hpp
    o*intrinsic_integer.hpp
    o*intrinsic_matrix.hpp
    o*intrinsic_trigonometric.hpp
    o*intrinsic_vector_relational.hpp
    o*io.hppOpenGL Mathematics (glm.g-truc.net)
    o*log_base.hppOpenGL Mathematics (glm.g-truc.net)
    o*man.doxy
    o*mat2x2.hppOpenGL Mathematics (glm.g-truc.net)
    o*mat2x3.hppOpenGL Mathematics (glm.g-truc.net)
    o*mat2x4.hppOpenGL Mathematics (glm.g-truc.net)
    o*mat3x2.hppOpenGL Mathematics (glm.g-truc.net)
    o*mat3x3.hppOpenGL Mathematics (glm.g-truc.net)
    o*mat3x4.hppOpenGL Mathematics (glm.g-truc.net)
    o*mat4x2.hppOpenGL Mathematics (glm.g-truc.net)
    o*mat4x3.hpp
    o*mat4x4.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix_access.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix_cross_product.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix_integer.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix_interpolation.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix_inverse.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix_major_storage.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix_operation.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix_query.hppOpenGL Mathematics (glm.g-truc.net)
    o*matrix_transform.hppOpenGL Mathematics (glm.g-truc.net)
    o*mixed_product.hppOpenGL Mathematics (glm.g-truc.net)
    o*multiple.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtc/noise.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtx/noise.hpp
    o*norm.hppOpenGL Mathematics (glm.g-truc.net)
    o*normal.hppOpenGL Mathematics (glm.g-truc.net)
    o*normalize_dot.hppOpenGL Mathematics (glm.g-truc.net)
    o*number_precision.hppOpenGL Mathematics (glm.g-truc.net)
    o*optimum_pow.hppOpenGL Mathematics (glm.g-truc.net)
    o*orthonormalize.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtc/packing.hppOpenGL Mathematics (glm.g-truc.net)
    o*packing.hppOpenGL Mathematics (glm.g-truc.net)
    o*pages.doxy
    o*perpendicular.hppOpenGL Mathematics (glm.g-truc.net)
    o*polar_coordinates.hppOpenGL Mathematics (glm.g-truc.net)
    o*precision.hpp
    o*projection.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtc/quaternion.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtx/quaternion.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtc/random.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtx/random.hpp
    o*raw_data.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtc/reciprocal.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtx/reciprocal.hpp
    o*rotate_normalized_axis.hppOpenGL Mathematics (glm.g-truc.net)
    o*rotate_vector.hppOpenGL Mathematics (glm.g-truc.net)
    o*scalar_relational.hppOpenGL Mathematics (glm.g-truc.net)
    o*setup.hpp
    o*simd_mat4.hpp
    o*simd_quat.hppOpenGL Mathematics (glm.g-truc.net)
    o*simd_vec4.hppOpenGL Mathematics (glm.g-truc.net)
    o*spline.hppOpenGL Mathematics (glm.g-truc.net)
    o*std_based_type.hppOpenGL Mathematics (glm.g-truc.net)
    o*string_cast.hppOpenGL Mathematics (glm.g-truc.net)
    o*transform.hppOpenGL Mathematics (glm.g-truc.net)
    o*transform2.hppOpenGL Mathematics (glm.g-truc.net)
    o*trigonometric.hppOpenGL Mathematics (glm.g-truc.net)
    o*type_float.hpp
    o*type_gentype.hpp
    o*type_half.hpp
    o*type_int.hpp
    o*type_mat.hpp
    o*type_mat2x2.hpp
    o*type_mat2x3.hpp
    o*type_mat2x4.hpp
    o*type_mat3x2.hpp
    o*type_mat3x3.hpp
    o*type_mat3x4.hpp
    o*type_mat4x2.hpp
    o*type_mat4x3.hpp
    o*type_mat4x4.hpp
    o*type_precision.hppOpenGL Mathematics (glm.g-truc.net)
    o*type_ptr.hppOpenGL Mathematics (glm.g-truc.net)
    o*type_vec.hpp
    o*type_vec1.hpp
    o*type_vec2.hpp
    o*type_vec3.hpp
    o*type_vec4.hpp
    o*gtc/ulp.hppOpenGL Mathematics (glm.g-truc.net)
    o*gtx/ulp.hpp
    o*unsigned_int.hpp
    o*vec1.hppOpenGL Mathematics (glm.g-truc.net)
    o*vec2.hppOpenGL Mathematics (glm.g-truc.net)
    o*vec3.hppOpenGL Mathematics (glm.g-truc.net)
    o*vec4.hppOpenGL Mathematics (glm.g-truc.net)
    o*vector_angle.hppOpenGL Mathematics (glm.g-truc.net)
    o*vector_query.hppOpenGL Mathematics (glm.g-truc.net)
    o*vector_relational.hppOpenGL Mathematics (glm.g-truc.net)
    o*wrap.hppOpenGL Mathematics (glm.g-truc.net)
    \*xstream.hppOpenGL Mathematics (glm.g-truc.net)
     _features.hppOpenGL Mathematics (glm.g-truc.net)
     _fixes.hppOpenGL Mathematics (glm.g-truc.net)
     _noise.hppOpenGL Mathematics (glm.g-truc.net)
     _swizzle.hppOpenGL Mathematics (glm.g-truc.net)
     _swizzle_func.hppOpenGL Mathematics (glm.g-truc.net)
     _vectorize.hppOpenGL Mathematics (glm.g-truc.net)
     associated_min_max.hppOpenGL Mathematics (glm.g-truc.net)
     bit.hppOpenGL Mathematics (glm.g-truc.net)
     bitfield.hppOpenGL Mathematics (glm.g-truc.net)
     closest_point.hpp
     color_space.hppOpenGL Mathematics (glm.g-truc.net)
     color_space_YCoCg.hppOpenGL Mathematics (glm.g-truc.net)
     common.hppOpenGL Mathematics (glm.g-truc.net)
     gtx/common.hppOpenGL Mathematics (glm.g-truc.net)
     compatibility.hppOpenGL Mathematics (glm.g-truc.net)
     component_wise.hppOpenGL Mathematics (glm.g-truc.net)
     constants.hppOpenGL Mathematics (glm.g-truc.net)
     dual_quaternion.hppOpenGL Mathematics (glm.g-truc.net)
     epsilon.hppOpenGL Mathematics (glm.g-truc.net)
     euler_angles.hppOpenGL Mathematics (glm.g-truc.net)
     exponential.hppOpenGL Mathematics (glm.g-truc.net)
     ext.hpp
     extend.hppOpenGL Mathematics (glm.g-truc.net)
     extented_min_max.hppOpenGL Mathematics (glm.g-truc.net)
     fast_exponential.hppOpenGL Mathematics (glm.g-truc.net)
     fast_square_root.hppOpenGL Mathematics (glm.g-truc.net)
     fast_trigonometry.hppOpenGL Mathematics (glm.g-truc.net)
     func_common.hppOpenGL Mathematics (glm.g-truc.net)
     func_exponential.hppOpenGL Mathematics (glm.g-truc.net)
     func_geometric.hppOpenGL Mathematics (glm.g-truc.net)
     func_integer.hppOpenGL Mathematics (glm.g-truc.net)
     func_matrix.hppOpenGL Mathematics (glm.g-truc.net)
     func_noise.hppOpenGL Mathematics (glm.g-truc.net)
     func_packing.hppOpenGL Mathematics (glm.g-truc.net)
     func_trigonometric.hppOpenGL Mathematics (glm.g-truc.net)
     func_vector_relational.hppOpenGL Mathematics (glm.g-truc.net)
     fwd.hppOpenGL Mathematics (glm.g-truc.net)
     geometric.hppOpenGL Mathematics (glm.g-truc.net)
     glm.hppOpenGL Mathematics (glm.g-truc.net)
     gradient_paint.hppOpenGL Mathematics (glm.g-truc.net)
     handed_coordinate_space.hppOpenGL Mathematics (glm.g-truc.net)
     inertia.hppOpenGL Mathematics (glm.g-truc.net)
     gtc/integer.hppOpenGL Mathematics (glm.g-truc.net)
     gtx/integer.hppOpenGL Mathematics (glm.g-truc.net)
     integer.hppOpenGL Mathematics (glm.g-truc.net)
     intersect.hppOpenGL Mathematics (glm.g-truc.net)
     intrinsic_common.hppOpenGL Mathematics (glm.g-truc.net)
     intrinsic_exponential.hppOpenGL Mathematics (glm.g-truc.net)
     intrinsic_geometric.hppOpenGL Mathematics (glm.g-truc.net)
     intrinsic_integer.hppOpenGL Mathematics (glm.g-truc.net)
     intrinsic_matrix.hpp
     intrinsic_trigonometric.hppOpenGL Mathematics (glm.g-truc.net)
     intrinsic_vector_relational.hppOpenGL Mathematics (glm.g-truc.net)
     io.hppOpenGL Mathematics (glm.g-truc.net)
     log_base.hppOpenGL Mathematics (glm.g-truc.net)
     man.doxy
     mat2x2.hppOpenGL Mathematics (glm.g-truc.net)
     mat2x3.hppOpenGL Mathematics (glm.g-truc.net)
     mat2x4.hppOpenGL Mathematics (glm.g-truc.net)
     mat3x2.hppOpenGL Mathematics (glm.g-truc.net)
     mat3x3.hppOpenGL Mathematics (glm.g-truc.net)
     mat3x4.hppOpenGL Mathematics (glm.g-truc.net)
     mat4x2.hppOpenGL Mathematics (glm.g-truc.net)
     mat4x3.hpp
     mat4x4.hppOpenGL Mathematics (glm.g-truc.net)
     matrix.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_access.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_cross_product.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_decompose.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_integer.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_interpolation.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_inverse.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_major_storage.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_operation.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_query.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_transform.hppOpenGL Mathematics (glm.g-truc.net)
     matrix_transform_2d.hppOpenGL Mathematics (glm.g-truc.net)
     mixed_product.hppOpenGL Mathematics (glm.g-truc.net)
     multiple.hppOpenGL Mathematics (glm.g-truc.net)
     noise.hppOpenGL Mathematics (glm.g-truc.net)
     norm.hppOpenGL Mathematics (glm.g-truc.net)
     normal.hppOpenGL Mathematics (glm.g-truc.net)
     normalize_dot.hppOpenGL Mathematics (glm.g-truc.net)
     number_precision.hppOpenGL Mathematics (glm.g-truc.net)
     optimum_pow.hppOpenGL Mathematics (glm.g-truc.net)
     orthonormalize.hppOpenGL Mathematics (glm.g-truc.net)
     gtc/packing.hppOpenGL Mathematics (glm.g-truc.net)
     packing.hppOpenGL Mathematics (glm.g-truc.net)
     pages.doxy
     perpendicular.hppOpenGL Mathematics (glm.g-truc.net)
     polar_coordinates.hppOpenGL Mathematics (glm.g-truc.net)
     precision.hppOpenGL Mathematics (glm.g-truc.net)
     projection.hppOpenGL Mathematics (glm.g-truc.net)
     gtc/quaternion.hppOpenGL Mathematics (glm.g-truc.net)
     gtx/quaternion.hppOpenGL Mathematics (glm.g-truc.net)
     random.hppOpenGL Mathematics (glm.g-truc.net)
     range.hppOpenGL Mathematics (glm.g-truc.net)
     raw_data.hppOpenGL Mathematics (glm.g-truc.net)
     reciprocal.hppOpenGL Mathematics (glm.g-truc.net)
     rotate_normalized_axis.hppOpenGL Mathematics (glm.g-truc.net)
     rotate_vector.hppOpenGL Mathematics (glm.g-truc.net)
     round.hppOpenGL Mathematics (glm.g-truc.net)
     scalar_multiplication.hppOpenGL Mathematics (glm.g-truc.net)
     scalar_relational.hppOpenGL Mathematics (glm.g-truc.net)
     setup.hppOpenGL Mathematics (glm.g-truc.net)
     simd_mat4.hpp
     simd_quat.hppOpenGL Mathematics (glm.g-truc.net)
     simd_vec4.hppOpenGL Mathematics (glm.g-truc.net)
     spline.hppOpenGL Mathematics (glm.g-truc.net)
     std_based_type.hppOpenGL Mathematics (glm.g-truc.net)
     string_cast.hppOpenGL Mathematics (glm.g-truc.net)
     transform.hppOpenGL Mathematics (glm.g-truc.net)
     transform2.hppOpenGL Mathematics (glm.g-truc.net)
     trigonometric.hppOpenGL Mathematics (glm.g-truc.net)
     type_aligned.hppOpenGL Mathematics (glm.g-truc.net)
     type_float.hppOpenGL Mathematics (glm.g-truc.net)
     type_gentype.hppOpenGL Mathematics (glm.g-truc.net)
     type_half.hppOpenGL Mathematics (glm.g-truc.net)
     type_int.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat2x2.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat2x3.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat2x4.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat3x2.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat3x3.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat3x4.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat4x2.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat4x3.hppOpenGL Mathematics (glm.g-truc.net)
     type_mat4x4.hppOpenGL Mathematics (glm.g-truc.net)
     type_precision.hppOpenGL Mathematics (glm.g-truc.net)
     type_ptr.hppOpenGL Mathematics (glm.g-truc.net)
     type_vec.hppOpenGL Mathematics (glm.g-truc.net)
     type_vec1.hppOpenGL Mathematics (glm.g-truc.net)
     type_vec2.hppOpenGL Mathematics (glm.g-truc.net)
     type_vec3.hppOpenGL Mathematics (glm.g-truc.net)
     type_vec4.hppOpenGL Mathematics (glm.g-truc.net)
     ulp.hppOpenGL Mathematics (glm.g-truc.net)
     vec1.hppOpenGL Mathematics (glm.g-truc.net)
     vec2.hppOpenGL Mathematics (glm.g-truc.net)
     vec3.hppOpenGL Mathematics (glm.g-truc.net)
     vec4.hppOpenGL Mathematics (glm.g-truc.net)
     vector_angle.hppOpenGL Mathematics (glm.g-truc.net)
     vector_query.hppOpenGL Mathematics (glm.g-truc.net)
     vector_relational.hppOpenGL Mathematics (glm.g-truc.net)
     wrap.hppOpenGL Mathematics (glm.g-truc.net)
    @@ -203,7 +199,7 @@ diff --git a/doc/api/ftv2cl.png b/doc/api/ftv2cl.png deleted file mode 100644 index 132f6577bf7f085344904602815a260d29f55d9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmV;$0XqJPP)VBF;ev;toEj8_OB0EQg5eYilIj#JZG_m^33l3^k4mtzx!TVD?g)Y$ zrvwRDSqT!wLIM$dWCIa$vtxE|mzbTzu-y&$FvF6WA2a{Wr1g}`WdPT-0JzEZ0IxAv z-Z+ejZc&H;I5-pb_SUB}04j0^V)3t{`z<7asDl2Tw3w3sP%)0^8$bhEg)IOTBcRXv zFfq~3&gvJ$F-U7mpBW8z1GY~HK&7h4^YI~Orv~wLnC0PP_dAkv;nzX{9Q|8Gv=2ca z@v)c9T;D#h`TZ2X&&$ff2wedmot995de~-s3I)yauahg;7qn*?1n?F$e+PwP37}~; z1NKUk7reVK^7A;$QRW7qAx40HHUZ<|k3U%nz(Ec`#i+q9K!dgcROAlCS?`L= v>#=f?wF5ZND!1uAfQsk;KN^4&*8~0npJiJ%2dj9(00000NkvXXu0mjfWVFf_ diff --git a/doc/api/ftv2mo.png b/doc/api/ftv2mo.png deleted file mode 100644 index 4bfb80f76e65815989a9350ad79d8ce45380e2b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmV;E0c`$>P)${!fXv7NWJ%@%u4(KapRY>T6_x;E zxE7kt!}Tiw8@d9Sd`rTGum>z#Q14vIm`wm1#-byD1muMi02@YNO5LRF0o!Y{`a!Ya z{^&p0Su|s705&2QxmqdexG+-zNKL3f@8gTQSJrKByfo+oNJ^-{|Mn||Q5SDwjQVsS zr1}7o5-QMs>gYIMD>GRw@$lT`z4r-_m{5U#cR{urD_)TOeY)(UD|qZ^&y`IVijqk~ xs(9-kWFr7E^!lgi8GsFK5kOY_{Xbgf0^etEU%fLevs?fG002ovPDHLkV1nB&vX1}& diff --git a/doc/api/ftv2ns.png b/doc/api/ftv2ns.png deleted file mode 100644 index 72e3d71c2892d6f00e259facebc88b45f6db2e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmV-~0ek+5P)f+++#cT|!CkD&4pnIkeMEUEM*>`*9>+Juji$!h-mW%M^8s9957{3nvbrz^&=u<~TAUrFROkmt%^F~Ez+-c53Lv%iH3d38!Rv?K zrb&MYAhp;Gf<}wS;9ZZq2@;!uYG;=Z>~GKE^{HD4keu}lnyqhc>kWX^tQn|warJ~h zT+rtMkdz6aHoN%z(o|&wpu@@OpJnF_z{PA)6(FHw02iHslz^(N{4*+K9)QJHR87wT iTyp>aXaF{u2lxRou|^4tux6eB0000 - -GLM: OpenGL Mathematics + +0.9.6: OpenGL Mathematics @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -44,28 +42,27 @@

    OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification.

    GLM provides classes and functions designed and implemented with the same naming conventions and functionalities than GLSL so that when a programmer knows GLSL, he knows GLM as well which makes it really easy to use.

    -

    This project isn't limited to GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, half-based types, random numbers, procedural noise functions, etc...

    -

    This library works perfectly with OpenGL but it also ensures interoperability with third party libraries and SDKs. It is a good candidate for software rendering (Raytracing / Rasterisation), image processing, physic simulations and any context that requires a simple and convenient mathematics library.

    -

    GLM is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and officially supports the following compilers:

    -
      -
    • Clang 2.6 and higher
    • -
    • CUDA 3.0 and higher
    • -
    • GCC 3.4 and higher
    • +

      This project isn't limited to GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, half-based types, random numbers, noise, etc...

      +

      This library works perfectly with OpenGL but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterisation), image processing, physic simulations and any development context that requires a simple and convenient mathematics library.

      +

      GLM is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers:

        +
      • Apple Clang 4.0 and higher
      • +
      • CUDA 4.0 and higher
      • +
      • GCC 4.2 and higher
      • +
      • LLVM 3.0 and higher
      • Intel C++ Composer XE 2013 and higher
      • -
      • LLVM 2.3 through GCC 4.2 front-end and higher
      • -
      • Visual Studio 2005 and higher
      • -
      • Any conform C++98 or C++11 compiler
      • +
      • Visual Studio 2010 and higher
      • +
      • Any conform C++98 compiler
      -
      Note
      The Doxygen-generated documentation will often state that a type or function is defined in a namespace that is a child of the glm namespace. Please ignore this; All publicly available types and functions can be accessed as a direct children of the glm namespace.
      +
      Note
      The Doxygen-generated documentation will often state that a type or function is defined in a namespace that is a child of the glm namespace. Please ignore this; All publicly available types and functions can be accessed as a direct children of the glm namespace.

      The source code is licenced under the MIT licence.

      These pages are the API reference only. For more information about how to use GLM, please have a look at the manual.

      -

      Thanks for contributing to the project by submitting tickets for bug reports and feature requests. (SF.net account required). Any feedback is welcome at glm@g.nosp@m.-tru.nosp@m.c.net.

      +

      Thanks for contributing to the project by submitting tickets for bug reports and feature requests. Any feedback is welcome at glm@g.nosp@m.-tru.nosp@m.c.net.

    diff --git a/doc/api/logo.png b/doc/api/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..80b5f9d4f9ebbac8ae697a2466cf9dac841deb5e GIT binary patch literal 8453 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 URU0!uemuZ{D#0L?3W(7E2QF^jwEzGB literal 0 HcmV?d00001 diff --git a/doc/api/modules.html b/doc/api/modules.html index 1e167949..be77b4e6 100644 --- a/doc/api/modules.html +++ b/doc/api/modules.html @@ -3,8 +3,8 @@ - -GLM: Modules + +0.9.6: Modules @@ -16,9 +16,9 @@ + @@ -26,13 +26,11 @@
    -
    GLM -  0.9.5 +
    0.9.6
    - + @@ -44,91 +42,98 @@
    Here is a list of all modules:
    [detail level 123]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    oGTC Extensions (Stable)Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program
    |oGLM_GTC_constantsAllow to perform bit operations on integer values
    |oGLM_GTC_epsilonComparison functions for a user defined epsilon values
    |oGLM_GTC_matrix_accessDefines functions to access rows or columns of a matrix easily
    |oGLM_GTC_matrix_integerDefines a number of matrices with integer types
    |oGLM_GTC_matrix_inverseDefines additional matrix inverting functions
    |oGLM_GTC_matrix_transformDefines functions that generate common transformation matrices
    |oGLM_GTC_noiseDefines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf <glm/gtc/noise.hpp> need to be included to use these functionalities
    |oGLM_GTC_packingThis extension provides a set of function to convert vertors to packed formats
    |oGLM_GTC_quaternionDefines a templated quaternion type and several quaternion operations
    |oGLM_GTC_randomGenerate random number from various distribution methods
    |oGLM_GTC_reciprocalDefine secant, cosecant and cotangent functions
    |oGLM_GTC_type_precisionDefines specific C++-based precision types
    |oGLM_GTC_type_ptrHandles the interaction between pointers and vector, matrix types
    |oGLM_GTC_ulpAllow the measurement of the accuracy of a function against a reference implementation
    |oGLM_GTX_dual_quaternionDefines a templated dual-quaternion type and several dual-quaternion operations
    |\GLM_GTX_rotate_normalized_axisQuaternions and matrices rotations around normalized axis
    oGTX Extensions (Experimental)Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program
    |oGLM_GTX_associated_min_maxMin and max functions that return associated values not the compared onces
    |oGLM_GTX_bitAllow to perform bit operations on integer values
    |oGLM_GTX_closest_pointFind the point on a straight line which is the closet of a point
    |oGLM_GTX_color_spaceRelated to RGB to HSV conversions and operations
    |oGLM_GTX_color_space_YCoCgRGB to YCoCg conversions and operations
    |oGLM_GTX_compatibilityProvide functions to increase the compatibility with Cg and HLSL languages
    |oGLM_GTX_component_wiseOperations between components of a type
    |oGLM_GTX_euler_anglesBuild matrices from Euler angles
    |oGLM_GTX_extendExtend a position from a source to a position at a defined length
    |oGLM_GTX_extented_min_maxMin and max functions for 3 to 4 parameters
    |oGLM_GTX_fast_exponentialFast but less accurate implementations of exponential based functions
    |oGLM_GTX_fast_square_rootFast but less accurate implementations of square root based functions
    |oGLM_GTX_fast_trigonometryFast but less accurate implementations of trigonometric functions
    |oGLM_GTX_gradient_paintFunctions that return the color of procedural gradient for specific coordinates
    |oGLM_GTX_handed_coordinate_spaceTo know if a set of three basis vectors defines a right or left-handed coordinate system
    |oGLM_GTX_inertiaCreate inertia matrices
    |oGLM_GTX_integerAdd support for integer for core functions
    |oGLM_GTX_intersectAdd intersection functions
    |oGLM_GTX_ioStd::[w]ostream support for glm types
    |oGLM_GTX_log_baseLogarithm for any base
    |oGLM_GTX_matrix_cross_productBuild cross product matrices
    |oGLM_GTX_matrix_interpolationAllows to directly interpolate two exiciting matrices
    |oGLM_GTX_matrix_major_storageBuild matrices with specific matrix order, row or column
    |oGLM_GTX_matrix_operationBuild diagonal matrices from vectors
    |oGLM_GTX_matrix_queryQuery to evaluate matrix properties
    |oGLM_GTX_mixed_producteMixed product of 3 vectors
    |oGLM_GTX_multipleFind the closest number of a number multiple of other number
    |oGLM_GTX_normVarious ways to compute vector norms
    |oGLM_GTX_normalCompute the normal of a triangle
    |oGLM_GTX_normalize_dotDot product of vectors that need to be normalize with a single square root
    |oGLM_GTX_number_precisionDefined size types
    |oGLM_GTX_optimum_powInteger exponentiation of power functions
    |oGLM_GTX_orthonormalizeOrthonormalize matrices
    |oGLM_GTX_perpendicularPerpendicular of a vector from other one
    |oGLM_GTX_polar_coordinatesConversion from Euclidean space to polar space and revert
    |oGLM_GTX_projectionProjection of a vector to other one
    |oGLM_GTX_quaternionExtented quaternion types and functions
    |oGLM_GTX_raw_dataProjection of a vector to other one
    |oGLM_GTX_rotate_vectorFunction to directly rotate a vector
    |oGLM_GTX_simd_mat4SIMD implementation of mat4 type
    |oGLM_GTX_simd_quatSIMD implementation of quat type
    |oGLM_GTX_splineSpline functions
    |oGLM_GTX_std_based_typeAdds vector types based on STL value types
    |oGLM_GTX_string_castSetup strings for GLM type values
    |oGLM_GTX_transformAdd transformation matrices
    |oGLM_GTX_transform2Add extra transformation matrices
    |oGLM_GTX_vec1Add vec1, ivec1, uvec1 and bvec1 types
    |oGLM_GTX_vector_angleCompute angle between vectors
    |oGLM_GTX_vector_queryQuery informations of vector types
    |\GLM_GTX_wrapWrapping mode of texture coordinates
    oVIRTREV ExtensionsExtensions develop and maintain by Mathieu [matrem] Roumillac (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showprofile&User=22660)
    |\GLM_VIRTREV_xstream: xml like outputStreaming vector and matrix in a xml way
    oGLM CoreThe core of GLM, which implements exactly and only the GLSL specification to the degree possible
    |oCommon functionsThese all operate component-wise
    |oExponential functionsThese all operate component-wise
    |oGeometric functionsThese operate on vectors as vectors, not component-wise
    |oInteger functionsThese all operate component-wise
    |oMatrix functionsFor each of the following built-in matrix functions, there is both a single-precision floating point version, where all arguments and return values are single precision, and a double-precision floating version, where all arguments and return values are double precision
    |oNoise functionsNoise functions are stochastic functions that can be used to increase visual complexity
    |oFloating-Point Pack and Unpack FunctionsThese functions do not operate component-wise, rather as described in each case
    |oAngle and Trigonometry FunctionsFunction parameters specified as angle are assumed to be in units of radians
    |oVector Relational FunctionsRelational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results
    |oTypesThe standard types defined by the specification
    ||\Precision typesNon-GLSL types that are used to define precision-based types
    |oPrecision typesNon-GLSL types that are used to define precision-based types
    |\Template typesThe generic template types used as the basis for the core types
    \Gtx_scalar_relational
     GTC Extensions (Stable)Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program
     GLM_GTC_bitfieldAllow to perform bit operations on integer values
     GLM_GTC_constantsProvide a list of constants and precomputed useful values
     GLM_GTC_epsilonComparison functions for a user defined epsilon values
     GLM_GTC_integerAllow to perform bit operations on integer values
     GLM_GTC_matrix_accessDefines functions to access rows or columns of a matrix easily
     GLM_GTC_matrix_integerDefines a number of matrices with integer types
     GLM_GTC_matrix_inverseDefines additional matrix inverting functions
     GLM_GTC_matrix_transformDefines functions that generate common transformation matrices
     GLM_GTC_noiseDefines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf <glm/gtc/noise.hpp> need to be included to use these functionalities
     GLM_GTC_packingThis extension provides a set of function to convert vertors to packed formats
     GLM_GTC_quaternionDefines a templated quaternion type and several quaternion operations
     GLM_GTC_randomGenerate random number from various distribution methods
     GLM_GTC_reciprocalDefine secant, cosecant and cotangent functions
     GLM_GTC_roundRounding value to specific boundings
     GLM_GTC_type_precisionDefines specific C++-based precision types
     GLM_GTC_type_ptrHandles the interaction between pointers and vector, matrix types
     GLM_GTC_ulpAllow the measurement of the accuracy of a function against a reference implementation
     GLM_GTC_vec1Add vec1, ivec1, uvec1 and bvec1 types
     GTX Extensions (Experimental)Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program
     GLM_GTX_associated_min_maxMin and max functions that return associated values not the compared onces
     GLM_GTX_bitAllow to perform bit operations on integer values
     GLM_GTX_closest_pointFind the point on a straight line which is the closet of a point
     GLM_GTX_color_spaceRelated to RGB to HSV conversions and operations
     GLM_GTX_color_space_YCoCgRGB to YCoCg conversions and operations
     GLM_GTX_commonProvide functions to increase the compatibility with Cg and HLSL languages
     GLM_GTX_compatibilityProvide functions to increase the compatibility with Cg and HLSL languages
     GLM_GTX_component_wiseOperations between components of a type
     GLM_GTX_dual_quaternionDefines a templated dual-quaternion type and several dual-quaternion operations
     GLM_GTX_euler_anglesBuild matrices from Euler angles
     GLM_GTX_extendExtend a position from a source to a position at a defined length
     GLM_GTX_extented_min_maxMin and max functions for 3 to 4 parameters
     GLM_GTX_fast_exponentialFast but less accurate implementations of exponential based functions
     GLM_GTX_fast_square_rootFast but less accurate implementations of square root based functions
     GLM_GTX_fast_trigonometryFast but less accurate implementations of trigonometric functions
     GLM_GTX_gradient_paintFunctions that return the color of procedural gradient for specific coordinates
     GLM_GTX_handed_coordinate_spaceTo know if a set of three basis vectors defines a right or left-handed coordinate system
     GLM_GTX_inertiaCreate inertia matrices
     GLM_GTX_integerAdd support for integer for core functions
     GLM_GTX_intersectAdd intersection functions
     GLM_GTX_ioStd::[w]ostream support for glm types
     GLM_GTX_log_baseLogarithm for any base
     GLM_GTX_matrix_cross_productBuild cross product matrices
     GLM_GTX_matrix_decomposeDecomposes a model matrix to translations, rotation and scale components
     GLM_GTX_matrix_interpolationAllows to directly interpolate two exiciting matrices
     GLM_GTX_matrix_major_storageBuild matrices with specific matrix order, row or column
     GLM_GTX_matrix_operationBuild diagonal matrices from vectors
     GLM_GTX_matrix_queryQuery to evaluate matrix properties
     GLM_GTX_matrix_transform_2dDefines functions that generate common 2d transformation matrices
     GLM_GTX_mixed_producteMixed product of 3 vectors
     GLM_GTX_multipleFind the closest number of a number multiple of other number
     GLM_GTX_normVarious ways to compute vector norms
     GLM_GTX_normalCompute the normal of a triangle
     GLM_GTX_normalize_dotDot product of vectors that need to be normalize with a single square root
     GLM_GTX_number_precisionDefined size types
     GLM_GTX_optimum_powInteger exponentiation of power functions
     GLM_GTX_orthonormalizeOrthonormalize matrices
     GLM_GTX_perpendicularPerpendicular of a vector from other one
     GLM_GTX_polar_coordinatesConversion from Euclidean space to polar space and revert
     GLM_GTX_projectionProjection of a vector to other one
     GLM_GTX_quaternionExtented quaternion types and functions
     GLM_GTX_rangeDefines begin and end for vectors and matrices
     GLM_GTX_raw_dataProjection of a vector to other one
     GLM_GTX_rotate_normalized_axisQuaternions and matrices rotations around normalized axis
     GLM_GTX_rotate_vectorFunction to directly rotate a vector
     GLM_GTX_scalar_relationalExtend a position from a source to a position at a defined length
     GLM_GTX_simd_mat4SIMD implementation of mat4 type
     GLM_GTX_simd_quatSIMD implementation of quat type
     GLM_GTX_simd_vec4SIMD implementation of vec4 type
     GLM_GTX_splineSpline functions
     GLM_GTX_std_based_typeAdds vector types based on STL value types
     GLM_GTX_string_castSetup strings for GLM type values
     GLM_GTX_transformAdd transformation matrices
     GLM_GTX_transform2Add extra transformation matrices
     GLM_GTX_type_alignedDefines aligned types
     GLM_GTX_vector_angleCompute angle between vectors
     GLM_GTX_vector_queryQuery informations of vector types
     GLM_GTX_wrapWrapping mode of texture coordinates
     GLM CoreThe core of GLM, which implements exactly and only the GLSL specification to the degree possible
     Common functionsThese all operate component-wise
     Exponential functionsThese all operate component-wise
     Geometric functionsThese operate on vectors as vectors, not component-wise
     Integer functionsThese all operate component-wise
     Matrix functionsFor each of the following built-in matrix functions, there is both a single-precision floating point version, where all arguments and return values are single precision, and a double-precision floating version, where all arguments and return values are double precision
     Noise functionsNoise functions are stochastic functions that can be used to increase visual complexity
     Floating-Point Pack and Unpack FunctionsThese functions do not operate component-wise, rather as described in each case
     Angle and Trigonometry FunctionsFunction parameters specified as angle are assumed to be in units of radians
     Vector Relational FunctionsRelational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results
     TypesThe standard types defined by the specification
     Precision typesNon-GLSL types that are used to define precision-based types
     Precision typesNon-GLSL types that are used to define precision-based types
     Template typesThe generic template types used as the basis for the core types
    @@ -136,7 +141,7 @@ diff --git a/doc/api/namespacemembers.html b/doc/api/namespacemembers.html deleted file mode 100644 index f7252794..00000000 --- a/doc/api/namespacemembers.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - a -

      -
    • abs() -: glm -
    • -
    • acos() -: glm -
    • -
    • acosh() -: glm -
    • -
    • acot() -: glm -
    • -
    • acoth() -: glm -
    • -
    • acsc() -: glm -
    • -
    • acsch() -: glm -
    • -
    • affineInverse() -: glm -
    • -
    • all() -: glm -
    • -
    • angle() -: glm -
    • -
    • angleAxis() -: glm -
    • -
    • any() -: glm -
    • -
    • areCollinear() -: glm -
    • -
    • areOrthogonal() -: glm -
    • -
    • areOrthonormal() -: glm -
    • -
    • asec() -: glm -
    • -
    • asech() -: glm -
    • -
    • asin() -: glm -
    • -
    • asinh() -: glm -
    • -
    • associatedMax() -: glm -
    • -
    • associatedMin() -: glm -
    • -
    • atan() -: glm -
    • -
    • atan2() -: glm -
    • -
    • atanh() -: glm -
    • -
    • axis() -: glm -
    • -
    • axisAngle() -: glm -
    • -
    • axisAngleMatrix() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x62.html b/doc/api/namespacemembers_0x62.html deleted file mode 100644 index ebf1b176..00000000 --- a/doc/api/namespacemembers_0x62.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - b -

      -
    • ballRand() -: glm -
    • -
    • bitCount() -: glm -
    • -
    • bitfieldExtract() -: glm -
    • -
    • bitfieldInsert() -: glm -
    • -
    • bitfieldInterleave() -: glm -
    • -
    • bitfieldReverse() -: glm -
    • -
    • bitRevert() -: glm -
    • -
    • bitRotateLeft() -: glm -
    • -
    • bitRotateRight() -: glm -
    • -
    • bool1 -: glm -
    • -
    • bool1x1 -: glm -
    • -
    • bool2 -: glm -
    • -
    • bool2x2 -: glm -
    • -
    • bool2x3 -: glm -
    • -
    • bool2x4 -: glm -
    • -
    • bool3 -: glm -
    • -
    • bool3x2 -: glm -
    • -
    • bool3x3 -: glm -
    • -
    • bool3x4 -: glm -
    • -
    • bool4 -: glm -
    • -
    • bool4x2 -: glm -
    • -
    • bool4x3 -: glm -
    • -
    • bool4x4 -: glm -
    • -
    • bvec1 -: glm -
    • -
    • bvec2 -: glm -
    • -
    • bvec3 -: glm -
    • -
    • bvec4 -: glm -
    • -
    • byte -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x63.html b/doc/api/namespacemembers_0x63.html deleted file mode 100644 index 6ca90fc7..00000000 --- a/doc/api/namespacemembers_0x63.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - c -

      -
    • catmullRom() -: glm -
    • -
    • ceil() -: glm -
    • -
    • circularRand() -: glm -
    • -
    • clamp() -: glm -
    • -
    • closestPointOnLine() -: glm -
    • -
    • colMajor2() -: glm -
    • -
    • colMajor3() -: glm -
    • -
    • colMajor4() -: glm -
    • -
    • column() -: glm -
    • -
    • compAdd() -: glm -
    • -
    • compMax() -: glm -
    • -
    • compMin() -: glm -
    • -
    • compMul() -: glm -
    • -
    • conjugate() -: glm -
    • -
    • cos() -: glm -
    • -
    • cosh() -: glm -
    • -
    • cot() -: glm -
    • -
    • coth() -: glm -
    • -
    • cross() -: glm -
    • -
    • csc() -: glm -
    • -
    • csch() -: glm -
    • -
    • cubic() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x64.html b/doc/api/namespacemembers_0x64.html deleted file mode 100644 index cc370307..00000000 --- a/doc/api/namespacemembers_0x64.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - d -

      -
    • ddualquat -: glm -
    • -
    • degrees() -: glm -
    • -
    • diagonal2x2() -: glm -
    • -
    • diagonal2x3() -: glm -
    • -
    • diagonal2x4() -: glm -
    • -
    • diagonal3x2() -: glm -
    • -
    • diagonal3x3() -: glm -
    • -
    • diagonal3x4() -: glm -
    • -
    • diagonal4x2() -: glm -
    • -
    • diagonal4x3() -: glm -
    • -
    • diagonal4x4() -: glm -
    • -
    • diskRand() -: glm -
    • -
    • distance() -: glm -
    • -
    • distance2() -: glm -
    • -
    • dmat2 -: glm -
    • -
    • dmat2x2 -: glm -
    • -
    • dmat2x3 -: glm -
    • -
    • dmat2x4 -: glm -
    • -
    • dmat3 -: glm -
    • -
    • dmat3x2 -: glm -
    • -
    • dmat3x3 -: glm -
    • -
    • dmat3x4 -: glm -
    • -
    • dmat4 -: glm -
    • -
    • dmat4x2 -: glm -
    • -
    • dmat4x3 -: glm -
    • -
    • dmat4x4 -: glm -
    • -
    • dot() -: glm -
    • -
    • double1 -: glm -
    • -
    • double1x1 -: glm -
    • -
    • double2 -: glm -
    • -
    • double2x2 -: glm -
    • -
    • double2x3 -: glm -
    • -
    • double2x4 -: glm -
    • -
    • double3 -: glm -
    • -
    • double3x2 -: glm -
    • -
    • double3x3 -: glm -
    • -
    • double3x4 -: glm -
    • -
    • double4 -: glm -
    • -
    • double4x2 -: glm -
    • -
    • double4x3 -: glm -
    • -
    • double4x4 -: glm -
    • -
    • dquat -: glm -
    • -
    • dualquat -: glm -
    • -
    • dualquat_cast() -: glm -
    • -
    • dvec2 -: glm -
    • -
    • dvec3 -: glm -
    • -
    • dvec4 -: glm -
    • -
    • dword -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x65.html b/doc/api/namespacemembers_0x65.html deleted file mode 100644 index 2bcfecdc..00000000 --- a/doc/api/namespacemembers_0x65.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - e -

      -
    • e() -: glm -
    • -
    • epsilon() -: glm -
    • -
    • epsilonEqual() -: glm -
    • -
    • epsilonNotEqual() -: glm -
    • -
    • equal() -: glm -
    • -
    • euclidean() -: glm -
    • -
    • euler() -: glm -
    • -
    • eulerAngles() -: glm -
    • -
    • eulerAngleX() -: glm -
    • -
    • eulerAngleXY() -: glm -
    • -
    • eulerAngleXZ() -: glm -
    • -
    • eulerAngleY() -: glm -
    • -
    • eulerAngleYX() -: glm -
    • -
    • eulerAngleYXZ() -: glm -
    • -
    • eulerAngleYZ() -: glm -
    • -
    • eulerAngleZ() -: glm -
    • -
    • eulerAngleZX() -: glm -
    • -
    • eulerAngleZY() -: glm -
    • -
    • exp() -: glm -
    • -
    • exp2() -: glm -
    • -
    • extend() -: glm -
    • -
    • extractMatrixRotation() -: glm -
    • -
    • extractRealComponent() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x66.html b/doc/api/namespacemembers_0x66.html deleted file mode 100644 index 481dd945..00000000 --- a/doc/api/namespacemembers_0x66.html +++ /dev/null @@ -1,411 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - f -

      -
    • f32 -: glm -
    • -
    • f32mat2 -: glm -
    • -
    • f32mat2x2 -: glm -
    • -
    • f32mat2x3 -: glm -
    • -
    • f32mat2x4 -: glm -
    • -
    • f32mat3 -: glm -
    • -
    • f32mat3x2 -: glm -
    • -
    • f32mat3x3 -: glm -
    • -
    • f32mat3x4 -: glm -
    • -
    • f32mat4 -: glm -
    • -
    • f32mat4x2 -: glm -
    • -
    • f32mat4x3 -: glm -
    • -
    • f32mat4x4 -: glm -
    • -
    • f32quat -: glm -
    • -
    • f32vec1 -: glm -
    • -
    • f32vec2 -: glm -
    • -
    • f32vec3 -: glm -
    • -
    • f32vec4 -: glm -
    • -
    • f64 -: glm -
    • -
    • f64mat2 -: glm -
    • -
    • f64mat2x2 -: glm -
    • -
    • f64mat2x3 -: glm -
    • -
    • f64mat2x4 -: glm -
    • -
    • f64mat3 -: glm -
    • -
    • f64mat3x2 -: glm -
    • -
    • f64mat3x3 -: glm -
    • -
    • f64mat3x4 -: glm -
    • -
    • f64mat4 -: glm -
    • -
    • f64mat4x2 -: glm -
    • -
    • f64mat4x3 -: glm -
    • -
    • f64mat4x4 -: glm -
    • -
    • f64quat -: glm -
    • -
    • f64vec1 -: glm -
    • -
    • f64vec2 -: glm -
    • -
    • f64vec3 -: glm -
    • -
    • f64vec4 -: glm -
    • -
    • faceforward() -: glm -
    • -
    • factorial() -: glm -
    • -
    • fastAcos() -: glm -
    • -
    • fastAsin() -: glm -
    • -
    • fastAtan() -: glm -
    • -
    • fastCos() -: glm -
    • -
    • fastDistance() -: glm -
    • -
    • fastExp() -: glm -
    • -
    • fastExp2() -: glm -
    • -
    • fastInverseSqrt() -: glm -
    • -
    • fastLength() -: glm -
    • -
    • fastLn() -: glm -
    • -
    • fastLog() -: glm -
    • -
    • fastLog2() -: glm -
    • -
    • fastMix() -: glm -
    • -
    • fastNormalize() -: glm -
    • -
    • fastNormalizeDot() -: glm -
    • -
    • fastPow() -: glm -
    • -
    • fastSin() -: glm -
    • -
    • fastSqrt() -: glm -
    • -
    • fastTan() -: glm -
    • -
    • fdualquat -: glm -
    • -
    • fillBitfieldWithOne() -: glm -
    • -
    • fillBitfieldWithZero() -: glm -
    • -
    • findLSB() -: glm -
    • -
    • findMSB() -: glm -
    • -
    • float1 -: glm -
    • -
    • float1x1 -: glm -
    • -
    • float2 -: glm -
    • -
    • float2x2 -: glm -
    • -
    • float2x3 -: glm -
    • -
    • float2x4 -: glm -
    • -
    • float3 -: glm -
    • -
    • float32 -: glm -
    • -
    • float32_t -: glm -
    • -
    • float3x2 -: glm -
    • -
    • float3x3 -: glm -
    • -
    • float3x4 -: glm -
    • -
    • float4 -: glm -
    • -
    • float4x2 -: glm -
    • -
    • float4x3 -: glm -
    • -
    • float4x4 -: glm -
    • -
    • float64 -: glm -
    • -
    • float64_t -: glm -
    • -
    • float_distance() -: glm -
    • -
    • floatBitsToInt() -: glm -
    • -
    • floatBitsToUint() -: glm -
    • -
    • floor() -: glm -
    • -
    • floor_log2() -: glm -
    • -
    • fma() -: glm -
    • -
    • fmat2 -: glm -
    • -
    • fmat2x2 -: glm -
    • -
    • fmat2x3 -: glm -
    • -
    • fmat2x4 -: glm -
    • -
    • fmat3 -: glm -
    • -
    • fmat3x2 -: glm -
    • -
    • fmat3x3 -: glm -
    • -
    • fmat3x4 -: glm -
    • -
    • fmat4 -: glm -
    • -
    • fmat4x2 -: glm -
    • -
    • fmat4x3 -: glm -
    • -
    • fmat4x4 -: glm -
    • -
    • fquat -: glm -
    • -
    • fract() -: glm -
    • -
    • frexp() -: glm -
    • -
    • frustum() -: glm -
    • -
    • fvec1 -: glm -
    • -
    • fvec2 -: glm -
    • -
    • fvec3 -: glm -
    • -
    • fvec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x67.html b/doc/api/namespacemembers_0x67.html deleted file mode 100644 index bf26536a..00000000 --- a/doc/api/namespacemembers_0x67.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - g -

      -
    • gaussRand() -: glm -
    • -
    • golden_ratio() -: glm -
    • -
    • greaterThan() -: glm -
    • -
    • greaterThanEqual() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x68.html b/doc/api/namespacemembers_0x68.html deleted file mode 100644 index d765b386..00000000 --- a/doc/api/namespacemembers_0x68.html +++ /dev/null @@ -1,672 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - h -

      -
    • half_pi() -: glm -
    • -
    • hermite() -: glm -
    • -
    • higherMultiple() -: glm -
    • -
    • highestBitValue() -: glm -
    • -
    • highp_bvec1 -: glm -
    • -
    • highp_bvec2 -: glm -
    • -
    • highp_bvec3 -: glm -
    • -
    • highp_bvec4 -: glm -
    • -
    • highp_ddualquat -: glm -
    • -
    • highp_dmat2 -: glm -
    • -
    • highp_dmat2x2 -: glm -
    • -
    • highp_dmat2x3 -: glm -
    • -
    • highp_dmat2x4 -: glm -
    • -
    • highp_dmat3 -: glm -
    • -
    • highp_dmat3x2 -: glm -
    • -
    • highp_dmat3x3 -: glm -
    • -
    • highp_dmat3x4 -: glm -
    • -
    • highp_dmat4 -: glm -
    • -
    • highp_dmat4x2 -: glm -
    • -
    • highp_dmat4x3 -: glm -
    • -
    • highp_dmat4x4 -: glm -
    • -
    • highp_dquat -: glm -
    • -
    • highp_dualquat -: glm -
    • -
    • highp_dvec2 -: glm -
    • -
    • highp_dvec3 -: glm -
    • -
    • highp_dvec4 -: glm -
    • -
    • highp_f32 -: glm -
    • -
    • highp_f32mat2 -: glm -
    • -
    • highp_f32mat2x2 -: glm -
    • -
    • highp_f32mat2x3 -: glm -
    • -
    • highp_f32mat2x4 -: glm -
    • -
    • highp_f32mat3 -: glm -
    • -
    • highp_f32mat3x2 -: glm -
    • -
    • highp_f32mat3x3 -: glm -
    • -
    • highp_f32mat3x4 -: glm -
    • -
    • highp_f32mat4 -: glm -
    • -
    • highp_f32mat4x2 -: glm -
    • -
    • highp_f32mat4x3 -: glm -
    • -
    • highp_f32mat4x4 -: glm -
    • -
    • highp_f32quat -: glm -
    • -
    • highp_f32vec1 -: glm -
    • -
    • highp_f32vec2 -: glm -
    • -
    • highp_f32vec3 -: glm -
    • -
    • highp_f32vec4 -: glm -
    • -
    • highp_f64 -: glm -
    • -
    • highp_f64mat2 -: glm -
    • -
    • highp_f64mat2x2 -: glm -
    • -
    • highp_f64mat2x3 -: glm -
    • -
    • highp_f64mat2x4 -: glm -
    • -
    • highp_f64mat3 -: glm -
    • -
    • highp_f64mat3x2 -: glm -
    • -
    • highp_f64mat3x3 -: glm -
    • -
    • highp_f64mat3x4 -: glm -
    • -
    • highp_f64mat4 -: glm -
    • -
    • highp_f64mat4x2 -: glm -
    • -
    • highp_f64mat4x3 -: glm -
    • -
    • highp_f64mat4x4 -: glm -
    • -
    • highp_f64quat -: glm -
    • -
    • highp_f64vec1 -: glm -
    • -
    • highp_f64vec2 -: glm -
    • -
    • highp_f64vec3 -: glm -
    • -
    • highp_f64vec4 -: glm -
    • -
    • highp_fdualquat -: glm -
    • -
    • highp_float -: glm -
    • -
    • highp_float32 -: glm -
    • -
    • highp_float32_t -: glm -
    • -
    • highp_float64 -: glm -
    • -
    • highp_float64_t -: glm -
    • -
    • highp_fmat2 -: glm -
    • -
    • highp_fmat2x2 -: glm -
    • -
    • highp_fmat2x3 -: glm -
    • -
    • highp_fmat2x4 -: glm -
    • -
    • highp_fmat3 -: glm -
    • -
    • highp_fmat3x2 -: glm -
    • -
    • highp_fmat3x3 -: glm -
    • -
    • highp_fmat3x4 -: glm -
    • -
    • highp_fmat4 -: glm -
    • -
    • highp_fmat4x2 -: glm -
    • -
    • highp_fmat4x3 -: glm -
    • -
    • highp_fmat4x4 -: glm -
    • -
    • highp_fquat -: glm -
    • -
    • highp_fvec1 -: glm -
    • -
    • highp_fvec2 -: glm -
    • -
    • highp_fvec3 -: glm -
    • -
    • highp_fvec4 -: glm -
    • -
    • highp_i16 -: glm -
    • -
    • highp_i16vec1 -: glm -
    • -
    • highp_i16vec2 -: glm -
    • -
    • highp_i16vec3 -: glm -
    • -
    • highp_i16vec4 -: glm -
    • -
    • highp_i32 -: glm -
    • -
    • highp_i32vec1 -: glm -
    • -
    • highp_i32vec2 -: glm -
    • -
    • highp_i32vec3 -: glm -
    • -
    • highp_i32vec4 -: glm -
    • -
    • highp_i64 -: glm -
    • -
    • highp_i64vec1 -: glm -
    • -
    • highp_i64vec2 -: glm -
    • -
    • highp_i64vec3 -: glm -
    • -
    • highp_i64vec4 -: glm -
    • -
    • highp_i8 -: glm -
    • -
    • highp_i8vec1 -: glm -
    • -
    • highp_i8vec2 -: glm -
    • -
    • highp_i8vec3 -: glm -
    • -
    • highp_i8vec4 -: glm -
    • -
    • highp_imat2 -: glm -
    • -
    • highp_imat2x2 -: glm -
    • -
    • highp_imat2x3 -: glm -
    • -
    • highp_imat2x4 -: glm -
    • -
    • highp_imat3 -: glm -
    • -
    • highp_imat3x2 -: glm -
    • -
    • highp_imat3x3 -: glm -
    • -
    • highp_imat3x4 -: glm -
    • -
    • highp_imat4 -: glm -
    • -
    • highp_imat4x2 -: glm -
    • -
    • highp_imat4x3 -: glm -
    • -
    • highp_imat4x4 -: glm -
    • -
    • highp_int -: glm -
    • -
    • highp_int16 -: glm -
    • -
    • highp_int16_t -: glm -
    • -
    • highp_int32 -: glm -
    • -
    • highp_int32_t -: glm -
    • -
    • highp_int64 -: glm -
    • -
    • highp_int64_t -: glm -
    • -
    • highp_int8 -: glm -
    • -
    • highp_int8_t -: glm -
    • -
    • highp_ivec1 -: glm -
    • -
    • highp_ivec2 -: glm -
    • -
    • highp_ivec3 -: glm -
    • -
    • highp_ivec4 -: glm -
    • -
    • highp_mat2 -: glm -
    • -
    • highp_mat2x2 -: glm -
    • -
    • highp_mat2x3 -: glm -
    • -
    • highp_mat2x4 -: glm -
    • -
    • highp_mat3 -: glm -
    • -
    • highp_mat3x2 -: glm -
    • -
    • highp_mat3x3 -: glm -
    • -
    • highp_mat3x4 -: glm -
    • -
    • highp_mat4 -: glm -
    • -
    • highp_mat4x2 -: glm -
    • -
    • highp_mat4x3 -: glm -
    • -
    • highp_mat4x4 -: glm -
    • -
    • highp_quat -: glm -
    • -
    • highp_u16 -: glm -
    • -
    • highp_u16vec1 -: glm -
    • -
    • highp_u16vec2 -: glm -
    • -
    • highp_u16vec3 -: glm -
    • -
    • highp_u16vec4 -: glm -
    • -
    • highp_u32 -: glm -
    • -
    • highp_u32vec1 -: glm -
    • -
    • highp_u32vec2 -: glm -
    • -
    • highp_u32vec3 -: glm -
    • -
    • highp_u32vec4 -: glm -
    • -
    • highp_u64 -: glm -
    • -
    • highp_u64vec1 -: glm -
    • -
    • highp_u64vec2 -: glm -
    • -
    • highp_u64vec3 -: glm -
    • -
    • highp_u64vec4 -: glm -
    • -
    • highp_u8 -: glm -
    • -
    • highp_u8vec1 -: glm -
    • -
    • highp_u8vec2 -: glm -
    • -
    • highp_u8vec3 -: glm -
    • -
    • highp_u8vec4 -: glm -
    • -
    • highp_uint -: glm -
    • -
    • highp_uint16 -: glm -
    • -
    • highp_uint16_t -: glm -
    • -
    • highp_uint32 -: glm -
    • -
    • highp_uint32_t -: glm -
    • -
    • highp_uint64 -: glm -
    • -
    • highp_uint64_t -: glm -
    • -
    • highp_uint8 -: glm -
    • -
    • highp_uint8_t -: glm -
    • -
    • highp_umat2 -: glm -
    • -
    • highp_umat2x2 -: glm -
    • -
    • highp_umat2x3 -: glm -
    • -
    • highp_umat2x4 -: glm -
    • -
    • highp_umat3 -: glm -
    • -
    • highp_umat3x2 -: glm -
    • -
    • highp_umat3x3 -: glm -
    • -
    • highp_umat3x4 -: glm -
    • -
    • highp_umat4 -: glm -
    • -
    • highp_umat4x2 -: glm -
    • -
    • highp_umat4x3 -: glm -
    • -
    • highp_umat4x4 -: glm -
    • -
    • highp_uvec1 -: glm -
    • -
    • highp_uvec2 -: glm -
    • -
    • highp_uvec3 -: glm -
    • -
    • highp_uvec4 -: glm -
    • -
    • highp_vec1 -: glm -
    • -
    • highp_vec2 -: glm -
    • -
    • highp_vec3 -: glm -
    • -
    • highp_vec4 -: glm -
    • -
    • hsvColor() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x69.html b/doc/api/namespacemembers_0x69.html deleted file mode 100644 index 83aeec83..00000000 --- a/doc/api/namespacemembers_0x69.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - i -

      -
    • i16 -: glm -
    • -
    • i16vec1 -: glm -
    • -
    • i16vec2 -: glm -
    • -
    • i16vec3 -: glm -
    • -
    • i16vec4 -: glm -
    • -
    • i32 -: glm -
    • -
    • i32vec1 -: glm -
    • -
    • i32vec2 -: glm -
    • -
    • i32vec3 -: glm -
    • -
    • i32vec4 -: glm -
    • -
    • i64 -: glm -
    • -
    • i64vec1 -: glm -
    • -
    • i64vec2 -: glm -
    • -
    • i64vec3 -: glm -
    • -
    • i64vec4 -: glm -
    • -
    • i8 -: glm -
    • -
    • i8vec1 -: glm -
    • -
    • i8vec2 -: glm -
    • -
    • i8vec3 -: glm -
    • -
    • i8vec4 -: glm -
    • -
    • imat2 -: glm -
    • -
    • imat2x2 -: glm -
    • -
    • imat2x3 -: glm -
    • -
    • imat2x4 -: glm -
    • -
    • imat3 -: glm -
    • -
    • imat3x2 -: glm -
    • -
    • imat3x3 -: glm -
    • -
    • imat3x4 -: glm -
    • -
    • imat4 -: glm -
    • -
    • imat4x2 -: glm -
    • -
    • imat4x3 -: glm -
    • -
    • imat4x4 -: glm -
    • -
    • imulExtended() -: glm -
    • -
    • infinitePerspective() -: glm -
    • -
    • int1 -: glm -
    • -
    • int16 -: glm -
    • -
    • int16_t -: glm -
    • -
    • int1x1 -: glm -
    • -
    • int2 -: glm -
    • -
    • int2x2 -: glm -
    • -
    • int2x3 -: glm -
    • -
    • int2x4 -: glm -
    • -
    • int3 -: glm -
    • -
    • int32 -: glm -
    • -
    • int32_t -: glm -
    • -
    • int3x2 -: glm -
    • -
    • int3x3 -: glm -
    • -
    • int3x4 -: glm -
    • -
    • int4 -: glm -
    • -
    • int4x2 -: glm -
    • -
    • int4x3 -: glm -
    • -
    • int4x4 -: glm -
    • -
    • int64 -: glm -
    • -
    • int64_t -: glm -
    • -
    • int8 -: glm -
    • -
    • int8_t -: glm -
    • -
    • intBitsToFloat() -: glm -
    • -
    • intermediate() -: glm -
    • -
    • interpolate() -: glm -
    • -
    • intersectLineSphere() -: glm -
    • -
    • intersectLineTriangle() -: glm -
    • -
    • intersectRayPlane() -: glm -
    • -
    • intersectRaySphere() -: glm -
    • -
    • intersectRayTriangle() -: glm -
    • -
    • inverse() -: glm -
    • -
    • inversesqrt() -: glm -
    • -
    • inverseTranspose() -: glm -
    • -
    • isCompNull() -: glm -
    • -
    • isfinite() -: glm -
    • -
    • isIdentity() -: glm -
    • -
    • isinf() -: glm -
    • -
    • isnan() -: glm -
    • -
    • isNormalized() -: glm -
    • -
    • isNull() -: glm -
    • -
    • isOrthogonal() -: glm -
    • -
    • isPowerOfTwo() -: glm -
    • -
    • ivec1 -: glm -
    • -
    • ivec2 -: glm -
    • -
    • ivec3 -: glm -
    • -
    • ivec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x6c.html b/doc/api/namespacemembers_0x6c.html deleted file mode 100644 index b14463b9..00000000 --- a/doc/api/namespacemembers_0x6c.html +++ /dev/null @@ -1,717 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - l -

      -
    • l1Norm() -: glm -
    • -
    • l2Norm() -: glm -
    • -
    • ldexp() -: glm -
    • -
    • leftHanded() -: glm -
    • -
    • length() -: glm -
    • -
    • length2() -: glm -
    • -
    • lerp() -: glm -
    • -
    • lessThan() -: glm -
    • -
    • lessThanEqual() -: glm -
    • -
    • linearGradient() -: glm -
    • -
    • linearRand() -: glm -
    • -
    • ln_ln_two() -: glm -
    • -
    • ln_ten() -: glm -
    • -
    • ln_two() -: glm -
    • -
    • log() -: glm -
    • -
    • log2() -: glm -
    • -
    • lookAt() -: glm -
    • -
    • lowerMultiple() -: glm -
    • -
    • lowp_bvec1 -: glm -
    • -
    • lowp_bvec2 -: glm -
    • -
    • lowp_bvec3 -: glm -
    • -
    • lowp_bvec4 -: glm -
    • -
    • lowp_ddualquat -: glm -
    • -
    • lowp_dmat2 -: glm -
    • -
    • lowp_dmat2x2 -: glm -
    • -
    • lowp_dmat2x3 -: glm -
    • -
    • lowp_dmat2x4 -: glm -
    • -
    • lowp_dmat3 -: glm -
    • -
    • lowp_dmat3x2 -: glm -
    • -
    • lowp_dmat3x3 -: glm -
    • -
    • lowp_dmat3x4 -: glm -
    • -
    • lowp_dmat4 -: glm -
    • -
    • lowp_dmat4x2 -: glm -
    • -
    • lowp_dmat4x3 -: glm -
    • -
    • lowp_dmat4x4 -: glm -
    • -
    • lowp_dquat -: glm -
    • -
    • lowp_dualquat -: glm -
    • -
    • lowp_dvec2 -: glm -
    • -
    • lowp_dvec3 -: glm -
    • -
    • lowp_dvec4 -: glm -
    • -
    • lowp_f32 -: glm -
    • -
    • lowp_f32mat2 -: glm -
    • -
    • lowp_f32mat2x2 -: glm -
    • -
    • lowp_f32mat2x3 -: glm -
    • -
    • lowp_f32mat2x4 -: glm -
    • -
    • lowp_f32mat3 -: glm -
    • -
    • lowp_f32mat3x2 -: glm -
    • -
    • lowp_f32mat3x3 -: glm -
    • -
    • lowp_f32mat3x4 -: glm -
    • -
    • lowp_f32mat4 -: glm -
    • -
    • lowp_f32mat4x2 -: glm -
    • -
    • lowp_f32mat4x3 -: glm -
    • -
    • lowp_f32mat4x4 -: glm -
    • -
    • lowp_f32quat -: glm -
    • -
    • lowp_f32vec1 -: glm -
    • -
    • lowp_f32vec2 -: glm -
    • -
    • lowp_f32vec3 -: glm -
    • -
    • lowp_f32vec4 -: glm -
    • -
    • lowp_f64 -: glm -
    • -
    • lowp_f64mat2 -: glm -
    • -
    • lowp_f64mat2x2 -: glm -
    • -
    • lowp_f64mat2x3 -: glm -
    • -
    • lowp_f64mat2x4 -: glm -
    • -
    • lowp_f64mat3 -: glm -
    • -
    • lowp_f64mat3x2 -: glm -
    • -
    • lowp_f64mat3x3 -: glm -
    • -
    • lowp_f64mat3x4 -: glm -
    • -
    • lowp_f64mat4 -: glm -
    • -
    • lowp_f64mat4x2 -: glm -
    • -
    • lowp_f64mat4x3 -: glm -
    • -
    • lowp_f64mat4x4 -: glm -
    • -
    • lowp_f64quat -: glm -
    • -
    • lowp_f64vec1 -: glm -
    • -
    • lowp_f64vec2 -: glm -
    • -
    • lowp_f64vec3 -: glm -
    • -
    • lowp_f64vec4 -: glm -
    • -
    • lowp_fdualquat -: glm -
    • -
    • lowp_float -: glm -
    • -
    • lowp_float32 -: glm -
    • -
    • lowp_float32_t -: glm -
    • -
    • lowp_float64 -: glm -
    • -
    • lowp_float64_t -: glm -
    • -
    • lowp_fmat2 -: glm -
    • -
    • lowp_fmat2x2 -: glm -
    • -
    • lowp_fmat2x3 -: glm -
    • -
    • lowp_fmat2x4 -: glm -
    • -
    • lowp_fmat3 -: glm -
    • -
    • lowp_fmat3x2 -: glm -
    • -
    • lowp_fmat3x3 -: glm -
    • -
    • lowp_fmat3x4 -: glm -
    • -
    • lowp_fmat4 -: glm -
    • -
    • lowp_fmat4x2 -: glm -
    • -
    • lowp_fmat4x3 -: glm -
    • -
    • lowp_fmat4x4 -: glm -
    • -
    • lowp_fquat -: glm -
    • -
    • lowp_fvec1 -: glm -
    • -
    • lowp_fvec2 -: glm -
    • -
    • lowp_fvec3 -: glm -
    • -
    • lowp_fvec4 -: glm -
    • -
    • lowp_i16 -: glm -
    • -
    • lowp_i16vec1 -: glm -
    • -
    • lowp_i16vec2 -: glm -
    • -
    • lowp_i16vec3 -: glm -
    • -
    • lowp_i16vec4 -: glm -
    • -
    • lowp_i32 -: glm -
    • -
    • lowp_i32vec1 -: glm -
    • -
    • lowp_i32vec2 -: glm -
    • -
    • lowp_i32vec3 -: glm -
    • -
    • lowp_i32vec4 -: glm -
    • -
    • lowp_i64 -: glm -
    • -
    • lowp_i64vec1 -: glm -
    • -
    • lowp_i64vec2 -: glm -
    • -
    • lowp_i64vec3 -: glm -
    • -
    • lowp_i64vec4 -: glm -
    • -
    • lowp_i8 -: glm -
    • -
    • lowp_i8vec1 -: glm -
    • -
    • lowp_i8vec2 -: glm -
    • -
    • lowp_i8vec3 -: glm -
    • -
    • lowp_i8vec4 -: glm -
    • -
    • lowp_imat2 -: glm -
    • -
    • lowp_imat2x2 -: glm -
    • -
    • lowp_imat2x3 -: glm -
    • -
    • lowp_imat2x4 -: glm -
    • -
    • lowp_imat3 -: glm -
    • -
    • lowp_imat3x2 -: glm -
    • -
    • lowp_imat3x3 -: glm -
    • -
    • lowp_imat3x4 -: glm -
    • -
    • lowp_imat4 -: glm -
    • -
    • lowp_imat4x2 -: glm -
    • -
    • lowp_imat4x3 -: glm -
    • -
    • lowp_imat4x4 -: glm -
    • -
    • lowp_int -: glm -
    • -
    • lowp_int16 -: glm -
    • -
    • lowp_int16_t -: glm -
    • -
    • lowp_int32 -: glm -
    • -
    • lowp_int32_t -: glm -
    • -
    • lowp_int64 -: glm -
    • -
    • lowp_int64_t -: glm -
    • -
    • lowp_int8 -: glm -
    • -
    • lowp_int8_t -: glm -
    • -
    • lowp_ivec1 -: glm -
    • -
    • lowp_ivec2 -: glm -
    • -
    • lowp_ivec3 -: glm -
    • -
    • lowp_ivec4 -: glm -
    • -
    • lowp_mat2 -: glm -
    • -
    • lowp_mat2x2 -: glm -
    • -
    • lowp_mat2x3 -: glm -
    • -
    • lowp_mat2x4 -: glm -
    • -
    • lowp_mat3 -: glm -
    • -
    • lowp_mat3x2 -: glm -
    • -
    • lowp_mat3x3 -: glm -
    • -
    • lowp_mat3x4 -: glm -
    • -
    • lowp_mat4 -: glm -
    • -
    • lowp_mat4x2 -: glm -
    • -
    • lowp_mat4x3 -: glm -
    • -
    • lowp_mat4x4 -: glm -
    • -
    • lowp_quat -: glm -
    • -
    • lowp_u16 -: glm -
    • -
    • lowp_u16vec1 -: glm -
    • -
    • lowp_u16vec2 -: glm -
    • -
    • lowp_u16vec3 -: glm -
    • -
    • lowp_u16vec4 -: glm -
    • -
    • lowp_u32 -: glm -
    • -
    • lowp_u32vec1 -: glm -
    • -
    • lowp_u32vec2 -: glm -
    • -
    • lowp_u32vec3 -: glm -
    • -
    • lowp_u32vec4 -: glm -
    • -
    • lowp_u64 -: glm -
    • -
    • lowp_u64vec1 -: glm -
    • -
    • lowp_u64vec2 -: glm -
    • -
    • lowp_u64vec3 -: glm -
    • -
    • lowp_u64vec4 -: glm -
    • -
    • lowp_u8 -: glm -
    • -
    • lowp_u8vec1 -: glm -
    • -
    • lowp_u8vec2 -: glm -
    • -
    • lowp_u8vec3 -: glm -
    • -
    • lowp_u8vec4 -: glm -
    • -
    • lowp_uint -: glm -
    • -
    • lowp_uint16 -: glm -
    • -
    • lowp_uint16_t -: glm -
    • -
    • lowp_uint32 -: glm -
    • -
    • lowp_uint32_t -: glm -
    • -
    • lowp_uint64 -: glm -
    • -
    • lowp_uint64_t -: glm -
    • -
    • lowp_uint8 -: glm -
    • -
    • lowp_uint8_t -: glm -
    • -
    • lowp_umat2 -: glm -
    • -
    • lowp_umat2x2 -: glm -
    • -
    • lowp_umat2x3 -: glm -
    • -
    • lowp_umat2x4 -: glm -
    • -
    • lowp_umat3 -: glm -
    • -
    • lowp_umat3x2 -: glm -
    • -
    • lowp_umat3x3 -: glm -
    • -
    • lowp_umat3x4 -: glm -
    • -
    • lowp_umat4 -: glm -
    • -
    • lowp_umat4x2 -: glm -
    • -
    • lowp_umat4x3 -: glm -
    • -
    • lowp_umat4x4 -: glm -
    • -
    • lowp_uvec1 -: glm -
    • -
    • lowp_uvec2 -: glm -
    • -
    • lowp_uvec3 -: glm -
    • -
    • lowp_uvec4 -: glm -
    • -
    • lowp_vec1 -: glm -
    • -
    • lowp_vec2 -: glm -
    • -
    • lowp_vec3 -: glm -
    • -
    • lowp_vec4 -: glm -
    • -
    • luminosity() -: glm -
    • -
    • lxNorm() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x6d.html b/doc/api/namespacemembers_0x6d.html deleted file mode 100644 index 38403d9f..00000000 --- a/doc/api/namespacemembers_0x6d.html +++ /dev/null @@ -1,783 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - m -

      -
    • make_mat2() -: glm -
    • -
    • make_mat2x2() -: glm -
    • -
    • make_mat2x3() -: glm -
    • -
    • make_mat2x4() -: glm -
    • -
    • make_mat3() -: glm -
    • -
    • make_mat3x2() -: glm -
    • -
    • make_mat3x3() -: glm -
    • -
    • make_mat3x4() -: glm -
    • -
    • make_mat4() -: glm -
    • -
    • make_mat4x2() -: glm -
    • -
    • make_mat4x3() -: glm -
    • -
    • make_mat4x4() -: glm -
    • -
    • make_quat() -: glm -
    • -
    • make_vec2() -: glm -
    • -
    • make_vec3() -: glm -
    • -
    • make_vec4() -: glm -
    • -
    • mask() -: glm -
    • -
    • mat2 -: glm -
    • -
    • mat2x2 -: glm -
    • -
    • mat2x3 -: glm -
    • -
    • mat2x4 -: glm -
    • -
    • mat2x4_cast() -: glm -
    • -
    • mat3 -: glm -
    • -
    • mat3_cast() -: glm -
    • -
    • mat3x2 -: glm -
    • -
    • mat3x3 -: glm -
    • -
    • mat3x4 -: glm -
    • -
    • mat3x4_cast() -: glm -
    • -
    • mat4 -: glm -
    • -
    • mat4_cast() -: glm -
    • -
    • mat4x2 -: glm -
    • -
    • mat4x3 -: glm -
    • -
    • mat4x4 -: glm -
    • -
    • matrixCross3() -: glm -
    • -
    • matrixCross4() -: glm -
    • -
    • max() -: glm -
    • -
    • mediump_bvec1 -: glm -
    • -
    • mediump_bvec2 -: glm -
    • -
    • mediump_bvec3 -: glm -
    • -
    • mediump_bvec4 -: glm -
    • -
    • mediump_ddualquat -: glm -
    • -
    • mediump_dmat2 -: glm -
    • -
    • mediump_dmat2x2 -: glm -
    • -
    • mediump_dmat2x3 -: glm -
    • -
    • mediump_dmat2x4 -: glm -
    • -
    • mediump_dmat3 -: glm -
    • -
    • mediump_dmat3x2 -: glm -
    • -
    • mediump_dmat3x3 -: glm -
    • -
    • mediump_dmat3x4 -: glm -
    • -
    • mediump_dmat4 -: glm -
    • -
    • mediump_dmat4x2 -: glm -
    • -
    • mediump_dmat4x3 -: glm -
    • -
    • mediump_dmat4x4 -: glm -
    • -
    • mediump_dquat -: glm -
    • -
    • mediump_dualquat -: glm -
    • -
    • mediump_dvec2 -: glm -
    • -
    • mediump_dvec3 -: glm -
    • -
    • mediump_dvec4 -: glm -
    • -
    • mediump_f32 -: glm -
    • -
    • mediump_f32mat2 -: glm -
    • -
    • mediump_f32mat2x2 -: glm -
    • -
    • mediump_f32mat2x3 -: glm -
    • -
    • mediump_f32mat2x4 -: glm -
    • -
    • mediump_f32mat3 -: glm -
    • -
    • mediump_f32mat3x2 -: glm -
    • -
    • mediump_f32mat3x3 -: glm -
    • -
    • mediump_f32mat3x4 -: glm -
    • -
    • mediump_f32mat4 -: glm -
    • -
    • mediump_f32mat4x2 -: glm -
    • -
    • mediump_f32mat4x3 -: glm -
    • -
    • mediump_f32mat4x4 -: glm -
    • -
    • mediump_f32quat -: glm -
    • -
    • mediump_f32vec1 -: glm -
    • -
    • mediump_f32vec2 -: glm -
    • -
    • mediump_f32vec3 -: glm -
    • -
    • mediump_f32vec4 -: glm -
    • -
    • mediump_f64 -: glm -
    • -
    • mediump_f64mat2 -: glm -
    • -
    • mediump_f64mat2x2 -: glm -
    • -
    • mediump_f64mat2x3 -: glm -
    • -
    • mediump_f64mat2x4 -: glm -
    • -
    • mediump_f64mat3 -: glm -
    • -
    • mediump_f64mat3x2 -: glm -
    • -
    • mediump_f64mat3x3 -: glm -
    • -
    • mediump_f64mat3x4 -: glm -
    • -
    • mediump_f64mat4 -: glm -
    • -
    • mediump_f64mat4x2 -: glm -
    • -
    • mediump_f64mat4x3 -: glm -
    • -
    • mediump_f64mat4x4 -: glm -
    • -
    • mediump_f64quat -: glm -
    • -
    • mediump_f64vec1 -: glm -
    • -
    • mediump_f64vec2 -: glm -
    • -
    • mediump_f64vec3 -: glm -
    • -
    • mediump_f64vec4 -: glm -
    • -
    • mediump_fdualquat -: glm -
    • -
    • mediump_float -: glm -
    • -
    • mediump_float32 -: glm -
    • -
    • mediump_float32_t -: glm -
    • -
    • mediump_float64 -: glm -
    • -
    • mediump_float64_t -: glm -
    • -
    • mediump_fmat2 -: glm -
    • -
    • mediump_fmat2x2 -: glm -
    • -
    • mediump_fmat2x3 -: glm -
    • -
    • mediump_fmat2x4 -: glm -
    • -
    • mediump_fmat3 -: glm -
    • -
    • mediump_fmat3x2 -: glm -
    • -
    • mediump_fmat3x3 -: glm -
    • -
    • mediump_fmat3x4 -: glm -
    • -
    • mediump_fmat4 -: glm -
    • -
    • mediump_fmat4x2 -: glm -
    • -
    • mediump_fmat4x3 -: glm -
    • -
    • mediump_fmat4x4 -: glm -
    • -
    • mediump_fquat -: glm -
    • -
    • mediump_fvec1 -: glm -
    • -
    • mediump_fvec2 -: glm -
    • -
    • mediump_fvec3 -: glm -
    • -
    • mediump_fvec4 -: glm -
    • -
    • mediump_i16 -: glm -
    • -
    • mediump_i16vec1 -: glm -
    • -
    • mediump_i16vec2 -: glm -
    • -
    • mediump_i16vec3 -: glm -
    • -
    • mediump_i16vec4 -: glm -
    • -
    • mediump_i32 -: glm -
    • -
    • mediump_i32vec1 -: glm -
    • -
    • mediump_i32vec2 -: glm -
    • -
    • mediump_i32vec3 -: glm -
    • -
    • mediump_i32vec4 -: glm -
    • -
    • mediump_i64 -: glm -
    • -
    • mediump_i64vec1 -: glm -
    • -
    • mediump_i64vec2 -: glm -
    • -
    • mediump_i64vec3 -: glm -
    • -
    • mediump_i64vec4 -: glm -
    • -
    • mediump_i8 -: glm -
    • -
    • mediump_i8vec1 -: glm -
    • -
    • mediump_i8vec2 -: glm -
    • -
    • mediump_i8vec3 -: glm -
    • -
    • mediump_i8vec4 -: glm -
    • -
    • mediump_imat2 -: glm -
    • -
    • mediump_imat2x2 -: glm -
    • -
    • mediump_imat2x3 -: glm -
    • -
    • mediump_imat2x4 -: glm -
    • -
    • mediump_imat3 -: glm -
    • -
    • mediump_imat3x2 -: glm -
    • -
    • mediump_imat3x3 -: glm -
    • -
    • mediump_imat3x4 -: glm -
    • -
    • mediump_imat4 -: glm -
    • -
    • mediump_imat4x2 -: glm -
    • -
    • mediump_imat4x3 -: glm -
    • -
    • mediump_imat4x4 -: glm -
    • -
    • mediump_int -: glm -
    • -
    • mediump_int16 -: glm -
    • -
    • mediump_int16_t -: glm -
    • -
    • mediump_int32 -: glm -
    • -
    • mediump_int32_t -: glm -
    • -
    • mediump_int64 -: glm -
    • -
    • mediump_int64_t -: glm -
    • -
    • mediump_int8 -: glm -
    • -
    • mediump_int8_t -: glm -
    • -
    • mediump_ivec1 -: glm -
    • -
    • mediump_ivec2 -: glm -
    • -
    • mediump_ivec3 -: glm -
    • -
    • mediump_ivec4 -: glm -
    • -
    • mediump_mat2 -: glm -
    • -
    • mediump_mat2x2 -: glm -
    • -
    • mediump_mat2x3 -: glm -
    • -
    • mediump_mat2x4 -: glm -
    • -
    • mediump_mat3 -: glm -
    • -
    • mediump_mat3x2 -: glm -
    • -
    • mediump_mat3x3 -: glm -
    • -
    • mediump_mat3x4 -: glm -
    • -
    • mediump_mat4 -: glm -
    • -
    • mediump_mat4x2 -: glm -
    • -
    • mediump_mat4x3 -: glm -
    • -
    • mediump_mat4x4 -: glm -
    • -
    • mediump_quat -: glm -
    • -
    • mediump_u16 -: glm -
    • -
    • mediump_u16vec1 -: glm -
    • -
    • mediump_u16vec2 -: glm -
    • -
    • mediump_u16vec3 -: glm -
    • -
    • mediump_u16vec4 -: glm -
    • -
    • mediump_u32 -: glm -
    • -
    • mediump_u32vec1 -: glm -
    • -
    • mediump_u32vec2 -: glm -
    • -
    • mediump_u32vec3 -: glm -
    • -
    • mediump_u32vec4 -: glm -
    • -
    • mediump_u64 -: glm -
    • -
    • mediump_u64vec1 -: glm -
    • -
    • mediump_u64vec2 -: glm -
    • -
    • mediump_u64vec3 -: glm -
    • -
    • mediump_u64vec4 -: glm -
    • -
    • mediump_u8 -: glm -
    • -
    • mediump_u8vec1 -: glm -
    • -
    • mediump_u8vec2 -: glm -
    • -
    • mediump_u8vec3 -: glm -
    • -
    • mediump_u8vec4 -: glm -
    • -
    • mediump_uint -: glm -
    • -
    • mediump_uint16 -: glm -
    • -
    • mediump_uint16_t -: glm -
    • -
    • mediump_uint32 -: glm -
    • -
    • mediump_uint32_t -: glm -
    • -
    • mediump_uint64 -: glm -
    • -
    • mediump_uint64_t -: glm -
    • -
    • mediump_uint8 -: glm -
    • -
    • mediump_uint8_t -: glm -
    • -
    • mediump_umat2 -: glm -
    • -
    • mediump_umat2x2 -: glm -
    • -
    • mediump_umat2x3 -: glm -
    • -
    • mediump_umat2x4 -: glm -
    • -
    • mediump_umat3 -: glm -
    • -
    • mediump_umat3x2 -: glm -
    • -
    • mediump_umat3x3 -: glm -
    • -
    • mediump_umat3x4 -: glm -
    • -
    • mediump_umat4 -: glm -
    • -
    • mediump_umat4x2 -: glm -
    • -
    • mediump_umat4x3 -: glm -
    • -
    • mediump_umat4x4 -: glm -
    • -
    • mediump_uvec1 -: glm -
    • -
    • mediump_uvec2 -: glm -
    • -
    • mediump_uvec3 -: glm -
    • -
    • mediump_uvec4 -: glm -
    • -
    • mediump_vec1 -: glm -
    • -
    • mediump_vec2 -: glm -
    • -
    • mediump_vec3 -: glm -
    • -
    • mediump_vec4 -: glm -
    • -
    • min() -: glm -
    • -
    • mirrorRepeat() -: glm -
    • -
    • mix() -: glm -
    • -
    • mixedProduct() -: glm -
    • -
    • mod() -: glm -
    • -
    • modf() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x6e.html b/doc/api/namespacemembers_0x6e.html deleted file mode 100644 index 554400f9..00000000 --- a/doc/api/namespacemembers_0x6e.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - n -

      -
    • next_float() -: glm -
    • -
    • nlz() -: glm -
    • -
    • noise1() -: glm -
    • -
    • noise2() -: glm -
    • -
    • noise3() -: glm -
    • -
    • noise4() -: glm -
    • -
    • normalize() -: glm -
    • -
    • normalizeDot() -: glm -
    • -
    • not_() -: glm -
    • -
    • notEqual() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x6f.html b/doc/api/namespacemembers_0x6f.html deleted file mode 100644 index 20693e76..00000000 --- a/doc/api/namespacemembers_0x6f.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - o -

      -
    • one() -: glm -
    • -
    • one_over_pi() -: glm -
    • -
    • one_over_root_two() -: glm -
    • -
    • orientate2() -: glm -
    • -
    • orientate3() -: glm -
    • -
    • orientate4() -: glm -
    • -
    • orientation() -: glm -
    • -
    • orientedAngle() -: glm -
    • -
    • ortho() -: glm -
    • -
    • orthonormalize() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x70.html b/doc/api/namespacemembers_0x70.html deleted file mode 100644 index 5fa2e501..00000000 --- a/doc/api/namespacemembers_0x70.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - p -

      -
    • packDouble2x32() -: glm -
    • -
    • packF2x11_1x10() -: glm -
    • -
    • packHalf1x16() -: glm -
    • -
    • packHalf2x16() -: glm -
    • -
    • packHalf4x16() -: glm -
    • -
    • packI3x10_1x2() -: glm -
    • -
    • packSnorm1x16() -: glm -
    • -
    • packSnorm1x8() -: glm -
    • -
    • packSnorm2x16() -: glm -
    • -
    • packSnorm2x8() -: glm -
    • -
    • packSnorm3x10_1x2() -: glm -
    • -
    • packSnorm4x16() -: glm -
    • -
    • packSnorm4x8() -: glm -
    • -
    • packU3x10_1x2() -: glm -
    • -
    • packUnorm1x16() -: glm -
    • -
    • packUnorm1x8() -: glm -
    • -
    • packUnorm2x16() -: glm -
    • -
    • packUnorm2x8() -: glm -
    • -
    • packUnorm3x10_1x2() -: glm -
    • -
    • packUnorm4x16() -: glm -
    • -
    • packUnorm4x8() -: glm -
    • -
    • perlin() -: glm -
    • -
    • perp() -: glm -
    • -
    • perspective() -: glm -
    • -
    • perspectiveFov() -: glm -
    • -
    • pi() -: glm -
    • -
    • pickMatrix() -: glm -
    • -
    • pitch() -: glm -
    • -
    • polar() -: glm -
    • -
    • pow() -: glm -
    • -
    • powerOfTwoAbove() -: glm -
    • -
    • powerOfTwoBelow() -: glm -
    • -
    • powerOfTwoNearest() -: glm -
    • -
    • prev_float() -: glm -
    • -
    • proj() -: glm -
    • -
    • proj2D() -: glm -
    • -
    • proj3D() -: glm -
    • -
    • project() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x71.html b/doc/api/namespacemembers_0x71.html deleted file mode 100644 index 4298146d..00000000 --- a/doc/api/namespacemembers_0x71.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - q -

      -
    • quarter_pi() -: glm -
    • -
    • quat -: glm -
    • -
    • quat_cast() -: glm -
    • -
    • qword -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x72.html b/doc/api/namespacemembers_0x72.html deleted file mode 100644 index bab3cc80..00000000 --- a/doc/api/namespacemembers_0x72.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - r -

      -
    • radialGradient() -: glm -
    • -
    • radians() -: glm -
    • -
    • reflect() -: glm -
    • -
    • refract() -: glm -
    • -
    • repeat() -: glm -
    • -
    • rgb2YCoCg() -: glm -
    • -
    • rgb2YCoCgR() -: glm -
    • -
    • rgbColor() -: glm -
    • -
    • rightHanded() -: glm -
    • -
    • roll() -: glm -
    • -
    • root_five() -: glm -
    • -
    • root_half_pi() -: glm -
    • -
    • root_ln_four() -: glm -
    • -
    • root_pi() -: glm -
    • -
    • root_three() -: glm -
    • -
    • root_two() -: glm -
    • -
    • root_two_pi() -: glm -
    • -
    • rotate() -: glm -
    • -
    • rotateNormalizedAxis() -: glm -
    • -
    • rotateX() -: glm -
    • -
    • rotateY() -: glm -
    • -
    • rotateZ() -: glm -
    • -
    • rotation() -: glm -
    • -
    • round() -: glm -
    • -
    • roundEven() -: glm -
    • -
    • row() -: glm -
    • -
    • rowMajor2() -: glm -
    • -
    • rowMajor3() -: glm -
    • -
    • rowMajor4() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x73.html b/doc/api/namespacemembers_0x73.html deleted file mode 100644 index 04d374e5..00000000 --- a/doc/api/namespacemembers_0x73.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - s -

      -
    • saturate() -: glm -
    • -
    • saturation() -: glm -
    • -
    • scale() -: glm -
    • -
    • scaleBias() -: glm -
    • -
    • sec() -: glm -
    • -
    • sech() -: glm -
    • -
    • shearX2D() -: glm -
    • -
    • shearX3D() -: glm -
    • -
    • shearY2D() -: glm -
    • -
    • shearY3D() -: glm -
    • -
    • shearZ3D() -: glm -
    • -
    • shortMix() -: glm -
    • -
    • sign() -: glm -
    • -
    • simplex() -: glm -
    • -
    • sin() -: glm -
    • -
    • sinh() -: glm -
    • -
    • sint -: glm -
    • -
    • size2 -: glm -
    • -
    • size2_t -: glm -
    • -
    • size3 -: glm -
    • -
    • size3_t -: glm -
    • -
    • size4 -: glm -
    • -
    • size4_t -: glm -
    • -
    • slerp() -: glm -
    • -
    • smoothstep() -: glm -
    • -
    • sphericalRand() -: glm -
    • -
    • sqrt() -: glm -
    • -
    • squad() -: glm -
    • -
    • step() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x74.html b/doc/api/namespacemembers_0x74.html deleted file mode 100644 index 9e9592c9..00000000 --- a/doc/api/namespacemembers_0x74.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - t -

      -
    • tan() -: glm -
    • -
    • tanh() -: glm -
    • -
    • third() -: glm -
    • -
    • to_string() -: glm -
    • -
    • toMat3() -: glm -
    • -
    • toMat4() -: glm -
    • -
    • toQuat() -: glm -
    • -
    • translate() -: glm -
    • -
    • triangleNormal() -: glm -
    • -
    • trunc() -: glm -
    • -
    • tweakedInfinitePerspective() -: glm -
    • -
    • two_over_pi() -: glm -
    • -
    • two_over_root_pi() -: glm -
    • -
    • two_thirds() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x75.html b/doc/api/namespacemembers_0x75.html deleted file mode 100644 index 43f6bea3..00000000 --- a/doc/api/namespacemembers_0x75.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - u -

      -
    • u16 -: glm -
    • -
    • u16vec1 -: glm -
    • -
    • u16vec2 -: glm -
    • -
    • u16vec3 -: glm -
    • -
    • u16vec4 -: glm -
    • -
    • u32 -: glm -
    • -
    • u32vec1 -: glm -
    • -
    • u32vec2 -: glm -
    • -
    • u32vec3 -: glm -
    • -
    • u32vec4 -: glm -
    • -
    • u64 -: glm -
    • -
    • u64vec1 -: glm -
    • -
    • u64vec2 -: glm -
    • -
    • u64vec3 -: glm -
    • -
    • u64vec4 -: glm -
    • -
    • u8 -: glm -
    • -
    • u8vec1 -: glm -
    • -
    • u8vec2 -: glm -
    • -
    • u8vec3 -: glm -
    • -
    • u8vec4 -: glm -
    • -
    • uaddCarry() -: glm -
    • -
    • uint -: glm -
    • -
    • uint10_10_10_2_cast() -: glm -
    • -
    • uint16 -: glm -
    • -
    • uint16_t -: glm -
    • -
    • uint32 -: glm -
    • -
    • uint32_t -: glm -
    • -
    • uint64 -: glm -
    • -
    • uint64_t -: glm -
    • -
    • uint8 -: glm -
    • -
    • uint8_t -: glm -
    • -
    • uintBitsToFloat() -: glm -
    • -
    • umat2 -: glm -
    • -
    • umat2x2 -: glm -
    • -
    • umat2x3 -: glm -
    • -
    • umat2x4 -: glm -
    • -
    • umat3 -: glm -
    • -
    • umat3x2 -: glm -
    • -
    • umat3x3 -: glm -
    • -
    • umat3x4 -: glm -
    • -
    • umat4 -: glm -
    • -
    • umat4x2 -: glm -
    • -
    • umat4x3 -: glm -
    • -
    • umat4x4 -: glm -
    • -
    • umulExtended() -: glm -
    • -
    • unpackDouble2x32() -: glm -
    • -
    • unpackF2x11_1x10() -: glm -
    • -
    • unpackHalf1x16() -: glm -
    • -
    • unpackHalf2x16() -: glm -
    • -
    • unpackHalf4x16() -: glm -
    • -
    • unpackI3x10_1x2() -: glm -
    • -
    • unpackSnorm1x16() -: glm -
    • -
    • unpackSnorm1x8() -: glm -
    • -
    • unpackSnorm2x16() -: glm -
    • -
    • unpackSnorm2x8() -: glm -
    • -
    • unpackSnorm3x10_1x2() -: glm -
    • -
    • unpackSnorm4x16() -: glm -
    • -
    • unpackSnorm4x8() -: glm -
    • -
    • unpackU3x10_1x2() -: glm -
    • -
    • unpackUnorm1x16() -: glm -
    • -
    • unpackUnorm1x8() -: glm -
    • -
    • unpackUnorm2x16() -: glm -
    • -
    • unpackUnorm2x8() -: glm -
    • -
    • unpackUnorm3x10_1x2() -: glm -
    • -
    • unpackUnorm4x16() -: glm -
    • -
    • unpackUnorm4x8() -: glm -
    • -
    • unProject() -: glm -
    • -
    • usubBorrow() -: glm -
    • -
    • uvec1 -: glm -
    • -
    • uvec2 -: glm -
    • -
    • uvec3 -: glm -
    • -
    • uvec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x76.html b/doc/api/namespacemembers_0x76.html deleted file mode 100644 index 2e22cb8a..00000000 --- a/doc/api/namespacemembers_0x76.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - v -

      -
    • value_ptr() -: glm -
    • -
    • vec1 -: glm -
    • -
    • vec2 -: glm -
    • -
    • vec3 -: glm -
    • -
    • vec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x77.html b/doc/api/namespacemembers_0x77.html deleted file mode 100644 index a93c00b7..00000000 --- a/doc/api/namespacemembers_0x77.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - w -

      -
    • word -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x79.html b/doc/api/namespacemembers_0x79.html deleted file mode 100644 index dc3932fa..00000000 --- a/doc/api/namespacemembers_0x79.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - y -

      -
    • yaw() -: glm -
    • -
    • yawPitchRoll() -: glm -
    • -
    • YCoCg2rgb() -: glm -
    • -
    • YCoCgR2rgb() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_0x7a.html b/doc/api/namespacemembers_0x7a.html deleted file mode 100644 index 7779046d..00000000 --- a/doc/api/namespacemembers_0x7a.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    - -

    - z -

      -
    • zero() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func.html b/doc/api/namespacemembers_func.html deleted file mode 100644 index 680070c7..00000000 --- a/doc/api/namespacemembers_func.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - a -

      -
    • abs() -: glm -
    • -
    • acos() -: glm -
    • -
    • acosh() -: glm -
    • -
    • acot() -: glm -
    • -
    • acoth() -: glm -
    • -
    • acsc() -: glm -
    • -
    • acsch() -: glm -
    • -
    • affineInverse() -: glm -
    • -
    • all() -: glm -
    • -
    • angle() -: glm -
    • -
    • angleAxis() -: glm -
    • -
    • any() -: glm -
    • -
    • areCollinear() -: glm -
    • -
    • areOrthogonal() -: glm -
    • -
    • areOrthonormal() -: glm -
    • -
    • asec() -: glm -
    • -
    • asech() -: glm -
    • -
    • asin() -: glm -
    • -
    • asinh() -: glm -
    • -
    • associatedMax() -: glm -
    • -
    • associatedMin() -: glm -
    • -
    • atan() -: glm -
    • -
    • atan2() -: glm -
    • -
    • atanh() -: glm -
    • -
    • axis() -: glm -
    • -
    • axisAngle() -: glm -
    • -
    • axisAngleMatrix() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x62.html b/doc/api/namespacemembers_func_0x62.html deleted file mode 100644 index ae1b9df8..00000000 --- a/doc/api/namespacemembers_func_0x62.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - b -

      -
    • ballRand() -: glm -
    • -
    • bitCount() -: glm -
    • -
    • bitfieldExtract() -: glm -
    • -
    • bitfieldInsert() -: glm -
    • -
    • bitfieldInterleave() -: glm -
    • -
    • bitfieldReverse() -: glm -
    • -
    • bitRevert() -: glm -
    • -
    • bitRotateLeft() -: glm -
    • -
    • bitRotateRight() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x63.html b/doc/api/namespacemembers_func_0x63.html deleted file mode 100644 index 2e008445..00000000 --- a/doc/api/namespacemembers_func_0x63.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - c -

      -
    • catmullRom() -: glm -
    • -
    • ceil() -: glm -
    • -
    • circularRand() -: glm -
    • -
    • clamp() -: glm -
    • -
    • closestPointOnLine() -: glm -
    • -
    • colMajor2() -: glm -
    • -
    • colMajor3() -: glm -
    • -
    • colMajor4() -: glm -
    • -
    • column() -: glm -
    • -
    • compAdd() -: glm -
    • -
    • compMax() -: glm -
    • -
    • compMin() -: glm -
    • -
    • compMul() -: glm -
    • -
    • conjugate() -: glm -
    • -
    • cos() -: glm -
    • -
    • cosh() -: glm -
    • -
    • cot() -: glm -
    • -
    • coth() -: glm -
    • -
    • cross() -: glm -
    • -
    • csc() -: glm -
    • -
    • csch() -: glm -
    • -
    • cubic() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x64.html b/doc/api/namespacemembers_func_0x64.html deleted file mode 100644 index b949664c..00000000 --- a/doc/api/namespacemembers_func_0x64.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - d -

      -
    • degrees() -: glm -
    • -
    • diagonal2x2() -: glm -
    • -
    • diagonal2x3() -: glm -
    • -
    • diagonal2x4() -: glm -
    • -
    • diagonal3x2() -: glm -
    • -
    • diagonal3x3() -: glm -
    • -
    • diagonal3x4() -: glm -
    • -
    • diagonal4x2() -: glm -
    • -
    • diagonal4x3() -: glm -
    • -
    • diagonal4x4() -: glm -
    • -
    • diskRand() -: glm -
    • -
    • distance() -: glm -
    • -
    • distance2() -: glm -
    • -
    • dot() -: glm -
    • -
    • dualquat_cast() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x65.html b/doc/api/namespacemembers_func_0x65.html deleted file mode 100644 index e18175e2..00000000 --- a/doc/api/namespacemembers_func_0x65.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - e -

      -
    • e() -: glm -
    • -
    • epsilon() -: glm -
    • -
    • epsilonEqual() -: glm -
    • -
    • epsilonNotEqual() -: glm -
    • -
    • equal() -: glm -
    • -
    • euclidean() -: glm -
    • -
    • euler() -: glm -
    • -
    • eulerAngles() -: glm -
    • -
    • eulerAngleX() -: glm -
    • -
    • eulerAngleXY() -: glm -
    • -
    • eulerAngleXZ() -: glm -
    • -
    • eulerAngleY() -: glm -
    • -
    • eulerAngleYX() -: glm -
    • -
    • eulerAngleYXZ() -: glm -
    • -
    • eulerAngleYZ() -: glm -
    • -
    • eulerAngleZ() -: glm -
    • -
    • eulerAngleZX() -: glm -
    • -
    • eulerAngleZY() -: glm -
    • -
    • exp() -: glm -
    • -
    • exp2() -: glm -
    • -
    • extend() -: glm -
    • -
    • extractMatrixRotation() -: glm -
    • -
    • extractRealComponent() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x66.html b/doc/api/namespacemembers_func_0x66.html deleted file mode 100644 index 061a0aa1..00000000 --- a/doc/api/namespacemembers_func_0x66.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - f -

      -
    • faceforward() -: glm -
    • -
    • factorial() -: glm -
    • -
    • fastAcos() -: glm -
    • -
    • fastAsin() -: glm -
    • -
    • fastAtan() -: glm -
    • -
    • fastCos() -: glm -
    • -
    • fastDistance() -: glm -
    • -
    • fastExp() -: glm -
    • -
    • fastExp2() -: glm -
    • -
    • fastInverseSqrt() -: glm -
    • -
    • fastLength() -: glm -
    • -
    • fastLn() -: glm -
    • -
    • fastLog() -: glm -
    • -
    • fastLog2() -: glm -
    • -
    • fastMix() -: glm -
    • -
    • fastNormalize() -: glm -
    • -
    • fastNormalizeDot() -: glm -
    • -
    • fastPow() -: glm -
    • -
    • fastSin() -: glm -
    • -
    • fastSqrt() -: glm -
    • -
    • fastTan() -: glm -
    • -
    • fillBitfieldWithOne() -: glm -
    • -
    • fillBitfieldWithZero() -: glm -
    • -
    • findLSB() -: glm -
    • -
    • findMSB() -: glm -
    • -
    • float_distance() -: glm -
    • -
    • floatBitsToInt() -: glm -
    • -
    • floatBitsToUint() -: glm -
    • -
    • floor() -: glm -
    • -
    • floor_log2() -: glm -
    • -
    • fma() -: glm -
    • -
    • fract() -: glm -
    • -
    • frexp() -: glm -
    • -
    • frustum() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x67.html b/doc/api/namespacemembers_func_0x67.html deleted file mode 100644 index de6a27c5..00000000 --- a/doc/api/namespacemembers_func_0x67.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - g -

      -
    • gaussRand() -: glm -
    • -
    • golden_ratio() -: glm -
    • -
    • greaterThan() -: glm -
    • -
    • greaterThanEqual() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x68.html b/doc/api/namespacemembers_func_0x68.html deleted file mode 100644 index 0a27ea95..00000000 --- a/doc/api/namespacemembers_func_0x68.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - h -

      -
    • half_pi() -: glm -
    • -
    • hermite() -: glm -
    • -
    • higherMultiple() -: glm -
    • -
    • highestBitValue() -: glm -
    • -
    • hsvColor() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x69.html b/doc/api/namespacemembers_func_0x69.html deleted file mode 100644 index 83a26b84..00000000 --- a/doc/api/namespacemembers_func_0x69.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - i -

      -
    • imulExtended() -: glm -
    • -
    • infinitePerspective() -: glm -
    • -
    • intBitsToFloat() -: glm -
    • -
    • intermediate() -: glm -
    • -
    • interpolate() -: glm -
    • -
    • intersectLineSphere() -: glm -
    • -
    • intersectLineTriangle() -: glm -
    • -
    • intersectRayPlane() -: glm -
    • -
    • intersectRaySphere() -: glm -
    • -
    • intersectRayTriangle() -: glm -
    • -
    • inverse() -: glm -
    • -
    • inversesqrt() -: glm -
    • -
    • inverseTranspose() -: glm -
    • -
    • isCompNull() -: glm -
    • -
    • isfinite() -: glm -
    • -
    • isIdentity() -: glm -
    • -
    • isinf() -: glm -
    • -
    • isnan() -: glm -
    • -
    • isNormalized() -: glm -
    • -
    • isNull() -: glm -
    • -
    • isOrthogonal() -: glm -
    • -
    • isPowerOfTwo() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x6c.html b/doc/api/namespacemembers_func_0x6c.html deleted file mode 100644 index fabaf69e..00000000 --- a/doc/api/namespacemembers_func_0x6c.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - l -

      -
    • l1Norm() -: glm -
    • -
    • l2Norm() -: glm -
    • -
    • ldexp() -: glm -
    • -
    • leftHanded() -: glm -
    • -
    • length() -: glm -
    • -
    • length2() -: glm -
    • -
    • lerp() -: glm -
    • -
    • lessThan() -: glm -
    • -
    • lessThanEqual() -: glm -
    • -
    • linearGradient() -: glm -
    • -
    • linearRand() -: glm -
    • -
    • ln_ln_two() -: glm -
    • -
    • ln_ten() -: glm -
    • -
    • ln_two() -: glm -
    • -
    • log() -: glm -
    • -
    • log2() -: glm -
    • -
    • lookAt() -: glm -
    • -
    • lowerMultiple() -: glm -
    • -
    • luminosity() -: glm -
    • -
    • lxNorm() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x6d.html b/doc/api/namespacemembers_func_0x6d.html deleted file mode 100644 index 31f4fac3..00000000 --- a/doc/api/namespacemembers_func_0x6d.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - m -

      -
    • make_mat2() -: glm -
    • -
    • make_mat2x2() -: glm -
    • -
    • make_mat2x3() -: glm -
    • -
    • make_mat2x4() -: glm -
    • -
    • make_mat3() -: glm -
    • -
    • make_mat3x2() -: glm -
    • -
    • make_mat3x3() -: glm -
    • -
    • make_mat3x4() -: glm -
    • -
    • make_mat4() -: glm -
    • -
    • make_mat4x2() -: glm -
    • -
    • make_mat4x3() -: glm -
    • -
    • make_mat4x4() -: glm -
    • -
    • make_quat() -: glm -
    • -
    • make_vec2() -: glm -
    • -
    • make_vec3() -: glm -
    • -
    • make_vec4() -: glm -
    • -
    • mask() -: glm -
    • -
    • mat2x4_cast() -: glm -
    • -
    • mat3_cast() -: glm -
    • -
    • mat3x4_cast() -: glm -
    • -
    • mat4_cast() -: glm -
    • -
    • matrixCross3() -: glm -
    • -
    • matrixCross4() -: glm -
    • -
    • max() -: glm -
    • -
    • min() -: glm -
    • -
    • mirrorRepeat() -: glm -
    • -
    • mix() -: glm -
    • -
    • mixedProduct() -: glm -
    • -
    • mod() -: glm -
    • -
    • modf() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x6e.html b/doc/api/namespacemembers_func_0x6e.html deleted file mode 100644 index 5fd8f9a2..00000000 --- a/doc/api/namespacemembers_func_0x6e.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - n -

      -
    • next_float() -: glm -
    • -
    • nlz() -: glm -
    • -
    • noise1() -: glm -
    • -
    • noise2() -: glm -
    • -
    • noise3() -: glm -
    • -
    • noise4() -: glm -
    • -
    • normalize() -: glm -
    • -
    • normalizeDot() -: glm -
    • -
    • not_() -: glm -
    • -
    • notEqual() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x6f.html b/doc/api/namespacemembers_func_0x6f.html deleted file mode 100644 index b2f80e93..00000000 --- a/doc/api/namespacemembers_func_0x6f.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - o -

      -
    • one() -: glm -
    • -
    • one_over_pi() -: glm -
    • -
    • one_over_root_two() -: glm -
    • -
    • orientate2() -: glm -
    • -
    • orientate3() -: glm -
    • -
    • orientate4() -: glm -
    • -
    • orientation() -: glm -
    • -
    • orientedAngle() -: glm -
    • -
    • ortho() -: glm -
    • -
    • orthonormalize() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x70.html b/doc/api/namespacemembers_func_0x70.html deleted file mode 100644 index 619d2480..00000000 --- a/doc/api/namespacemembers_func_0x70.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - p -

      -
    • packDouble2x32() -: glm -
    • -
    • packF2x11_1x10() -: glm -
    • -
    • packHalf1x16() -: glm -
    • -
    • packHalf2x16() -: glm -
    • -
    • packHalf4x16() -: glm -
    • -
    • packI3x10_1x2() -: glm -
    • -
    • packSnorm1x16() -: glm -
    • -
    • packSnorm1x8() -: glm -
    • -
    • packSnorm2x16() -: glm -
    • -
    • packSnorm2x8() -: glm -
    • -
    • packSnorm3x10_1x2() -: glm -
    • -
    • packSnorm4x16() -: glm -
    • -
    • packSnorm4x8() -: glm -
    • -
    • packU3x10_1x2() -: glm -
    • -
    • packUnorm1x16() -: glm -
    • -
    • packUnorm1x8() -: glm -
    • -
    • packUnorm2x16() -: glm -
    • -
    • packUnorm2x8() -: glm -
    • -
    • packUnorm3x10_1x2() -: glm -
    • -
    • packUnorm4x16() -: glm -
    • -
    • packUnorm4x8() -: glm -
    • -
    • perlin() -: glm -
    • -
    • perp() -: glm -
    • -
    • perspective() -: glm -
    • -
    • perspectiveFov() -: glm -
    • -
    • pi() -: glm -
    • -
    • pickMatrix() -: glm -
    • -
    • pitch() -: glm -
    • -
    • polar() -: glm -
    • -
    • pow() -: glm -
    • -
    • powerOfTwoAbove() -: glm -
    • -
    • powerOfTwoBelow() -: glm -
    • -
    • powerOfTwoNearest() -: glm -
    • -
    • prev_float() -: glm -
    • -
    • proj() -: glm -
    • -
    • proj2D() -: glm -
    • -
    • proj3D() -: glm -
    • -
    • project() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x71.html b/doc/api/namespacemembers_func_0x71.html deleted file mode 100644 index 8515701b..00000000 --- a/doc/api/namespacemembers_func_0x71.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - q -

      -
    • quarter_pi() -: glm -
    • -
    • quat_cast() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x72.html b/doc/api/namespacemembers_func_0x72.html deleted file mode 100644 index d4509cd9..00000000 --- a/doc/api/namespacemembers_func_0x72.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - r -

      -
    • radialGradient() -: glm -
    • -
    • radians() -: glm -
    • -
    • reflect() -: glm -
    • -
    • refract() -: glm -
    • -
    • repeat() -: glm -
    • -
    • rgb2YCoCg() -: glm -
    • -
    • rgb2YCoCgR() -: glm -
    • -
    • rgbColor() -: glm -
    • -
    • rightHanded() -: glm -
    • -
    • roll() -: glm -
    • -
    • root_five() -: glm -
    • -
    • root_half_pi() -: glm -
    • -
    • root_ln_four() -: glm -
    • -
    • root_pi() -: glm -
    • -
    • root_three() -: glm -
    • -
    • root_two() -: glm -
    • -
    • root_two_pi() -: glm -
    • -
    • rotate() -: glm -
    • -
    • rotateNormalizedAxis() -: glm -
    • -
    • rotateX() -: glm -
    • -
    • rotateY() -: glm -
    • -
    • rotateZ() -: glm -
    • -
    • rotation() -: glm -
    • -
    • round() -: glm -
    • -
    • roundEven() -: glm -
    • -
    • row() -: glm -
    • -
    • rowMajor2() -: glm -
    • -
    • rowMajor3() -: glm -
    • -
    • rowMajor4() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x73.html b/doc/api/namespacemembers_func_0x73.html deleted file mode 100644 index 23081c32..00000000 --- a/doc/api/namespacemembers_func_0x73.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - s -

      -
    • saturate() -: glm -
    • -
    • saturation() -: glm -
    • -
    • scale() -: glm -
    • -
    • scaleBias() -: glm -
    • -
    • sec() -: glm -
    • -
    • sech() -: glm -
    • -
    • shearX2D() -: glm -
    • -
    • shearX3D() -: glm -
    • -
    • shearY2D() -: glm -
    • -
    • shearY3D() -: glm -
    • -
    • shearZ3D() -: glm -
    • -
    • shortMix() -: glm -
    • -
    • sign() -: glm -
    • -
    • simplex() -: glm -
    • -
    • sin() -: glm -
    • -
    • sinh() -: glm -
    • -
    • slerp() -: glm -
    • -
    • smoothstep() -: glm -
    • -
    • sphericalRand() -: glm -
    • -
    • sqrt() -: glm -
    • -
    • squad() -: glm -
    • -
    • step() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x74.html b/doc/api/namespacemembers_func_0x74.html deleted file mode 100644 index 9c98b0bd..00000000 --- a/doc/api/namespacemembers_func_0x74.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - t -

      -
    • tan() -: glm -
    • -
    • tanh() -: glm -
    • -
    • third() -: glm -
    • -
    • to_string() -: glm -
    • -
    • toMat3() -: glm -
    • -
    • toMat4() -: glm -
    • -
    • toQuat() -: glm -
    • -
    • translate() -: glm -
    • -
    • triangleNormal() -: glm -
    • -
    • trunc() -: glm -
    • -
    • tweakedInfinitePerspective() -: glm -
    • -
    • two_over_pi() -: glm -
    • -
    • two_over_root_pi() -: glm -
    • -
    • two_thirds() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x75.html b/doc/api/namespacemembers_func_0x75.html deleted file mode 100644 index a9d16776..00000000 --- a/doc/api/namespacemembers_func_0x75.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - u -

      -
    • uaddCarry() -: glm -
    • -
    • uint10_10_10_2_cast() -: glm -
    • -
    • uintBitsToFloat() -: glm -
    • -
    • umulExtended() -: glm -
    • -
    • unpackDouble2x32() -: glm -
    • -
    • unpackF2x11_1x10() -: glm -
    • -
    • unpackHalf1x16() -: glm -
    • -
    • unpackHalf2x16() -: glm -
    • -
    • unpackHalf4x16() -: glm -
    • -
    • unpackI3x10_1x2() -: glm -
    • -
    • unpackSnorm1x16() -: glm -
    • -
    • unpackSnorm1x8() -: glm -
    • -
    • unpackSnorm2x16() -: glm -
    • -
    • unpackSnorm2x8() -: glm -
    • -
    • unpackSnorm3x10_1x2() -: glm -
    • -
    • unpackSnorm4x16() -: glm -
    • -
    • unpackSnorm4x8() -: glm -
    • -
    • unpackU3x10_1x2() -: glm -
    • -
    • unpackUnorm1x16() -: glm -
    • -
    • unpackUnorm1x8() -: glm -
    • -
    • unpackUnorm2x16() -: glm -
    • -
    • unpackUnorm2x8() -: glm -
    • -
    • unpackUnorm3x10_1x2() -: glm -
    • -
    • unpackUnorm4x16() -: glm -
    • -
    • unpackUnorm4x8() -: glm -
    • -
    • unProject() -: glm -
    • -
    • usubBorrow() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x76.html b/doc/api/namespacemembers_func_0x76.html deleted file mode 100644 index bb195a09..00000000 --- a/doc/api/namespacemembers_func_0x76.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - v -

      -
    • value_ptr() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x79.html b/doc/api/namespacemembers_func_0x79.html deleted file mode 100644 index f1b60bc7..00000000 --- a/doc/api/namespacemembers_func_0x79.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - y -

      -
    • yaw() -: glm -
    • -
    • yawPitchRoll() -: glm -
    • -
    • YCoCg2rgb() -: glm -
    • -
    • YCoCgR2rgb() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_func_0x7a.html b/doc/api/namespacemembers_func_0x7a.html deleted file mode 100644 index 084040a0..00000000 --- a/doc/api/namespacemembers_func_0x7a.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - z -

      -
    • zero() -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type.html b/doc/api/namespacemembers_type.html deleted file mode 100644 index 1ea6fb44..00000000 --- a/doc/api/namespacemembers_type.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - b -

      -
    • bool1 -: glm -
    • -
    • bool1x1 -: glm -
    • -
    • bool2 -: glm -
    • -
    • bool2x2 -: glm -
    • -
    • bool2x3 -: glm -
    • -
    • bool2x4 -: glm -
    • -
    • bool3 -: glm -
    • -
    • bool3x2 -: glm -
    • -
    • bool3x3 -: glm -
    • -
    • bool3x4 -: glm -
    • -
    • bool4 -: glm -
    • -
    • bool4x2 -: glm -
    • -
    • bool4x3 -: glm -
    • -
    • bool4x4 -: glm -
    • -
    • bvec1 -: glm -
    • -
    • bvec2 -: glm -
    • -
    • bvec3 -: glm -
    • -
    • bvec4 -: glm -
    • -
    • byte -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x64.html b/doc/api/namespacemembers_type_0x64.html deleted file mode 100644 index 7eddbe8e..00000000 --- a/doc/api/namespacemembers_type_0x64.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - d -

      -
    • ddualquat -: glm -
    • -
    • dmat2 -: glm -
    • -
    • dmat2x2 -: glm -
    • -
    • dmat2x3 -: glm -
    • -
    • dmat2x4 -: glm -
    • -
    • dmat3 -: glm -
    • -
    • dmat3x2 -: glm -
    • -
    • dmat3x3 -: glm -
    • -
    • dmat3x4 -: glm -
    • -
    • dmat4 -: glm -
    • -
    • dmat4x2 -: glm -
    • -
    • dmat4x3 -: glm -
    • -
    • dmat4x4 -: glm -
    • -
    • double1 -: glm -
    • -
    • double1x1 -: glm -
    • -
    • double2 -: glm -
    • -
    • double2x2 -: glm -
    • -
    • double2x3 -: glm -
    • -
    • double2x4 -: glm -
    • -
    • double3 -: glm -
    • -
    • double3x2 -: glm -
    • -
    • double3x3 -: glm -
    • -
    • double3x4 -: glm -
    • -
    • double4 -: glm -
    • -
    • double4x2 -: glm -
    • -
    • double4x3 -: glm -
    • -
    • double4x4 -: glm -
    • -
    • dquat -: glm -
    • -
    • dualquat -: glm -
    • -
    • dvec2 -: glm -
    • -
    • dvec3 -: glm -
    • -
    • dvec4 -: glm -
    • -
    • dword -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x66.html b/doc/api/namespacemembers_type_0x66.html deleted file mode 100644 index 31cc8f8d..00000000 --- a/doc/api/namespacemembers_type_0x66.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - f -

      -
    • f32 -: glm -
    • -
    • f32mat2 -: glm -
    • -
    • f32mat2x2 -: glm -
    • -
    • f32mat2x3 -: glm -
    • -
    • f32mat2x4 -: glm -
    • -
    • f32mat3 -: glm -
    • -
    • f32mat3x2 -: glm -
    • -
    • f32mat3x3 -: glm -
    • -
    • f32mat3x4 -: glm -
    • -
    • f32mat4 -: glm -
    • -
    • f32mat4x2 -: glm -
    • -
    • f32mat4x3 -: glm -
    • -
    • f32mat4x4 -: glm -
    • -
    • f32quat -: glm -
    • -
    • f32vec1 -: glm -
    • -
    • f32vec2 -: glm -
    • -
    • f32vec3 -: glm -
    • -
    • f32vec4 -: glm -
    • -
    • f64 -: glm -
    • -
    • f64mat2 -: glm -
    • -
    • f64mat2x2 -: glm -
    • -
    • f64mat2x3 -: glm -
    • -
    • f64mat2x4 -: glm -
    • -
    • f64mat3 -: glm -
    • -
    • f64mat3x2 -: glm -
    • -
    • f64mat3x3 -: glm -
    • -
    • f64mat3x4 -: glm -
    • -
    • f64mat4 -: glm -
    • -
    • f64mat4x2 -: glm -
    • -
    • f64mat4x3 -: glm -
    • -
    • f64mat4x4 -: glm -
    • -
    • f64quat -: glm -
    • -
    • f64vec1 -: glm -
    • -
    • f64vec2 -: glm -
    • -
    • f64vec3 -: glm -
    • -
    • f64vec4 -: glm -
    • -
    • fdualquat -: glm -
    • -
    • float1 -: glm -
    • -
    • float1x1 -: glm -
    • -
    • float2 -: glm -
    • -
    • float2x2 -: glm -
    • -
    • float2x3 -: glm -
    • -
    • float2x4 -: glm -
    • -
    • float3 -: glm -
    • -
    • float32 -: glm -
    • -
    • float32_t -: glm -
    • -
    • float3x2 -: glm -
    • -
    • float3x3 -: glm -
    • -
    • float3x4 -: glm -
    • -
    • float4 -: glm -
    • -
    • float4x2 -: glm -
    • -
    • float4x3 -: glm -
    • -
    • float4x4 -: glm -
    • -
    • float64 -: glm -
    • -
    • float64_t -: glm -
    • -
    • fmat2 -: glm -
    • -
    • fmat2x2 -: glm -
    • -
    • fmat2x3 -: glm -
    • -
    • fmat2x4 -: glm -
    • -
    • fmat3 -: glm -
    • -
    • fmat3x2 -: glm -
    • -
    • fmat3x3 -: glm -
    • -
    • fmat3x4 -: glm -
    • -
    • fmat4 -: glm -
    • -
    • fmat4x2 -: glm -
    • -
    • fmat4x3 -: glm -
    • -
    • fmat4x4 -: glm -
    • -
    • fquat -: glm -
    • -
    • fvec1 -: glm -
    • -
    • fvec2 -: glm -
    • -
    • fvec3 -: glm -
    • -
    • fvec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x68.html b/doc/api/namespacemembers_type_0x68.html deleted file mode 100644 index fe6c6d13..00000000 --- a/doc/api/namespacemembers_type_0x68.html +++ /dev/null @@ -1,646 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - h -

      -
    • highp_bvec1 -: glm -
    • -
    • highp_bvec2 -: glm -
    • -
    • highp_bvec3 -: glm -
    • -
    • highp_bvec4 -: glm -
    • -
    • highp_ddualquat -: glm -
    • -
    • highp_dmat2 -: glm -
    • -
    • highp_dmat2x2 -: glm -
    • -
    • highp_dmat2x3 -: glm -
    • -
    • highp_dmat2x4 -: glm -
    • -
    • highp_dmat3 -: glm -
    • -
    • highp_dmat3x2 -: glm -
    • -
    • highp_dmat3x3 -: glm -
    • -
    • highp_dmat3x4 -: glm -
    • -
    • highp_dmat4 -: glm -
    • -
    • highp_dmat4x2 -: glm -
    • -
    • highp_dmat4x3 -: glm -
    • -
    • highp_dmat4x4 -: glm -
    • -
    • highp_dquat -: glm -
    • -
    • highp_dualquat -: glm -
    • -
    • highp_dvec2 -: glm -
    • -
    • highp_dvec3 -: glm -
    • -
    • highp_dvec4 -: glm -
    • -
    • highp_f32 -: glm -
    • -
    • highp_f32mat2 -: glm -
    • -
    • highp_f32mat2x2 -: glm -
    • -
    • highp_f32mat2x3 -: glm -
    • -
    • highp_f32mat2x4 -: glm -
    • -
    • highp_f32mat3 -: glm -
    • -
    • highp_f32mat3x2 -: glm -
    • -
    • highp_f32mat3x3 -: glm -
    • -
    • highp_f32mat3x4 -: glm -
    • -
    • highp_f32mat4 -: glm -
    • -
    • highp_f32mat4x2 -: glm -
    • -
    • highp_f32mat4x3 -: glm -
    • -
    • highp_f32mat4x4 -: glm -
    • -
    • highp_f32quat -: glm -
    • -
    • highp_f32vec1 -: glm -
    • -
    • highp_f32vec2 -: glm -
    • -
    • highp_f32vec3 -: glm -
    • -
    • highp_f32vec4 -: glm -
    • -
    • highp_f64 -: glm -
    • -
    • highp_f64mat2 -: glm -
    • -
    • highp_f64mat2x2 -: glm -
    • -
    • highp_f64mat2x3 -: glm -
    • -
    • highp_f64mat2x4 -: glm -
    • -
    • highp_f64mat3 -: glm -
    • -
    • highp_f64mat3x2 -: glm -
    • -
    • highp_f64mat3x3 -: glm -
    • -
    • highp_f64mat3x4 -: glm -
    • -
    • highp_f64mat4 -: glm -
    • -
    • highp_f64mat4x2 -: glm -
    • -
    • highp_f64mat4x3 -: glm -
    • -
    • highp_f64mat4x4 -: glm -
    • -
    • highp_f64quat -: glm -
    • -
    • highp_f64vec1 -: glm -
    • -
    • highp_f64vec2 -: glm -
    • -
    • highp_f64vec3 -: glm -
    • -
    • highp_f64vec4 -: glm -
    • -
    • highp_fdualquat -: glm -
    • -
    • highp_float -: glm -
    • -
    • highp_float32 -: glm -
    • -
    • highp_float32_t -: glm -
    • -
    • highp_float64 -: glm -
    • -
    • highp_float64_t -: glm -
    • -
    • highp_fmat2 -: glm -
    • -
    • highp_fmat2x2 -: glm -
    • -
    • highp_fmat2x3 -: glm -
    • -
    • highp_fmat2x4 -: glm -
    • -
    • highp_fmat3 -: glm -
    • -
    • highp_fmat3x2 -: glm -
    • -
    • highp_fmat3x3 -: glm -
    • -
    • highp_fmat3x4 -: glm -
    • -
    • highp_fmat4 -: glm -
    • -
    • highp_fmat4x2 -: glm -
    • -
    • highp_fmat4x3 -: glm -
    • -
    • highp_fmat4x4 -: glm -
    • -
    • highp_fquat -: glm -
    • -
    • highp_fvec1 -: glm -
    • -
    • highp_fvec2 -: glm -
    • -
    • highp_fvec3 -: glm -
    • -
    • highp_fvec4 -: glm -
    • -
    • highp_i16 -: glm -
    • -
    • highp_i16vec1 -: glm -
    • -
    • highp_i16vec2 -: glm -
    • -
    • highp_i16vec3 -: glm -
    • -
    • highp_i16vec4 -: glm -
    • -
    • highp_i32 -: glm -
    • -
    • highp_i32vec1 -: glm -
    • -
    • highp_i32vec2 -: glm -
    • -
    • highp_i32vec3 -: glm -
    • -
    • highp_i32vec4 -: glm -
    • -
    • highp_i64 -: glm -
    • -
    • highp_i64vec1 -: glm -
    • -
    • highp_i64vec2 -: glm -
    • -
    • highp_i64vec3 -: glm -
    • -
    • highp_i64vec4 -: glm -
    • -
    • highp_i8 -: glm -
    • -
    • highp_i8vec1 -: glm -
    • -
    • highp_i8vec2 -: glm -
    • -
    • highp_i8vec3 -: glm -
    • -
    • highp_i8vec4 -: glm -
    • -
    • highp_imat2 -: glm -
    • -
    • highp_imat2x2 -: glm -
    • -
    • highp_imat2x3 -: glm -
    • -
    • highp_imat2x4 -: glm -
    • -
    • highp_imat3 -: glm -
    • -
    • highp_imat3x2 -: glm -
    • -
    • highp_imat3x3 -: glm -
    • -
    • highp_imat3x4 -: glm -
    • -
    • highp_imat4 -: glm -
    • -
    • highp_imat4x2 -: glm -
    • -
    • highp_imat4x3 -: glm -
    • -
    • highp_imat4x4 -: glm -
    • -
    • highp_int -: glm -
    • -
    • highp_int16 -: glm -
    • -
    • highp_int16_t -: glm -
    • -
    • highp_int32 -: glm -
    • -
    • highp_int32_t -: glm -
    • -
    • highp_int64 -: glm -
    • -
    • highp_int64_t -: glm -
    • -
    • highp_int8 -: glm -
    • -
    • highp_int8_t -: glm -
    • -
    • highp_ivec1 -: glm -
    • -
    • highp_ivec2 -: glm -
    • -
    • highp_ivec3 -: glm -
    • -
    • highp_ivec4 -: glm -
    • -
    • highp_mat2 -: glm -
    • -
    • highp_mat2x2 -: glm -
    • -
    • highp_mat2x3 -: glm -
    • -
    • highp_mat2x4 -: glm -
    • -
    • highp_mat3 -: glm -
    • -
    • highp_mat3x2 -: glm -
    • -
    • highp_mat3x3 -: glm -
    • -
    • highp_mat3x4 -: glm -
    • -
    • highp_mat4 -: glm -
    • -
    • highp_mat4x2 -: glm -
    • -
    • highp_mat4x3 -: glm -
    • -
    • highp_mat4x4 -: glm -
    • -
    • highp_quat -: glm -
    • -
    • highp_u16 -: glm -
    • -
    • highp_u16vec1 -: glm -
    • -
    • highp_u16vec2 -: glm -
    • -
    • highp_u16vec3 -: glm -
    • -
    • highp_u16vec4 -: glm -
    • -
    • highp_u32 -: glm -
    • -
    • highp_u32vec1 -: glm -
    • -
    • highp_u32vec2 -: glm -
    • -
    • highp_u32vec3 -: glm -
    • -
    • highp_u32vec4 -: glm -
    • -
    • highp_u64 -: glm -
    • -
    • highp_u64vec1 -: glm -
    • -
    • highp_u64vec2 -: glm -
    • -
    • highp_u64vec3 -: glm -
    • -
    • highp_u64vec4 -: glm -
    • -
    • highp_u8 -: glm -
    • -
    • highp_u8vec1 -: glm -
    • -
    • highp_u8vec2 -: glm -
    • -
    • highp_u8vec3 -: glm -
    • -
    • highp_u8vec4 -: glm -
    • -
    • highp_uint -: glm -
    • -
    • highp_uint16 -: glm -
    • -
    • highp_uint16_t -: glm -
    • -
    • highp_uint32 -: glm -
    • -
    • highp_uint32_t -: glm -
    • -
    • highp_uint64 -: glm -
    • -
    • highp_uint64_t -: glm -
    • -
    • highp_uint8 -: glm -
    • -
    • highp_uint8_t -: glm -
    • -
    • highp_umat2 -: glm -
    • -
    • highp_umat2x2 -: glm -
    • -
    • highp_umat2x3 -: glm -
    • -
    • highp_umat2x4 -: glm -
    • -
    • highp_umat3 -: glm -
    • -
    • highp_umat3x2 -: glm -
    • -
    • highp_umat3x3 -: glm -
    • -
    • highp_umat3x4 -: glm -
    • -
    • highp_umat4 -: glm -
    • -
    • highp_umat4x2 -: glm -
    • -
    • highp_umat4x3 -: glm -
    • -
    • highp_umat4x4 -: glm -
    • -
    • highp_uvec1 -: glm -
    • -
    • highp_uvec2 -: glm -
    • -
    • highp_uvec3 -: glm -
    • -
    • highp_uvec4 -: glm -
    • -
    • highp_vec1 -: glm -
    • -
    • highp_vec2 -: glm -
    • -
    • highp_vec3 -: glm -
    • -
    • highp_vec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x69.html b/doc/api/namespacemembers_type_0x69.html deleted file mode 100644 index fedd19b7..00000000 --- a/doc/api/namespacemembers_type_0x69.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - i -

      -
    • i16 -: glm -
    • -
    • i16vec1 -: glm -
    • -
    • i16vec2 -: glm -
    • -
    • i16vec3 -: glm -
    • -
    • i16vec4 -: glm -
    • -
    • i32 -: glm -
    • -
    • i32vec1 -: glm -
    • -
    • i32vec2 -: glm -
    • -
    • i32vec3 -: glm -
    • -
    • i32vec4 -: glm -
    • -
    • i64 -: glm -
    • -
    • i64vec1 -: glm -
    • -
    • i64vec2 -: glm -
    • -
    • i64vec3 -: glm -
    • -
    • i64vec4 -: glm -
    • -
    • i8 -: glm -
    • -
    • i8vec1 -: glm -
    • -
    • i8vec2 -: glm -
    • -
    • i8vec3 -: glm -
    • -
    • i8vec4 -: glm -
    • -
    • imat2 -: glm -
    • -
    • imat2x2 -: glm -
    • -
    • imat2x3 -: glm -
    • -
    • imat2x4 -: glm -
    • -
    • imat3 -: glm -
    • -
    • imat3x2 -: glm -
    • -
    • imat3x3 -: glm -
    • -
    • imat3x4 -: glm -
    • -
    • imat4 -: glm -
    • -
    • imat4x2 -: glm -
    • -
    • imat4x3 -: glm -
    • -
    • imat4x4 -: glm -
    • -
    • int1 -: glm -
    • -
    • int16 -: glm -
    • -
    • int16_t -: glm -
    • -
    • int1x1 -: glm -
    • -
    • int2 -: glm -
    • -
    • int2x2 -: glm -
    • -
    • int2x3 -: glm -
    • -
    • int2x4 -: glm -
    • -
    • int3 -: glm -
    • -
    • int32 -: glm -
    • -
    • int32_t -: glm -
    • -
    • int3x2 -: glm -
    • -
    • int3x3 -: glm -
    • -
    • int3x4 -: glm -
    • -
    • int4 -: glm -
    • -
    • int4x2 -: glm -
    • -
    • int4x3 -: glm -
    • -
    • int4x4 -: glm -
    • -
    • int64 -: glm -
    • -
    • int64_t -: glm -
    • -
    • int8 -: glm -
    • -
    • int8_t -: glm -
    • -
    • ivec1 -: glm -
    • -
    • ivec2 -: glm -
    • -
    • ivec3 -: glm -
    • -
    • ivec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x6c.html b/doc/api/namespacemembers_type_0x6c.html deleted file mode 100644 index 659a4e01..00000000 --- a/doc/api/namespacemembers_type_0x6c.html +++ /dev/null @@ -1,646 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - l -

      -
    • lowp_bvec1 -: glm -
    • -
    • lowp_bvec2 -: glm -
    • -
    • lowp_bvec3 -: glm -
    • -
    • lowp_bvec4 -: glm -
    • -
    • lowp_ddualquat -: glm -
    • -
    • lowp_dmat2 -: glm -
    • -
    • lowp_dmat2x2 -: glm -
    • -
    • lowp_dmat2x3 -: glm -
    • -
    • lowp_dmat2x4 -: glm -
    • -
    • lowp_dmat3 -: glm -
    • -
    • lowp_dmat3x2 -: glm -
    • -
    • lowp_dmat3x3 -: glm -
    • -
    • lowp_dmat3x4 -: glm -
    • -
    • lowp_dmat4 -: glm -
    • -
    • lowp_dmat4x2 -: glm -
    • -
    • lowp_dmat4x3 -: glm -
    • -
    • lowp_dmat4x4 -: glm -
    • -
    • lowp_dquat -: glm -
    • -
    • lowp_dualquat -: glm -
    • -
    • lowp_dvec2 -: glm -
    • -
    • lowp_dvec3 -: glm -
    • -
    • lowp_dvec4 -: glm -
    • -
    • lowp_f32 -: glm -
    • -
    • lowp_f32mat2 -: glm -
    • -
    • lowp_f32mat2x2 -: glm -
    • -
    • lowp_f32mat2x3 -: glm -
    • -
    • lowp_f32mat2x4 -: glm -
    • -
    • lowp_f32mat3 -: glm -
    • -
    • lowp_f32mat3x2 -: glm -
    • -
    • lowp_f32mat3x3 -: glm -
    • -
    • lowp_f32mat3x4 -: glm -
    • -
    • lowp_f32mat4 -: glm -
    • -
    • lowp_f32mat4x2 -: glm -
    • -
    • lowp_f32mat4x3 -: glm -
    • -
    • lowp_f32mat4x4 -: glm -
    • -
    • lowp_f32quat -: glm -
    • -
    • lowp_f32vec1 -: glm -
    • -
    • lowp_f32vec2 -: glm -
    • -
    • lowp_f32vec3 -: glm -
    • -
    • lowp_f32vec4 -: glm -
    • -
    • lowp_f64 -: glm -
    • -
    • lowp_f64mat2 -: glm -
    • -
    • lowp_f64mat2x2 -: glm -
    • -
    • lowp_f64mat2x3 -: glm -
    • -
    • lowp_f64mat2x4 -: glm -
    • -
    • lowp_f64mat3 -: glm -
    • -
    • lowp_f64mat3x2 -: glm -
    • -
    • lowp_f64mat3x3 -: glm -
    • -
    • lowp_f64mat3x4 -: glm -
    • -
    • lowp_f64mat4 -: glm -
    • -
    • lowp_f64mat4x2 -: glm -
    • -
    • lowp_f64mat4x3 -: glm -
    • -
    • lowp_f64mat4x4 -: glm -
    • -
    • lowp_f64quat -: glm -
    • -
    • lowp_f64vec1 -: glm -
    • -
    • lowp_f64vec2 -: glm -
    • -
    • lowp_f64vec3 -: glm -
    • -
    • lowp_f64vec4 -: glm -
    • -
    • lowp_fdualquat -: glm -
    • -
    • lowp_float -: glm -
    • -
    • lowp_float32 -: glm -
    • -
    • lowp_float32_t -: glm -
    • -
    • lowp_float64 -: glm -
    • -
    • lowp_float64_t -: glm -
    • -
    • lowp_fmat2 -: glm -
    • -
    • lowp_fmat2x2 -: glm -
    • -
    • lowp_fmat2x3 -: glm -
    • -
    • lowp_fmat2x4 -: glm -
    • -
    • lowp_fmat3 -: glm -
    • -
    • lowp_fmat3x2 -: glm -
    • -
    • lowp_fmat3x3 -: glm -
    • -
    • lowp_fmat3x4 -: glm -
    • -
    • lowp_fmat4 -: glm -
    • -
    • lowp_fmat4x2 -: glm -
    • -
    • lowp_fmat4x3 -: glm -
    • -
    • lowp_fmat4x4 -: glm -
    • -
    • lowp_fquat -: glm -
    • -
    • lowp_fvec1 -: glm -
    • -
    • lowp_fvec2 -: glm -
    • -
    • lowp_fvec3 -: glm -
    • -
    • lowp_fvec4 -: glm -
    • -
    • lowp_i16 -: glm -
    • -
    • lowp_i16vec1 -: glm -
    • -
    • lowp_i16vec2 -: glm -
    • -
    • lowp_i16vec3 -: glm -
    • -
    • lowp_i16vec4 -: glm -
    • -
    • lowp_i32 -: glm -
    • -
    • lowp_i32vec1 -: glm -
    • -
    • lowp_i32vec2 -: glm -
    • -
    • lowp_i32vec3 -: glm -
    • -
    • lowp_i32vec4 -: glm -
    • -
    • lowp_i64 -: glm -
    • -
    • lowp_i64vec1 -: glm -
    • -
    • lowp_i64vec2 -: glm -
    • -
    • lowp_i64vec3 -: glm -
    • -
    • lowp_i64vec4 -: glm -
    • -
    • lowp_i8 -: glm -
    • -
    • lowp_i8vec1 -: glm -
    • -
    • lowp_i8vec2 -: glm -
    • -
    • lowp_i8vec3 -: glm -
    • -
    • lowp_i8vec4 -: glm -
    • -
    • lowp_imat2 -: glm -
    • -
    • lowp_imat2x2 -: glm -
    • -
    • lowp_imat2x3 -: glm -
    • -
    • lowp_imat2x4 -: glm -
    • -
    • lowp_imat3 -: glm -
    • -
    • lowp_imat3x2 -: glm -
    • -
    • lowp_imat3x3 -: glm -
    • -
    • lowp_imat3x4 -: glm -
    • -
    • lowp_imat4 -: glm -
    • -
    • lowp_imat4x2 -: glm -
    • -
    • lowp_imat4x3 -: glm -
    • -
    • lowp_imat4x4 -: glm -
    • -
    • lowp_int -: glm -
    • -
    • lowp_int16 -: glm -
    • -
    • lowp_int16_t -: glm -
    • -
    • lowp_int32 -: glm -
    • -
    • lowp_int32_t -: glm -
    • -
    • lowp_int64 -: glm -
    • -
    • lowp_int64_t -: glm -
    • -
    • lowp_int8 -: glm -
    • -
    • lowp_int8_t -: glm -
    • -
    • lowp_ivec1 -: glm -
    • -
    • lowp_ivec2 -: glm -
    • -
    • lowp_ivec3 -: glm -
    • -
    • lowp_ivec4 -: glm -
    • -
    • lowp_mat2 -: glm -
    • -
    • lowp_mat2x2 -: glm -
    • -
    • lowp_mat2x3 -: glm -
    • -
    • lowp_mat2x4 -: glm -
    • -
    • lowp_mat3 -: glm -
    • -
    • lowp_mat3x2 -: glm -
    • -
    • lowp_mat3x3 -: glm -
    • -
    • lowp_mat3x4 -: glm -
    • -
    • lowp_mat4 -: glm -
    • -
    • lowp_mat4x2 -: glm -
    • -
    • lowp_mat4x3 -: glm -
    • -
    • lowp_mat4x4 -: glm -
    • -
    • lowp_quat -: glm -
    • -
    • lowp_u16 -: glm -
    • -
    • lowp_u16vec1 -: glm -
    • -
    • lowp_u16vec2 -: glm -
    • -
    • lowp_u16vec3 -: glm -
    • -
    • lowp_u16vec4 -: glm -
    • -
    • lowp_u32 -: glm -
    • -
    • lowp_u32vec1 -: glm -
    • -
    • lowp_u32vec2 -: glm -
    • -
    • lowp_u32vec3 -: glm -
    • -
    • lowp_u32vec4 -: glm -
    • -
    • lowp_u64 -: glm -
    • -
    • lowp_u64vec1 -: glm -
    • -
    • lowp_u64vec2 -: glm -
    • -
    • lowp_u64vec3 -: glm -
    • -
    • lowp_u64vec4 -: glm -
    • -
    • lowp_u8 -: glm -
    • -
    • lowp_u8vec1 -: glm -
    • -
    • lowp_u8vec2 -: glm -
    • -
    • lowp_u8vec3 -: glm -
    • -
    • lowp_u8vec4 -: glm -
    • -
    • lowp_uint -: glm -
    • -
    • lowp_uint16 -: glm -
    • -
    • lowp_uint16_t -: glm -
    • -
    • lowp_uint32 -: glm -
    • -
    • lowp_uint32_t -: glm -
    • -
    • lowp_uint64 -: glm -
    • -
    • lowp_uint64_t -: glm -
    • -
    • lowp_uint8 -: glm -
    • -
    • lowp_uint8_t -: glm -
    • -
    • lowp_umat2 -: glm -
    • -
    • lowp_umat2x2 -: glm -
    • -
    • lowp_umat2x3 -: glm -
    • -
    • lowp_umat2x4 -: glm -
    • -
    • lowp_umat3 -: glm -
    • -
    • lowp_umat3x2 -: glm -
    • -
    • lowp_umat3x3 -: glm -
    • -
    • lowp_umat3x4 -: glm -
    • -
    • lowp_umat4 -: glm -
    • -
    • lowp_umat4x2 -: glm -
    • -
    • lowp_umat4x3 -: glm -
    • -
    • lowp_umat4x4 -: glm -
    • -
    • lowp_uvec1 -: glm -
    • -
    • lowp_uvec2 -: glm -
    • -
    • lowp_uvec3 -: glm -
    • -
    • lowp_uvec4 -: glm -
    • -
    • lowp_vec1 -: glm -
    • -
    • lowp_vec2 -: glm -
    • -
    • lowp_vec3 -: glm -
    • -
    • lowp_vec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x6d.html b/doc/api/namespacemembers_type_0x6d.html deleted file mode 100644 index 4c0e3f8b..00000000 --- a/doc/api/namespacemembers_type_0x6d.html +++ /dev/null @@ -1,682 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - m -

      -
    • mat2 -: glm -
    • -
    • mat2x2 -: glm -
    • -
    • mat2x3 -: glm -
    • -
    • mat2x4 -: glm -
    • -
    • mat3 -: glm -
    • -
    • mat3x2 -: glm -
    • -
    • mat3x3 -: glm -
    • -
    • mat3x4 -: glm -
    • -
    • mat4 -: glm -
    • -
    • mat4x2 -: glm -
    • -
    • mat4x3 -: glm -
    • -
    • mat4x4 -: glm -
    • -
    • mediump_bvec1 -: glm -
    • -
    • mediump_bvec2 -: glm -
    • -
    • mediump_bvec3 -: glm -
    • -
    • mediump_bvec4 -: glm -
    • -
    • mediump_ddualquat -: glm -
    • -
    • mediump_dmat2 -: glm -
    • -
    • mediump_dmat2x2 -: glm -
    • -
    • mediump_dmat2x3 -: glm -
    • -
    • mediump_dmat2x4 -: glm -
    • -
    • mediump_dmat3 -: glm -
    • -
    • mediump_dmat3x2 -: glm -
    • -
    • mediump_dmat3x3 -: glm -
    • -
    • mediump_dmat3x4 -: glm -
    • -
    • mediump_dmat4 -: glm -
    • -
    • mediump_dmat4x2 -: glm -
    • -
    • mediump_dmat4x3 -: glm -
    • -
    • mediump_dmat4x4 -: glm -
    • -
    • mediump_dquat -: glm -
    • -
    • mediump_dualquat -: glm -
    • -
    • mediump_dvec2 -: glm -
    • -
    • mediump_dvec3 -: glm -
    • -
    • mediump_dvec4 -: glm -
    • -
    • mediump_f32 -: glm -
    • -
    • mediump_f32mat2 -: glm -
    • -
    • mediump_f32mat2x2 -: glm -
    • -
    • mediump_f32mat2x3 -: glm -
    • -
    • mediump_f32mat2x4 -: glm -
    • -
    • mediump_f32mat3 -: glm -
    • -
    • mediump_f32mat3x2 -: glm -
    • -
    • mediump_f32mat3x3 -: glm -
    • -
    • mediump_f32mat3x4 -: glm -
    • -
    • mediump_f32mat4 -: glm -
    • -
    • mediump_f32mat4x2 -: glm -
    • -
    • mediump_f32mat4x3 -: glm -
    • -
    • mediump_f32mat4x4 -: glm -
    • -
    • mediump_f32quat -: glm -
    • -
    • mediump_f32vec1 -: glm -
    • -
    • mediump_f32vec2 -: glm -
    • -
    • mediump_f32vec3 -: glm -
    • -
    • mediump_f32vec4 -: glm -
    • -
    • mediump_f64 -: glm -
    • -
    • mediump_f64mat2 -: glm -
    • -
    • mediump_f64mat2x2 -: glm -
    • -
    • mediump_f64mat2x3 -: glm -
    • -
    • mediump_f64mat2x4 -: glm -
    • -
    • mediump_f64mat3 -: glm -
    • -
    • mediump_f64mat3x2 -: glm -
    • -
    • mediump_f64mat3x3 -: glm -
    • -
    • mediump_f64mat3x4 -: glm -
    • -
    • mediump_f64mat4 -: glm -
    • -
    • mediump_f64mat4x2 -: glm -
    • -
    • mediump_f64mat4x3 -: glm -
    • -
    • mediump_f64mat4x4 -: glm -
    • -
    • mediump_f64quat -: glm -
    • -
    • mediump_f64vec1 -: glm -
    • -
    • mediump_f64vec2 -: glm -
    • -
    • mediump_f64vec3 -: glm -
    • -
    • mediump_f64vec4 -: glm -
    • -
    • mediump_fdualquat -: glm -
    • -
    • mediump_float -: glm -
    • -
    • mediump_float32 -: glm -
    • -
    • mediump_float32_t -: glm -
    • -
    • mediump_float64 -: glm -
    • -
    • mediump_float64_t -: glm -
    • -
    • mediump_fmat2 -: glm -
    • -
    • mediump_fmat2x2 -: glm -
    • -
    • mediump_fmat2x3 -: glm -
    • -
    • mediump_fmat2x4 -: glm -
    • -
    • mediump_fmat3 -: glm -
    • -
    • mediump_fmat3x2 -: glm -
    • -
    • mediump_fmat3x3 -: glm -
    • -
    • mediump_fmat3x4 -: glm -
    • -
    • mediump_fmat4 -: glm -
    • -
    • mediump_fmat4x2 -: glm -
    • -
    • mediump_fmat4x3 -: glm -
    • -
    • mediump_fmat4x4 -: glm -
    • -
    • mediump_fquat -: glm -
    • -
    • mediump_fvec1 -: glm -
    • -
    • mediump_fvec2 -: glm -
    • -
    • mediump_fvec3 -: glm -
    • -
    • mediump_fvec4 -: glm -
    • -
    • mediump_i16 -: glm -
    • -
    • mediump_i16vec1 -: glm -
    • -
    • mediump_i16vec2 -: glm -
    • -
    • mediump_i16vec3 -: glm -
    • -
    • mediump_i16vec4 -: glm -
    • -
    • mediump_i32 -: glm -
    • -
    • mediump_i32vec1 -: glm -
    • -
    • mediump_i32vec2 -: glm -
    • -
    • mediump_i32vec3 -: glm -
    • -
    • mediump_i32vec4 -: glm -
    • -
    • mediump_i64 -: glm -
    • -
    • mediump_i64vec1 -: glm -
    • -
    • mediump_i64vec2 -: glm -
    • -
    • mediump_i64vec3 -: glm -
    • -
    • mediump_i64vec4 -: glm -
    • -
    • mediump_i8 -: glm -
    • -
    • mediump_i8vec1 -: glm -
    • -
    • mediump_i8vec2 -: glm -
    • -
    • mediump_i8vec3 -: glm -
    • -
    • mediump_i8vec4 -: glm -
    • -
    • mediump_imat2 -: glm -
    • -
    • mediump_imat2x2 -: glm -
    • -
    • mediump_imat2x3 -: glm -
    • -
    • mediump_imat2x4 -: glm -
    • -
    • mediump_imat3 -: glm -
    • -
    • mediump_imat3x2 -: glm -
    • -
    • mediump_imat3x3 -: glm -
    • -
    • mediump_imat3x4 -: glm -
    • -
    • mediump_imat4 -: glm -
    • -
    • mediump_imat4x2 -: glm -
    • -
    • mediump_imat4x3 -: glm -
    • -
    • mediump_imat4x4 -: glm -
    • -
    • mediump_int -: glm -
    • -
    • mediump_int16 -: glm -
    • -
    • mediump_int16_t -: glm -
    • -
    • mediump_int32 -: glm -
    • -
    • mediump_int32_t -: glm -
    • -
    • mediump_int64 -: glm -
    • -
    • mediump_int64_t -: glm -
    • -
    • mediump_int8 -: glm -
    • -
    • mediump_int8_t -: glm -
    • -
    • mediump_ivec1 -: glm -
    • -
    • mediump_ivec2 -: glm -
    • -
    • mediump_ivec3 -: glm -
    • -
    • mediump_ivec4 -: glm -
    • -
    • mediump_mat2 -: glm -
    • -
    • mediump_mat2x2 -: glm -
    • -
    • mediump_mat2x3 -: glm -
    • -
    • mediump_mat2x4 -: glm -
    • -
    • mediump_mat3 -: glm -
    • -
    • mediump_mat3x2 -: glm -
    • -
    • mediump_mat3x3 -: glm -
    • -
    • mediump_mat3x4 -: glm -
    • -
    • mediump_mat4 -: glm -
    • -
    • mediump_mat4x2 -: glm -
    • -
    • mediump_mat4x3 -: glm -
    • -
    • mediump_mat4x4 -: glm -
    • -
    • mediump_quat -: glm -
    • -
    • mediump_u16 -: glm -
    • -
    • mediump_u16vec1 -: glm -
    • -
    • mediump_u16vec2 -: glm -
    • -
    • mediump_u16vec3 -: glm -
    • -
    • mediump_u16vec4 -: glm -
    • -
    • mediump_u32 -: glm -
    • -
    • mediump_u32vec1 -: glm -
    • -
    • mediump_u32vec2 -: glm -
    • -
    • mediump_u32vec3 -: glm -
    • -
    • mediump_u32vec4 -: glm -
    • -
    • mediump_u64 -: glm -
    • -
    • mediump_u64vec1 -: glm -
    • -
    • mediump_u64vec2 -: glm -
    • -
    • mediump_u64vec3 -: glm -
    • -
    • mediump_u64vec4 -: glm -
    • -
    • mediump_u8 -: glm -
    • -
    • mediump_u8vec1 -: glm -
    • -
    • mediump_u8vec2 -: glm -
    • -
    • mediump_u8vec3 -: glm -
    • -
    • mediump_u8vec4 -: glm -
    • -
    • mediump_uint -: glm -
    • -
    • mediump_uint16 -: glm -
    • -
    • mediump_uint16_t -: glm -
    • -
    • mediump_uint32 -: glm -
    • -
    • mediump_uint32_t -: glm -
    • -
    • mediump_uint64 -: glm -
    • -
    • mediump_uint64_t -: glm -
    • -
    • mediump_uint8 -: glm -
    • -
    • mediump_uint8_t -: glm -
    • -
    • mediump_umat2 -: glm -
    • -
    • mediump_umat2x2 -: glm -
    • -
    • mediump_umat2x3 -: glm -
    • -
    • mediump_umat2x4 -: glm -
    • -
    • mediump_umat3 -: glm -
    • -
    • mediump_umat3x2 -: glm -
    • -
    • mediump_umat3x3 -: glm -
    • -
    • mediump_umat3x4 -: glm -
    • -
    • mediump_umat4 -: glm -
    • -
    • mediump_umat4x2 -: glm -
    • -
    • mediump_umat4x3 -: glm -
    • -
    • mediump_umat4x4 -: glm -
    • -
    • mediump_uvec1 -: glm -
    • -
    • mediump_uvec2 -: glm -
    • -
    • mediump_uvec3 -: glm -
    • -
    • mediump_uvec4 -: glm -
    • -
    • mediump_vec1 -: glm -
    • -
    • mediump_vec2 -: glm -
    • -
    • mediump_vec3 -: glm -
    • -
    • mediump_vec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x71.html b/doc/api/namespacemembers_type_0x71.html deleted file mode 100644 index 43a34e84..00000000 --- a/doc/api/namespacemembers_type_0x71.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - q -

      -
    • quat -: glm -
    • -
    • qword -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x73.html b/doc/api/namespacemembers_type_0x73.html deleted file mode 100644 index 188b7248..00000000 --- a/doc/api/namespacemembers_type_0x73.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - s -

      -
    • sint -: glm -
    • -
    • size2 -: glm -
    • -
    • size2_t -: glm -
    • -
    • size3 -: glm -
    • -
    • size3_t -: glm -
    • -
    • size4 -: glm -
    • -
    • size4_t -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x75.html b/doc/api/namespacemembers_type_0x75.html deleted file mode 100644 index 9bb5d7ea..00000000 --- a/doc/api/namespacemembers_type_0x75.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - u -

      -
    • u16 -: glm -
    • -
    • u16vec1 -: glm -
    • -
    • u16vec2 -: glm -
    • -
    • u16vec3 -: glm -
    • -
    • u16vec4 -: glm -
    • -
    • u32 -: glm -
    • -
    • u32vec1 -: glm -
    • -
    • u32vec2 -: glm -
    • -
    • u32vec3 -: glm -
    • -
    • u32vec4 -: glm -
    • -
    • u64 -: glm -
    • -
    • u64vec1 -: glm -
    • -
    • u64vec2 -: glm -
    • -
    • u64vec3 -: glm -
    • -
    • u64vec4 -: glm -
    • -
    • u8 -: glm -
    • -
    • u8vec1 -: glm -
    • -
    • u8vec2 -: glm -
    • -
    • u8vec3 -: glm -
    • -
    • u8vec4 -: glm -
    • -
    • uint -: glm -
    • -
    • uint16 -: glm -
    • -
    • uint16_t -: glm -
    • -
    • uint32 -: glm -
    • -
    • uint32_t -: glm -
    • -
    • uint64 -: glm -
    • -
    • uint64_t -: glm -
    • -
    • uint8 -: glm -
    • -
    • uint8_t -: glm -
    • -
    • umat2 -: glm -
    • -
    • umat2x2 -: glm -
    • -
    • umat2x3 -: glm -
    • -
    • umat2x4 -: glm -
    • -
    • umat3 -: glm -
    • -
    • umat3x2 -: glm -
    • -
    • umat3x3 -: glm -
    • -
    • umat3x4 -: glm -
    • -
    • umat4 -: glm -
    • -
    • umat4x2 -: glm -
    • -
    • umat4x3 -: glm -
    • -
    • umat4x4 -: glm -
    • -
    • uvec1 -: glm -
    • -
    • uvec2 -: glm -
    • -
    • uvec3 -: glm -
    • -
    • uvec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x76.html b/doc/api/namespacemembers_type_0x76.html deleted file mode 100644 index 5b4d15f1..00000000 --- a/doc/api/namespacemembers_type_0x76.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - v -

      -
    • vec1 -: glm -
    • -
    • vec2 -: glm -
    • -
    • vec3 -: glm -
    • -
    • vec4 -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespacemembers_type_0x77.html b/doc/api/namespacemembers_type_0x77.html deleted file mode 100644 index c3d11953..00000000 --- a/doc/api/namespacemembers_type_0x77.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - -GLM: Namespace Members - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - - - -
    -
    -  - -

    - w -

      -
    • word -: glm -
    • -
    -
    - - - - diff --git a/doc/api/namespaces.html b/doc/api/namespaces.html deleted file mode 100644 index 79a5cccf..00000000 --- a/doc/api/namespaces.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - -GLM: Namespace List - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - - -
    -
    -
    -
    Namespace List
    -
    -
    -
    Here is a list of all documented namespaces with brief descriptions:
    - - -
    \NglmOpenGL Mathematics (glm.g-truc.net)
    -
    -
    - - - - diff --git a/doc/api/pages.html b/doc/api/pages.html deleted file mode 100644 index 01070273..00000000 --- a/doc/api/pages.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -GLM: Related Pages - - - - - - -
    -
    - - - - - - -
    -
    GLM -  0.9.5 -
    -
    -
    - - - -
    -
    -
    -
    Related Pages
    -
    -
    -
    Here is a list of all related documentation pages:
    -
    - - - - From c20df07879e191a4e7e45cf08d977b5081b8a145 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 25 Nov 2014 22:25:24 +0100 Subject: [PATCH 35/64] Updated license --- copying.txt | 8 ++++++-- doc/api/index.html | 16 ++++++++-------- doc/glm.docx | Bin 1069419 -> 1069591 bytes doc/glm.pdf | Bin 1239287 -> 1240162 bytes doc/pages.doxy | 16 ++++++++-------- readme.txt | 6 +++++- test/core/core_type_mat4x4.cpp | 11 +++++++++++ test/gtx/gtx_type_aligned.cpp | 25 +++++++++++++++++++++++++ 8 files changed, 63 insertions(+), 19 deletions(-) diff --git a/copying.txt b/copying.txt index efd93bab..617161d0 100644 --- a/copying.txt +++ b/copying.txt @@ -1,6 +1,6 @@ -The MIT License +The Happy Bunny License (Modified MIT License) -Copyright (c) 2005 - 2013 G-Truc Creation +Copyright (c) 2005 - 2014 G-Truc Creation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -12,6 +12,10 @@ furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +Restrictions: + By making use of the Software for military purposes, you choose to make a + Bunny unhappy. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/doc/api/index.html b/doc/api/index.html index f1f1f0c6..cc776329 100644 --- a/doc/api/index.html +++ b/doc/api/index.html @@ -40,21 +40,21 @@
    OpenGL Mathematics
    -

    OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification.

    +

    OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification.

    GLM provides classes and functions designed and implemented with the same naming conventions and functionalities than GLSL so that when a programmer knows GLSL, he knows GLM as well which makes it really easy to use.

    This project isn't limited to GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, half-based types, random numbers, noise, etc...

    This library works perfectly with OpenGL but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterisation), image processing, physic simulations and any development context that requires a simple and convenient mathematics library.

    GLM is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers:

      -
    • Apple Clang 4.0 and higher
    • -
    • CUDA 4.0 and higher
    • -
    • GCC 4.2 and higher
    • -
    • LLVM 3.0 and higher
    • -
    • Intel C++ Composer XE 2013 and higher
    • -
    • Visual Studio 2010 and higher
    • +
    • Apple Clang 4.0 and higher
    • +
    • CUDA 4.0 and higher
    • +
    • GCC 4.2 and higher
    • +
    • LLVM 3.0 and higher
    • +
    • Intel C++ Composer XE 2013 and higher
    • +
    • Visual Studio 2010 and higher
    • Any conform C++98 compiler
    Note
    The Doxygen-generated documentation will often state that a type or function is defined in a namespace that is a child of the glm namespace. Please ignore this; All publicly available types and functions can be accessed as a direct children of the glm namespace.
    -

    The source code is licenced under the MIT licence.

    +

    The source code is licenced under the Happy Bunny License (Modified MIT).

    These pages are the API reference only. For more information about how to use GLM, please have a look at the manual.

    Thanks for contributing to the project by submitting tickets for bug reports and feature requests. Any feedback is welcome at glm@g.nosp@m.-tru.nosp@m.c.net.

    diff --git a/doc/glm.docx b/doc/glm.docx index be32bfe0f2afa113809da0635e83444deb014d3b..363dc21be2719b6c798b0244d69b79281276a918 100644 GIT binary patch delta 43363 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

    <+RzL!Tx6mnw+{OI{~b1Y9=FRAui;A95mdvz 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 z

    +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%0Ar^WsqAlTzAmZ-I`fXUrK{+ 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

    <|!UhXJ0GWH($y8!?{!@4SG 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 GEdCEy%d3e1 diff --git a/doc/pages.doxy b/doc/pages.doxy index 148df167..461f26be 100644 --- a/doc/pages.doxy +++ b/doc/pages.doxy @@ -1,7 +1,7 @@ /*! @mainpage OpenGL Mathematics - OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification. + OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification. GLM provides classes and functions designed and implemented with the same naming conventions and functionalities than GLSL so that when a programmer knows GLSL, he knows GLM as well which makes it really easy to use. @@ -10,12 +10,12 @@ This library works perfectly with OpenGL but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterisation), image processing, physic simulations and any development context that requires a simple and convenient mathematics library. GLM is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers: - - Apple Clang 4.0 and higher - - CUDA 4.0 and higher - - GCC 4.2 and higher - - LLVM 3.0 and higher - - Intel C++ Composer XE 2013 and higher - - Visual Studio 2010 and higher + - Apple Clang 4.0 and higher + - CUDA 4.0 and higher + - GCC 4.2 and higher + - LLVM 3.0 and higher + - Intel C++ Composer XE 2013 and higher + - Visual Studio 2010 and higher - Any conform C++98 compiler @note The Doxygen-generated documentation will often state that a type or function @@ -23,7 +23,7 @@ Please ignore this; All publicly available types and functions can be accessed as a direct children of the glm namespace. - The source code is licenced under the MIT licence. + The source code is licenced under the Happy Bunny License (Modified MIT). These pages are the API reference only. For more information about how to use GLM, please have a look at the manual. diff --git a/readme.txt b/readme.txt index d456f022..3c4546e4 100644 --- a/readme.txt +++ b/readme.txt @@ -19,6 +19,10 @@ furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +Restrictions: + By making use of the Software for military purposes, you choose to make + a Bunny unhappy. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -37,7 +41,7 @@ More informations in GLM manual: http://glm.g-truc.net/glm.pdf ================================================================================ -GLM 0.9.6.0: 2014-11-XX +GLM 0.9.6.0: 2014-11-30 -------------------------------------------------------------------------------- Features: - Added transparent use of SIMD instructions for vec4 and mat4 types diff --git a/test/core/core_type_mat4x4.cpp b/test/core/core_type_mat4x4.cpp index cd1239a7..ad6fdc78 100644 --- a/test/core/core_type_mat4x4.cpp +++ b/test/core/core_type_mat4x4.cpp @@ -243,6 +243,15 @@ int test_ctr() return Error; } +int perf_mul() +{ + int Error = 0; + + + + return Error; +} + int main() { int Error = 0; @@ -253,5 +262,7 @@ int main() Error += test_operators(); Error += test_inverse(); + Error += perf_mul(); + return Error; } diff --git a/test/gtx/gtx_type_aligned.cpp b/test/gtx/gtx_type_aligned.cpp index 061cf3f5..bddb6cba 100644 --- a/test/gtx/gtx_type_aligned.cpp +++ b/test/gtx/gtx_type_aligned.cpp @@ -87,11 +87,36 @@ int test_decl() return Error; } +template +void print(genType const & Mat0) +{ + printf("mat4(\n"); + printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[0][0], Mat0[0][1], Mat0[0][2], Mat0[0][3]); + printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[1][0], Mat0[1][1], Mat0[1][2], Mat0[1][3]); + printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[2][0], Mat0[2][1], Mat0[2][2], Mat0[2][3]); + printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f))\n\n", Mat0[3][0], Mat0[3][1], Mat0[3][2], Mat0[3][3]); +} + +int perf_mul() +{ + int Error = 0; + + glm::mat4 A(1.0f); + glm::mat4 B(1.0f); + + glm::mat4 C = A * B; + + print(C); + + return Error; +} + int main() { int Error(0); Error += test_decl(); + Error += perf_mul(); return Error; } From 3f48ffefb08c9f6b10cf64c029cf1e10905cd530 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 26 Nov 2014 00:27:12 +0100 Subject: [PATCH 36/64] Updated license --- glm/common.hpp | 4 + glm/detail/_features.hpp | 4 + glm/detail/_fixes.hpp | 4 + glm/detail/_noise.hpp | 4 + glm/detail/_swizzle.hpp | 4 + glm/detail/_swizzle_func.hpp | 4 + glm/detail/_vectorize.hpp | 4 + glm/detail/dummy.cpp | 4 + glm/detail/func_common.hpp | 4 + glm/detail/func_common.inl | 4 + glm/detail/func_exponential.hpp | 4 + glm/detail/func_exponential.inl | 4 + glm/detail/func_geometric.hpp | 4 + glm/detail/func_geometric.inl | 4 + glm/detail/func_integer.hpp | 4 + glm/detail/func_integer.inl | 4 + glm/detail/func_matrix.hpp | 4 + glm/detail/func_matrix.inl | 4 + glm/detail/func_noise.hpp | 4 + glm/detail/func_noise.inl | 4 + glm/detail/func_packing.hpp | 4 + glm/detail/func_packing.inl | 4 + glm/detail/func_trigonometric.hpp | 4 + glm/detail/func_trigonometric.inl | 4 + glm/detail/func_vector_relational.hpp | 4 + glm/detail/func_vector_relational.inl | 4 + glm/detail/glm.cpp | 4 + glm/detail/precision.hpp | 4 + glm/detail/setup.hpp | 4 + glm/detail/type_float.hpp | 4 + glm/detail/type_gentype.hpp | 4 + glm/detail/type_gentype.inl | 4 + glm/detail/type_half.hpp | 4 + glm/detail/type_half.inl | 4 + glm/detail/type_int.hpp | 4 + glm/detail/type_mat.hpp | 4 + glm/detail/type_mat.inl | 4 + glm/detail/type_mat2x2.hpp | 4 + glm/detail/type_mat2x2.inl | 4 + glm/detail/type_mat2x3.hpp | 4 + glm/detail/type_mat2x3.inl | 4 + glm/detail/type_mat2x4.hpp | 4 + glm/detail/type_mat2x4.inl | 4 + glm/detail/type_mat3x2.hpp | 4 + glm/detail/type_mat3x2.inl | 4 + glm/detail/type_mat3x3.hpp | 4 + glm/detail/type_mat3x3.inl | 4 + glm/detail/type_mat3x4.hpp | 4 + glm/detail/type_mat3x4.inl | 4 + glm/detail/type_mat4x2.hpp | 4 + glm/detail/type_mat4x2.inl | 4 + glm/detail/type_mat4x3.hpp | 4 + glm/detail/type_mat4x3.inl | 4 + glm/detail/type_mat4x4.hpp | 4 + glm/detail/type_mat4x4.inl | 4 + glm/detail/type_vec.hpp | 4 + glm/detail/type_vec.inl | 4 + glm/detail/type_vec1.hpp | 4 + glm/detail/type_vec1.inl | 4 + glm/detail/type_vec2.hpp | 4 + glm/detail/type_vec2.inl | 4 + glm/detail/type_vec3.hpp | 4 + glm/detail/type_vec3.inl | 4 + glm/detail/type_vec4.hpp | 4 + glm/detail/type_vec4.inl | 4 + glm/exponential.hpp | 4 + glm/ext.hpp | 5 +- glm/fwd.hpp | 4 + glm/geometric.hpp | 4 + glm/glm.hpp | 4 + glm/gtc/bitfield.hpp | 4 + glm/gtc/bitfield.inl | 4 + glm/gtc/constants.hpp | 4 + glm/gtc/constants.inl | 4 + glm/gtc/epsilon.hpp | 4 + glm/gtc/epsilon.inl | 4 + glm/gtc/integer.hpp | 4 + glm/gtc/integer.inl | 4 + glm/gtc/matrix_access.hpp | 4 + glm/gtc/matrix_access.inl | 4 + glm/gtc/matrix_integer.hpp | 4 + glm/gtc/matrix_inverse.hpp | 4 + glm/gtc/matrix_inverse.inl | 4 + glm/gtc/matrix_transform.hpp | 4 + glm/gtc/matrix_transform.inl | 4 + glm/gtc/noise.hpp | 4 + glm/gtc/noise.inl | 4 + glm/gtc/packing.hpp | 4 + glm/gtc/packing.inl | 4 + glm/gtc/quaternion.hpp | 4 + glm/gtc/quaternion.inl | 4 + glm/gtc/random.hpp | 4 + glm/gtc/random.inl | 4 + glm/gtc/reciprocal.hpp | 4 + glm/gtc/reciprocal.inl | 4 + glm/gtc/round.hpp | 4 + glm/gtc/round.inl | 4 + glm/gtc/type_precision.hpp | 4 + glm/gtc/type_precision.inl | 4 + glm/gtc/type_ptr.hpp | 4 + glm/gtc/type_ptr.inl | 4 + glm/gtc/ulp.hpp | 4 + glm/gtc/ulp.inl | 4 + glm/gtc/vec1.hpp | 4 + glm/gtc/vec1.inl | 4 + glm/gtx/associated_min_max.hpp | 4 + glm/gtx/associated_min_max.inl | 37 ++++-- glm/gtx/bit.hpp | 4 + glm/gtx/bit.inl | 4 + glm/gtx/closest_point.hpp | 8 +- glm/gtx/closest_point.inl | 37 ++++-- glm/gtx/color_space.hpp | 4 + glm/gtx/color_space.inl | 37 ++++-- glm/gtx/color_space_YCoCg.hpp | 4 + glm/gtx/color_space_YCoCg.inl | 37 ++++-- glm/gtx/common.hpp | 4 + glm/gtx/common.inl | 4 + glm/gtx/compatibility.hpp | 4 + glm/gtx/compatibility.inl | 37 ++++-- glm/gtx/component_wise.hpp | 4 + glm/gtx/component_wise.inl | 37 ++++-- glm/gtx/dual_quaternion.hpp | 4 + glm/gtx/dual_quaternion.inl | 4 + glm/gtx/euler_angles.hpp | 4 + glm/gtx/euler_angles.inl | 37 ++++-- glm/gtx/extend.hpp | 4 + glm/gtx/extend.inl | 37 ++++-- glm/gtx/extented_min_max.hpp | 4 + glm/gtx/extented_min_max.inl | 37 ++++-- glm/gtx/fast_exponential.hpp | 4 + glm/gtx/fast_exponential.inl | 37 ++++-- glm/gtx/fast_square_root.hpp | 4 + glm/gtx/fast_square_root.inl | 37 ++++-- glm/gtx/fast_trigonometry.hpp | 4 + glm/gtx/fast_trigonometry.inl | 37 ++++-- glm/gtx/gradient_paint.hpp | 4 + glm/gtx/gradient_paint.inl | 37 ++++-- glm/gtx/handed_coordinate_space.hpp | 4 + glm/gtx/handed_coordinate_space.inl | 37 ++++-- glm/gtx/inertia.hpp | 113 ----------------- glm/gtx/inertia.inl | 116 ------------------ glm/gtx/integer.hpp | 4 + glm/gtx/integer.inl | 37 ++++-- glm/gtx/intersect.hpp | 4 + glm/gtx/io.hpp | 6 +- glm/gtx/io.inl | 37 ++++-- glm/gtx/log_base.hpp | 4 + glm/gtx/log_base.inl | 39 ++++-- glm/gtx/matrix_cross_product.hpp | 4 + glm/gtx/matrix_cross_product.inl | 39 ++++-- glm/gtx/matrix_decompose.hpp | 4 + glm/gtx/matrix_decompose.inl | 4 + glm/gtx/matrix_interpolation.hpp | 4 + glm/gtx/matrix_interpolation.inl | 39 ++++-- glm/gtx/matrix_major_storage.hpp | 4 + glm/gtx/matrix_major_storage.inl | 39 ++++-- glm/gtx/matrix_operation.hpp | 4 + glm/gtx/matrix_operation.inl | 39 ++++-- glm/gtx/matrix_query.hpp | 4 + glm/gtx/matrix_query.inl | 42 +++++-- glm/gtx/matrix_transform_2d.hpp | 4 + glm/gtx/matrix_transform_2d.inl | 4 + glm/gtx/mixed_product.hpp | 4 + glm/gtx/mixed_product.inl | 39 ++++-- glm/gtx/multiple.hpp | 4 + glm/gtx/multiple.inl | 42 +++++-- glm/gtx/norm.hpp | 4 + glm/gtx/norm.inl | 39 ++++-- glm/gtx/normal.hpp | 4 + glm/gtx/normal.inl | 39 ++++-- glm/gtx/normalize_dot.hpp | 4 + glm/gtx/normalize_dot.inl | 47 ++++--- glm/gtx/number_precision.hpp | 4 + glm/gtx/number_precision.inl | 39 ++++-- glm/gtx/optimum_pow.hpp | 4 + glm/gtx/optimum_pow.inl | 39 ++++-- glm/gtx/orthonormalize.hpp | 4 + glm/gtx/orthonormalize.inl | 39 ++++-- glm/gtx/perpendicular.hpp | 4 + glm/gtx/perpendicular.inl | 39 ++++-- glm/gtx/polar_coordinates.hpp | 4 + glm/gtx/polar_coordinates.inl | 39 ++++-- glm/gtx/projection.hpp | 4 + glm/gtx/projection.inl | 39 ++++-- glm/gtx/quaternion.hpp | 4 + glm/gtx/quaternion.inl | 39 ++++-- glm/gtx/range.hpp | 4 + glm/gtx/raw_data.hpp | 4 + glm/gtx/raw_data.inl | 42 +++++-- glm/gtx/rotate_normalized_axis.hpp | 4 + glm/gtx/rotate_normalized_axis.inl | 4 + glm/gtx/rotate_vector.hpp | 4 + glm/gtx/rotate_vector.inl | 39 ++++-- glm/gtx/scalar_multiplication.hpp | 4 + glm/gtx/scalar_relational.hpp | 4 + glm/gtx/scalar_relational.inl | 39 ++++-- glm/gtx/simd_mat4.hpp | 8 +- glm/gtx/simd_mat4.inl | 37 ++++-- glm/gtx/simd_quat.hpp | 6 +- glm/gtx/simd_quat.inl | 40 ++++-- glm/gtx/simd_vec4.hpp | 4 + glm/gtx/spline.hpp | 10 +- glm/gtx/spline.inl | 142 +++++++++++++--------- glm/gtx/std_based_type.hpp | 4 + glm/gtx/std_based_type.inl | 39 ++++-- glm/gtx/string_cast.hpp | 4 + glm/gtx/string_cast.inl | 39 ++++-- glm/gtx/transform.hpp | 4 + glm/gtx/transform.inl | 39 ++++-- glm/gtx/transform2.hpp | 4 + glm/gtx/transform2.inl | 39 ++++-- glm/gtx/type_aligned.hpp | 4 + glm/gtx/type_aligned.inl | 4 + glm/gtx/vector_angle.hpp | 4 + glm/gtx/vector_angle.inl | 39 ++++-- glm/gtx/vector_query.hpp | 4 + glm/gtx/vector_query.inl | 42 +++++-- glm/gtx/wrap.hpp | 4 + glm/gtx/wrap.inl | 42 +++++-- glm/integer.hpp | 4 + glm/mat2x2.hpp | 4 + glm/mat2x3.hpp | 4 + glm/mat2x4.hpp | 4 + glm/mat3x2.hpp | 4 + glm/mat3x3.hpp | 4 + glm/mat3x4.hpp | 4 + glm/mat4x2.hpp | 4 + glm/mat4x3.hpp | 4 + glm/mat4x4.hpp | 4 + glm/matrix.hpp | 4 + glm/packing.hpp | 4 + glm/trigonometric.hpp | 4 + glm/vec2.hpp | 4 + glm/vec3.hpp | 4 + glm/vec4.hpp | 4 + glm/vector_relational.hpp | 4 + test/core/core_func_common.cpp | 38 ++++-- test/core/core_func_exponential.cpp | 38 ++++-- test/core/core_func_geometric.cpp | 38 ++++-- test/core/core_func_integer.cpp | 38 ++++-- test/core/core_func_integer_bit_count.cpp | 31 +++++ test/core/core_func_integer_find_lsb.cpp | 38 ++++-- test/core/core_func_integer_find_msb.cpp | 39 ++++-- test/core/core_func_matrix.cpp | 38 ++++-- test/core/core_func_noise.cpp | 38 ++++-- test/core/core_func_packing.cpp | 38 ++++-- test/core/core_func_swizzle.cpp | 38 ++++-- test/core/core_func_trigonometric.cpp | 38 ++++-- test/core/core_func_vector_relational.cpp | 38 ++++-- test/core/core_setup_force_cxx98.cpp | 4 + test/core/core_setup_precision.cpp | 38 ++++-- test/core/core_type_cast.cpp | 38 ++++-- test/core/core_type_float.cpp | 38 ++++-- test/core/core_type_int.cpp | 38 ++++-- test/core/core_type_length.cpp | 38 ++++-- test/core/core_type_length_size.cpp | 38 ++++-- test/core/core_type_mat2x2.cpp | 38 ++++-- test/core/core_type_mat2x3.cpp | 38 ++++-- test/core/core_type_mat2x4.cpp | 38 ++++-- test/core/core_type_mat3x2.cpp | 38 ++++-- test/core/core_type_mat3x3.cpp | 38 ++++-- test/core/core_type_mat3x4.cpp | 38 ++++-- test/core/core_type_mat4x2.cpp | 38 ++++-- test/core/core_type_mat4x3.cpp | 38 ++++-- test/core/core_type_mat4x4.cpp | 38 ++++-- test/core/core_type_vec1.cpp | 38 ++++-- test/core/core_type_vec2.cpp | 38 ++++-- test/core/core_type_vec3.cpp | 38 ++++-- test/core/core_type_vec4.cpp | 38 ++++-- test/gtc/gtc_bitfield.cpp | 38 ++++-- test/gtc/gtc_constants.cpp | 38 ++++-- test/gtc/gtc_epsilon.cpp | 38 ++++-- test/gtc/gtc_integer.cpp | 38 ++++-- test/gtc/gtc_matrix_access.cpp | 38 ++++-- test/gtc/gtc_matrix_integer.cpp | 38 ++++-- test/gtc/gtc_matrix_inverse.cpp | 38 ++++-- test/gtc/gtc_matrix_transform.cpp | 38 ++++-- test/gtc/gtc_noise.cpp | 38 ++++-- test/gtc/gtc_packing.cpp | 9 +- test/gtc/gtc_quaternion.cpp | 38 ++++-- test/gtc/gtc_random.cpp | 38 ++++-- test/gtc/gtc_reciprocal.cpp | 38 ++++-- test/gtc/gtc_type_precision.cpp | 38 ++++-- test/gtc/gtc_type_ptr.cpp | 38 ++++-- test/gtc/gtc_ulp.cpp | 38 ++++-- test/gtc/gtc_vec1.cpp | 38 ++++-- test/gtx/CMakeLists.txt | 1 - test/gtx/gtx_associated_min_max.cpp | 38 ++++-- test/gtx/gtx_closest_point.cpp | 41 +++++-- test/gtx/gtx_color_space.cpp | 39 ++++-- test/gtx/gtx_color_space_YCoCg.cpp | 39 ++++-- test/gtx/gtx_common.cpp | 38 ++++-- test/gtx/gtx_compatibility.cpp | 39 ++++-- test/gtx/gtx_component_wise.cpp | 39 ++++-- test/gtx/gtx_dual_quaternion.cpp | 38 ++++-- test/gtx/gtx_euler_angle.cpp | 38 ++++-- test/gtx/gtx_extend.cpp | 39 ++++-- test/gtx/gtx_extented_min_max.cpp | 41 +++++-- test/gtx/gtx_fast_exponential.cpp | 39 ++++-- test/gtx/gtx_fast_square_root.cpp | 38 ++++-- test/gtx/gtx_fast_trigonometry.cpp | 38 ++++-- test/gtx/gtx_gradient_paint.cpp | 38 ++++-- test/gtx/gtx_handed_coordinate_space.cpp | 39 ++++-- test/gtx/gtx_inertia.cpp | 18 --- test/gtx/gtx_integer.cpp | 38 ++++-- test/gtx/gtx_intersect.cpp | 39 ++++-- test/gtx/gtx_io.cpp | 38 ++++-- test/gtx/gtx_log_base.cpp | 39 ++++-- test/gtx/gtx_matrix_cross_product.cpp | 39 ++++-- test/gtx/gtx_matrix_decompose.cpp | 38 ++++-- test/gtx/gtx_matrix_interpolation.cpp | 38 ++++-- test/gtx/gtx_matrix_major_storage.cpp | 39 ++++-- test/gtx/gtx_matrix_operation.cpp | 39 ++++-- test/gtx/gtx_matrix_query.cpp | 38 ++++-- test/gtx/gtx_matrix_transform_2d.cpp | 38 ++++-- test/gtx/gtx_multiple.cpp | 38 ++++-- test/gtx/gtx_norm.cpp | 39 ++++-- test/gtx/gtx_normal.cpp | 39 ++++-- test/gtx/gtx_normalize_dot.cpp | 39 ++++-- test/gtx/gtx_number_precision.cpp | 39 ++++-- test/gtx/gtx_optimum_pow.cpp | 40 ++++-- test/gtx/gtx_orthonormalize.cpp | 40 ++++-- test/gtx/gtx_perpendicular.cpp | 40 ++++-- test/gtx/gtx_polar_coordinates.cpp | 40 ++++-- test/gtx/gtx_projection.cpp | 40 ++++-- test/gtx/gtx_quaternion.cpp | 38 ++++-- test/gtx/gtx_range.cpp | 38 ++++-- test/gtx/gtx_rotate_normalized_axis.cpp | 10 +- test/gtx/gtx_rotate_vector.cpp | 38 ++++-- test/gtx/gtx_scalar_multiplication.cpp | 38 ++++-- test/gtx/gtx_scalar_relational.cpp | 38 ++++-- test/gtx/gtx_simd_mat4.cpp | 38 ++++-- test/gtx/gtx_simd_vec4.cpp | 38 ++++-- test/gtx/gtx_spline.cpp | 43 +++++-- test/gtx/gtx_string_cast.cpp | 38 ++++-- test/gtx/gtx_type_aligned.cpp | 38 ++++-- test/gtx/gtx_vector_angle.cpp | 38 ++++-- test/gtx/gtx_vector_query.cpp | 42 +++++-- 338 files changed, 5184 insertions(+), 1501 deletions(-) delete mode 100644 glm/gtx/inertia.hpp delete mode 100644 glm/gtx/inertia.inl delete mode 100644 test/gtx/gtx_inertia.cpp diff --git a/glm/common.hpp b/glm/common.hpp index b22e11b0..8f1c3171 100644 --- a/glm/common.hpp +++ b/glm/common.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/_features.hpp b/glm/detail/_features.hpp index fb29ffa8..51eda577 100644 --- a/glm/detail/_features.hpp +++ b/glm/detail/_features.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/_fixes.hpp b/glm/detail/_fixes.hpp index a7efceb5..6185dcbb 100644 --- a/glm/detail/_fixes.hpp +++ b/glm/detail/_fixes.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/_noise.hpp b/glm/detail/_noise.hpp index 291c6030..2184fbaf 100644 --- a/glm/detail/_noise.hpp +++ b/glm/detail/_noise.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/_swizzle.hpp b/glm/detail/_swizzle.hpp index 57e916f3..3edf6cb2 100644 --- a/glm/detail/_swizzle.hpp +++ b/glm/detail/_swizzle.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/_swizzle_func.hpp b/glm/detail/_swizzle_func.hpp index ccb0c1b4..7d725e10 100644 --- a/glm/detail/_swizzle_func.hpp +++ b/glm/detail/_swizzle_func.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/_vectorize.hpp b/glm/detail/_vectorize.hpp index 5edfc537..8eea6b87 100644 --- a/glm/detail/_vectorize.hpp +++ b/glm/detail/_vectorize.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/dummy.cpp b/glm/detail/dummy.cpp index b219079b..5d0392be 100644 --- a/glm/detail/dummy.cpp +++ b/glm/detail/dummy.cpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_common.hpp b/glm/detail/func_common.hpp index 660daf03..0cea4942 100644 --- a/glm/detail/func_common.hpp +++ b/glm/detail/func_common.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index fafa3c9d..def8b26a 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_exponential.hpp b/glm/detail/func_exponential.hpp index 550ac414..9b4840bb 100644 --- a/glm/detail/func_exponential.hpp +++ b/glm/detail/func_exponential.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_exponential.inl b/glm/detail/func_exponential.inl index f7255cde..830ac42b 100644 --- a/glm/detail/func_exponential.inl +++ b/glm/detail/func_exponential.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_geometric.hpp b/glm/detail/func_geometric.hpp index dd0b4c97..a8ab7811 100644 --- a/glm/detail/func_geometric.hpp +++ b/glm/detail/func_geometric.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_geometric.inl b/glm/detail/func_geometric.inl index 7dd60e0a..93709887 100644 --- a/glm/detail/func_geometric.inl +++ b/glm/detail/func_geometric.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_integer.hpp b/glm/detail/func_integer.hpp index 9aa55096..19401fb8 100644 --- a/glm/detail/func_integer.hpp +++ b/glm/detail/func_integer.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index 652e5d41..45e2033a 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_matrix.hpp b/glm/detail/func_matrix.hpp index 076714c3..54f86e87 100644 --- a/glm/detail/func_matrix.hpp +++ b/glm/detail/func_matrix.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_matrix.inl b/glm/detail/func_matrix.inl index 076bbb66..afefb67e 100644 --- a/glm/detail/func_matrix.inl +++ b/glm/detail/func_matrix.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_noise.hpp b/glm/detail/func_noise.hpp index e005d49d..969a4c9d 100644 --- a/glm/detail/func_noise.hpp +++ b/glm/detail/func_noise.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_noise.inl b/glm/detail/func_noise.inl index 99a3562f..8910a5ae 100644 --- a/glm/detail/func_noise.inl +++ b/glm/detail/func_noise.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_packing.hpp b/glm/detail/func_packing.hpp index 409c19b9..02d26926 100644 --- a/glm/detail/func_packing.hpp +++ b/glm/detail/func_packing.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_packing.inl b/glm/detail/func_packing.inl index 97b4a524..b37ff9aa 100644 --- a/glm/detail/func_packing.inl +++ b/glm/detail/func_packing.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_trigonometric.hpp b/glm/detail/func_trigonometric.hpp index 86c76942..c51161ae 100644 --- a/glm/detail/func_trigonometric.hpp +++ b/glm/detail/func_trigonometric.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_trigonometric.inl b/glm/detail/func_trigonometric.inl index a533b2a2..fb12081c 100644 --- a/glm/detail/func_trigonometric.inl +++ b/glm/detail/func_trigonometric.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_vector_relational.hpp b/glm/detail/func_vector_relational.hpp index 8a297520..4b2b8abb 100644 --- a/glm/detail/func_vector_relational.hpp +++ b/glm/detail/func_vector_relational.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/func_vector_relational.inl b/glm/detail/func_vector_relational.inl index de3dc8b6..692fe975 100644 --- a/glm/detail/func_vector_relational.inl +++ b/glm/detail/func_vector_relational.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/glm.cpp b/glm/detail/glm.cpp index 1ec3c79a..2e03e319 100644 --- a/glm/detail/glm.cpp +++ b/glm/detail/glm.cpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/precision.hpp b/glm/detail/precision.hpp index 33430af6..1b6d542d 100644 --- a/glm/detail/precision.hpp +++ b/glm/detail/precision.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index 784ef1c7..a5374699 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_float.hpp b/glm/detail/type_float.hpp index 82d6c366..a3d7f707 100644 --- a/glm/detail/type_float.hpp +++ b/glm/detail/type_float.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_gentype.hpp b/glm/detail/type_gentype.hpp index 4b15f0f6..c8c24f64 100644 --- a/glm/detail/type_gentype.hpp +++ b/glm/detail/type_gentype.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_gentype.inl b/glm/detail/type_gentype.inl index 692f4e4c..46571e20 100644 --- a/glm/detail/type_gentype.inl +++ b/glm/detail/type_gentype.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_half.hpp b/glm/detail/type_half.hpp index 3d378195..774298d5 100644 --- a/glm/detail/type_half.hpp +++ b/glm/detail/type_half.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_half.inl b/glm/detail/type_half.inl index bd61be07..202b2a59 100644 --- a/glm/detail/type_half.inl +++ b/glm/detail/type_half.inl @@ -16,6 +16,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_int.hpp b/glm/detail/type_int.hpp index a993bfd0..69168592 100644 --- a/glm/detail/type_int.hpp +++ b/glm/detail/type_int.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat.hpp b/glm/detail/type_mat.hpp index c8c77395..ecfe0156 100644 --- a/glm/detail/type_mat.hpp +++ b/glm/detail/type_mat.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat.inl b/glm/detail/type_mat.inl index 73120fc9..1fa740f4 100644 --- a/glm/detail/type_mat.inl +++ b/glm/detail/type_mat.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat2x2.hpp b/glm/detail/type_mat2x2.hpp index a75bec71..a3877ebd 100644 --- a/glm/detail/type_mat2x2.hpp +++ b/glm/detail/type_mat2x2.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat2x2.inl b/glm/detail/type_mat2x2.inl index ac1a6af4..b4700ebc 100644 --- a/glm/detail/type_mat2x2.inl +++ b/glm/detail/type_mat2x2.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat2x3.hpp b/glm/detail/type_mat2x3.hpp index a875c7ce..f7e8a49b 100644 --- a/glm/detail/type_mat2x3.hpp +++ b/glm/detail/type_mat2x3.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat2x3.inl b/glm/detail/type_mat2x3.inl index 323af8b6..cbbbe4b0 100644 --- a/glm/detail/type_mat2x3.inl +++ b/glm/detail/type_mat2x3.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat2x4.hpp b/glm/detail/type_mat2x4.hpp index d2de32c7..63b51389 100644 --- a/glm/detail/type_mat2x4.hpp +++ b/glm/detail/type_mat2x4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat2x4.inl b/glm/detail/type_mat2x4.inl index 13cac472..f68712ee 100644 --- a/glm/detail/type_mat2x4.inl +++ b/glm/detail/type_mat2x4.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat3x2.hpp b/glm/detail/type_mat3x2.hpp index 2829549a..2d5efc43 100644 --- a/glm/detail/type_mat3x2.hpp +++ b/glm/detail/type_mat3x2.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat3x2.inl b/glm/detail/type_mat3x2.inl index 19a46199..777c7589 100644 --- a/glm/detail/type_mat3x2.inl +++ b/glm/detail/type_mat3x2.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat3x3.hpp b/glm/detail/type_mat3x3.hpp index bc1ec22e..03c0ba6b 100644 --- a/glm/detail/type_mat3x3.hpp +++ b/glm/detail/type_mat3x3.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat3x3.inl b/glm/detail/type_mat3x3.inl index 4f045bc9..4115b8f9 100644 --- a/glm/detail/type_mat3x3.inl +++ b/glm/detail/type_mat3x3.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat3x4.hpp b/glm/detail/type_mat3x4.hpp index 30a702df..48913218 100644 --- a/glm/detail/type_mat3x4.hpp +++ b/glm/detail/type_mat3x4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat3x4.inl b/glm/detail/type_mat3x4.inl index 0a8ca7b8..46755fa6 100644 --- a/glm/detail/type_mat3x4.inl +++ b/glm/detail/type_mat3x4.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat4x2.hpp b/glm/detail/type_mat4x2.hpp index 69d83a6e..d52f0461 100644 --- a/glm/detail/type_mat4x2.hpp +++ b/glm/detail/type_mat4x2.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat4x2.inl b/glm/detail/type_mat4x2.inl index 8e73d987..470b2ed3 100644 --- a/glm/detail/type_mat4x2.inl +++ b/glm/detail/type_mat4x2.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat4x3.hpp b/glm/detail/type_mat4x3.hpp index c49dc3df..31db995a 100644 --- a/glm/detail/type_mat4x3.hpp +++ b/glm/detail/type_mat4x3.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat4x3.inl b/glm/detail/type_mat4x3.inl index b8044254..fae25fed 100644 --- a/glm/detail/type_mat4x3.inl +++ b/glm/detail/type_mat4x3.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat4x4.hpp b/glm/detail/type_mat4x4.hpp index 6ed0d230..993846e9 100644 --- a/glm/detail/type_mat4x4.hpp +++ b/glm/detail/type_mat4x4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_mat4x4.inl b/glm/detail/type_mat4x4.inl index 0902ae3c..7ae20451 100644 --- a/glm/detail/type_mat4x4.inl +++ b/glm/detail/type_mat4x4.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec.hpp b/glm/detail/type_vec.hpp index 1d7affc1..3f16ba51 100644 --- a/glm/detail/type_vec.hpp +++ b/glm/detail/type_vec.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec.inl b/glm/detail/type_vec.inl index 6028efd2..1a5306d7 100644 --- a/glm/detail/type_vec.inl +++ b/glm/detail/type_vec.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec1.hpp b/glm/detail/type_vec1.hpp index 7d73a2bb..8d8bd05b 100644 --- a/glm/detail/type_vec1.hpp +++ b/glm/detail/type_vec1.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec1.inl b/glm/detail/type_vec1.inl index 3c5c3eb7..110edce7 100644 --- a/glm/detail/type_vec1.inl +++ b/glm/detail/type_vec1.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec2.hpp b/glm/detail/type_vec2.hpp index 012e5556..dc4de565 100644 --- a/glm/detail/type_vec2.hpp +++ b/glm/detail/type_vec2.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec2.inl b/glm/detail/type_vec2.inl index 98610b9d..b6645260 100644 --- a/glm/detail/type_vec2.inl +++ b/glm/detail/type_vec2.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec3.hpp b/glm/detail/type_vec3.hpp index ef4fc60d..581eef7f 100644 --- a/glm/detail/type_vec3.hpp +++ b/glm/detail/type_vec3.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec3.inl b/glm/detail/type_vec3.inl index 188932d1..7cc96351 100644 --- a/glm/detail/type_vec3.inl +++ b/glm/detail/type_vec3.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec4.hpp b/glm/detail/type_vec4.hpp index 69043410..7ae526c3 100644 --- a/glm/detail/type_vec4.hpp +++ b/glm/detail/type_vec4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/detail/type_vec4.inl b/glm/detail/type_vec4.inl index 001230f2..450fa6f5 100644 --- a/glm/detail/type_vec4.inl +++ b/glm/detail/type_vec4.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/exponential.hpp b/glm/exponential.hpp index d11f58ff..fdc6ba8f 100644 --- a/glm/exponential.hpp +++ b/glm/exponential.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/ext.hpp b/glm/ext.hpp index 4eecb12b..b5d0921b 100644 --- a/glm/ext.hpp +++ b/glm/ext.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -92,7 +96,6 @@ #include "./gtx/fast_trigonometry.hpp" #include "./gtx/gradient_paint.hpp" #include "./gtx/handed_coordinate_space.hpp" -#include "./gtx/inertia.hpp" #include "./gtx/integer.hpp" #include "./gtx/intersect.hpp" #include "./gtx/log_base.hpp" diff --git a/glm/fwd.hpp b/glm/fwd.hpp index 1978040d..33cf45ee 100644 --- a/glm/fwd.hpp +++ b/glm/fwd.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/geometric.hpp b/glm/geometric.hpp index 98a411a6..36df9c62 100644 --- a/glm/geometric.hpp +++ b/glm/geometric.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/glm.hpp b/glm/glm.hpp index 7a761d8c..ac9c73ad 100644 --- a/glm/glm.hpp +++ b/glm/glm.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/bitfield.hpp b/glm/gtc/bitfield.hpp index 82f056c8..56aa5013 100644 --- a/glm/gtc/bitfield.hpp +++ b/glm/gtc/bitfield.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/bitfield.inl b/glm/gtc/bitfield.inl index 0cbf3d2b..aa7d4b5f 100644 --- a/glm/gtc/bitfield.inl +++ b/glm/gtc/bitfield.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/constants.hpp b/glm/gtc/constants.hpp index b61aacee..7300a618 100644 --- a/glm/gtc/constants.hpp +++ b/glm/gtc/constants.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/constants.inl b/glm/gtc/constants.inl index 4b351418..906c5096 100644 --- a/glm/gtc/constants.inl +++ b/glm/gtc/constants.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/epsilon.hpp b/glm/gtc/epsilon.hpp index 4befdb5c..54bf16dc 100644 --- a/glm/gtc/epsilon.hpp +++ b/glm/gtc/epsilon.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/epsilon.inl b/glm/gtc/epsilon.inl index a88fb284..239d87da 100644 --- a/glm/gtc/epsilon.inl +++ b/glm/gtc/epsilon.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/integer.hpp b/glm/gtc/integer.hpp index 2e3ad45e..b3dda8ab 100644 --- a/glm/gtc/integer.hpp +++ b/glm/gtc/integer.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/integer.inl b/glm/gtc/integer.inl index 5ef3b14f..9e3c24be 100644 --- a/glm/gtc/integer.inl +++ b/glm/gtc/integer.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/matrix_access.hpp b/glm/gtc/matrix_access.hpp index aeeff37c..6541fe99 100644 --- a/glm/gtc/matrix_access.hpp +++ b/glm/gtc/matrix_access.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/matrix_access.inl b/glm/gtc/matrix_access.inl index 1a1a4803..1799b0d6 100644 --- a/glm/gtc/matrix_access.inl +++ b/glm/gtc/matrix_access.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/matrix_integer.hpp b/glm/gtc/matrix_integer.hpp index 35829eda..8d99615d 100644 --- a/glm/gtc/matrix_integer.hpp +++ b/glm/gtc/matrix_integer.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/matrix_inverse.hpp b/glm/gtc/matrix_inverse.hpp index 283eebd0..08c7d787 100644 --- a/glm/gtc/matrix_inverse.hpp +++ b/glm/gtc/matrix_inverse.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/matrix_inverse.inl b/glm/gtc/matrix_inverse.inl index 97010a81..2ab9530c 100644 --- a/glm/gtc/matrix_inverse.inl +++ b/glm/gtc/matrix_inverse.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/matrix_transform.hpp b/glm/gtc/matrix_transform.hpp index a780668c..c7445e47 100644 --- a/glm/gtc/matrix_transform.hpp +++ b/glm/gtc/matrix_transform.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/matrix_transform.inl b/glm/gtc/matrix_transform.inl index a18d823f..a372eee8 100644 --- a/glm/gtc/matrix_transform.inl +++ b/glm/gtc/matrix_transform.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/noise.hpp b/glm/gtc/noise.hpp index 6450129e..e648c65b 100644 --- a/glm/gtc/noise.hpp +++ b/glm/gtc/noise.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/noise.inl b/glm/gtc/noise.inl index 5f61178e..90b2c1bb 100644 --- a/glm/gtc/noise.inl +++ b/glm/gtc/noise.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/packing.hpp b/glm/gtc/packing.hpp index 1233e349..99c6f023 100644 --- a/glm/gtc/packing.hpp +++ b/glm/gtc/packing.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/packing.inl b/glm/gtc/packing.inl index e8ee5676..be9ab4ae 100644 --- a/glm/gtc/packing.inl +++ b/glm/gtc/packing.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/quaternion.hpp b/glm/gtc/quaternion.hpp index 31fe68e6..a76f4530 100644 --- a/glm/gtc/quaternion.hpp +++ b/glm/gtc/quaternion.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/quaternion.inl b/glm/gtc/quaternion.inl index 049df569..31d489a8 100644 --- a/glm/gtc/quaternion.inl +++ b/glm/gtc/quaternion.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/random.hpp b/glm/gtc/random.hpp index 68074235..83b79ef5 100644 --- a/glm/gtc/random.hpp +++ b/glm/gtc/random.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/random.inl b/glm/gtc/random.inl index cd5d3508..b6af9e50 100644 --- a/glm/gtc/random.inl +++ b/glm/gtc/random.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/reciprocal.hpp b/glm/gtc/reciprocal.hpp index eb976575..91c23e3b 100644 --- a/glm/gtc/reciprocal.hpp +++ b/glm/gtc/reciprocal.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/reciprocal.inl b/glm/gtc/reciprocal.inl index 63d9156c..b1a0d5c7 100644 --- a/glm/gtc/reciprocal.inl +++ b/glm/gtc/reciprocal.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/round.hpp b/glm/gtc/round.hpp index ee26ffe2..fd68d615 100644 --- a/glm/gtc/round.hpp +++ b/glm/gtc/round.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/round.inl b/glm/gtc/round.inl index 3297c95b..ceffb7cd 100644 --- a/glm/gtc/round.inl +++ b/glm/gtc/round.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/type_precision.hpp b/glm/gtc/type_precision.hpp index 6901c529..6ed8614c 100644 --- a/glm/gtc/type_precision.hpp +++ b/glm/gtc/type_precision.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/type_precision.inl b/glm/gtc/type_precision.inl index aee1a31a..0a1c0165 100644 --- a/glm/gtc/type_precision.inl +++ b/glm/gtc/type_precision.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/type_ptr.hpp b/glm/gtc/type_ptr.hpp index c96e01ff..8a6c5e25 100644 --- a/glm/gtc/type_ptr.hpp +++ b/glm/gtc/type_ptr.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/type_ptr.inl b/glm/gtc/type_ptr.inl index c747ef26..d4a93b55 100644 --- a/glm/gtc/type_ptr.inl +++ b/glm/gtc/type_ptr.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/ulp.hpp b/glm/gtc/ulp.hpp index ee7a1f0a..ee634455 100644 --- a/glm/gtc/ulp.hpp +++ b/glm/gtc/ulp.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/ulp.inl b/glm/gtc/ulp.inl index 2d0e730b..34cd1e53 100644 --- a/glm/gtc/ulp.inl +++ b/glm/gtc/ulp.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/vec1.hpp b/glm/gtc/vec1.hpp index 15a5db91..6a474d39 100644 --- a/glm/gtc/vec1.hpp +++ b/glm/gtc/vec1.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtc/vec1.inl b/glm/gtc/vec1.inl index d8322494..c8afef9e 100644 --- a/glm/gtc/vec1.inl +++ b/glm/gtc/vec1.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/associated_min_max.hpp b/glm/gtx/associated_min_max.hpp index a5ffd8df..09d046d3 100644 --- a/glm/gtx/associated_min_max.hpp +++ b/glm/gtx/associated_min_max.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/associated_min_max.inl b/glm/gtx/associated_min_max.inl index dd714d8e..78f050e1 100644 --- a/glm/gtx/associated_min_max.inl +++ b/glm/gtx/associated_min_max.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-03-10 -// Updated : 2014-10-11 -// Licence : This source is under MIT License -// File : gtx_associated_min_max.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_associated_min_max +/// @file glm/gtx/associated_min_max.inl +/// @date 2008-03-10 / 2014-10-11 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm{ diff --git a/glm/gtx/bit.hpp b/glm/gtx/bit.hpp index 8f4ebdd9..454e43e9 100644 --- a/glm/gtx/bit.hpp +++ b/glm/gtx/bit.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/bit.inl b/glm/gtx/bit.inl index ccf87db1..70252c9a 100644 --- a/glm/gtx/bit.inl +++ b/glm/gtx/bit.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/closest_point.hpp b/glm/gtx/closest_point.hpp index 2092b86c..2a7e553e 100644 --- a/glm/gtx/closest_point.hpp +++ b/glm/gtx/closest_point.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -20,8 +24,8 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// -/// @ref gtx_bit -/// @file glm/gtx/bit.hpp +/// @ref gtx_closest_point +/// @file glm/gtx/closest_point.hpp /// @date 2005-12-30 / 2011-06-07 /// @author Christophe Riccio /// diff --git a/glm/gtx/closest_point.inl b/glm/gtx/closest_point.inl index 1e77ca93..b92d73b0 100644 --- a/glm/gtx/closest_point.inl +++ b/glm/gtx/closest_point.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-30 -// Updated : 2008-10-05 -// Licence : This source is under MIT License -// File : glm/gtx/closest_point.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_closest_point +/// @file glm/gtx/closest_point.inl +/// @date 2005-12-30 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/color_space.hpp b/glm/gtx/color_space.hpp index 421b9531..bba74ad8 100644 --- a/glm/gtx/color_space.hpp +++ b/glm/gtx/color_space.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/color_space.inl b/glm/gtx/color_space.inl index 34fb2bc9..5e0943d8 100644 --- a/glm/gtx/color_space.inl +++ b/glm/gtx/color_space.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2007-02-22 -// Licence : This source is under MIT License -// File : glm/gtx/color_space.inl +///////////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_color_space +/// @file glm/gtx/color_space.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/color_space_YCoCg.hpp b/glm/gtx/color_space_YCoCg.hpp index bfdc7c19..89bd762e 100644 --- a/glm/gtx/color_space_YCoCg.hpp +++ b/glm/gtx/color_space_YCoCg.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/color_space_YCoCg.inl b/glm/gtx/color_space_YCoCg.inl index e824d088..a5662263 100644 --- a/glm/gtx/color_space_YCoCg.inl +++ b/glm/gtx/color_space_YCoCg.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-10-28 -// Updated : 2008-10-28 -// Licence : This source is under MIT License -// File : glm/gtx/color_space_YCoCg.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_color_space_YCoCg +/// @file glm/gtx/color_space_YCoCg.inl +/// @date 2008-10-28 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/common.hpp b/glm/gtx/common.hpp index 0d7aaff5..15790583 100644 --- a/glm/gtx/common.hpp +++ b/glm/gtx/common.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/common.inl b/glm/gtx/common.inl index 8da9e9a4..9b9dbb9c 100644 --- a/glm/gtx/common.inl +++ b/glm/gtx/common.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/compatibility.hpp b/glm/gtx/compatibility.hpp index 3851cd64..635ee912 100644 --- a/glm/gtx/compatibility.hpp +++ b/glm/gtx/compatibility.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/compatibility.inl b/glm/gtx/compatibility.inl index 14b6e652..75372d26 100644 --- a/glm/gtx/compatibility.inl +++ b/glm/gtx/compatibility.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-03-16 -// Updated : 2008-10-24 -// Licence : This source is under MIT License -// File : glm/gtx/compatibility.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_compatibility +/// @file glm/gtx/compatibility.inl +/// @date 2007-01-24 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// #include diff --git a/glm/gtx/component_wise.hpp b/glm/gtx/component_wise.hpp index 0e4c0e2b..2907900a 100644 --- a/glm/gtx/component_wise.hpp +++ b/glm/gtx/component_wise.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/component_wise.inl b/glm/gtx/component_wise.inl index 89c5ac7f..e1252a0c 100644 --- a/glm/gtx/component_wise.inl +++ b/glm/gtx/component_wise.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-05-21 -// Updated : 2010-02-12 -// Licence : This source is under MIT License -// File : gtx_component_wise.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_component_wise +/// @file glm/gtx/component_wise.inl +/// @date 2007-05-21 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/dual_quaternion.hpp b/glm/gtx/dual_quaternion.hpp index c6915196..4c1bd3d2 100644 --- a/glm/gtx/dual_quaternion.hpp +++ b/glm/gtx/dual_quaternion.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/dual_quaternion.inl b/glm/gtx/dual_quaternion.inl index 83694716..13312bff 100644 --- a/glm/gtx/dual_quaternion.inl +++ b/glm/gtx/dual_quaternion.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/euler_angles.hpp b/glm/gtx/euler_angles.hpp index cb62d5fe..6dcd303b 100644 --- a/glm/gtx/euler_angles.hpp +++ b/glm/gtx/euler_angles.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/euler_angles.inl b/glm/gtx/euler_angles.inl index 88b30045..c75af997 100644 --- a/glm/gtx/euler_angles.inl +++ b/glm/gtx/euler_angles.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2007-08-14 -// Licence : This source is under MIT License -// File : glm/gtx/euler_angles.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_euler_angles +/// @file glm/gtx/euler_angles.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/extend.hpp b/glm/gtx/extend.hpp index dea53d99..e975ba7e 100644 --- a/glm/gtx/extend.hpp +++ b/glm/gtx/extend.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/extend.inl b/glm/gtx/extend.inl index c8a8f6f2..c5b833f1 100644 --- a/glm/gtx/extend.inl +++ b/glm/gtx/extend.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2006-01-07 -// Updated : 2008-10-05 -// Licence : This source is under MIT License -// File : glm/gtx/extend.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_extend +/// @file glm/gtx/extend.inl +/// @date 2006-01-07 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/extented_min_max.hpp b/glm/gtx/extented_min_max.hpp index ab5eb33b..e754ad4c 100644 --- a/glm/gtx/extented_min_max.hpp +++ b/glm/gtx/extented_min_max.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/extented_min_max.inl b/glm/gtx/extented_min_max.inl index d608ab37..5c6ac070 100644 --- a/glm/gtx/extented_min_max.inl +++ b/glm/gtx/extented_min_max.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-03-14 -// Updated : 2010-02-19 -// Licence : This source is under MIT License -// File : gtx_extented_min_max.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_extented_min_max +/// @file glm/gtx/extented_min_max.inl +/// @date 2007-03-14 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/fast_exponential.hpp b/glm/gtx/fast_exponential.hpp index 15641fb0..2f31a27c 100644 --- a/glm/gtx/fast_exponential.hpp +++ b/glm/gtx/fast_exponential.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/fast_exponential.inl b/glm/gtx/fast_exponential.inl index babedf3b..1c62c1ee 100644 --- a/glm/gtx/fast_exponential.inl +++ b/glm/gtx/fast_exponential.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2006-01-09 -// Updated : 2006-01-09 -// Licence : This source is under MIT License -// File : glm/gtx/fast_exponential.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_fast_exponential +/// @file glm/gtx/fast_exponential.inl +/// @date 2006-01-09 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/fast_square_root.hpp b/glm/gtx/fast_square_root.hpp index 75f74a01..0271966d 100644 --- a/glm/gtx/fast_square_root.hpp +++ b/glm/gtx/fast_square_root.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/fast_square_root.inl b/glm/gtx/fast_square_root.inl index c912c509..604268dc 100644 --- a/glm/gtx/fast_square_root.inl +++ b/glm/gtx/fast_square_root.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2006-01-04 -// Updated : 2011-10-14 -// Licence : This source is under MIT License -// File : glm/gtx/fast_square_root.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_fast_square_root +/// @file glm/gtx/fast_square_root.inl +/// @date 2006-01-04 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/fast_trigonometry.hpp b/glm/gtx/fast_trigonometry.hpp index 8e7a9251..091fac20 100644 --- a/glm/gtx/fast_trigonometry.hpp +++ b/glm/gtx/fast_trigonometry.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/fast_trigonometry.inl b/glm/gtx/fast_trigonometry.inl index 3f8abcde..f08974ee 100644 --- a/glm/gtx/fast_trigonometry.inl +++ b/glm/gtx/fast_trigonometry.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2006-01-08 -// Updated : 2011-10-14 -// Licence : This source is under MIT License -// File : glm/gtx/fast_trigonometry.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_fast_trigonometry +/// @file glm/gtx/fast_trigonometry.inl +/// @date 2006-01-08 / 2014-11-25 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm{ diff --git a/glm/gtx/gradient_paint.hpp b/glm/gtx/gradient_paint.hpp index bd70776e..5cfaaf1a 100644 --- a/glm/gtx/gradient_paint.hpp +++ b/glm/gtx/gradient_paint.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/gradient_paint.inl b/glm/gtx/gradient_paint.inl index ede2eb6e..db4b2b05 100644 --- a/glm/gtx/gradient_paint.inl +++ b/glm/gtx/gradient_paint.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2009-03-06 -// Updated : 2013-04-09 -// Licence : This source is under MIT License -// File : glm/gtx/gradient_paint.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_gradient_paint +/// @file glm/gtx/gradient_paint.inl +/// @date 2009-03-06 / 2013-04-09 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/handed_coordinate_space.hpp b/glm/gtx/handed_coordinate_space.hpp index 0c8f9898..42512bbd 100644 --- a/glm/gtx/handed_coordinate_space.hpp +++ b/glm/gtx/handed_coordinate_space.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/handed_coordinate_space.inl b/glm/gtx/handed_coordinate_space.inl index 81ef326d..52c82d32 100644 --- a/glm/gtx/handed_coordinate_space.inl +++ b/glm/gtx/handed_coordinate_space.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2009-02-19 -// Licence : This source is under MIT License -// File : glm/gtx/handed_coordinate_space.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_handed_coordinate_space +/// @file glm/gtx/handed_coordinate_space.inl +/// @date 2005-12-21 / 2009-02-19 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/inertia.hpp b/glm/gtx/inertia.hpp deleted file mode 100644 index f52fc616..00000000 --- a/glm/gtx/inertia.hpp +++ /dev/null @@ -1,113 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref gtx_inertia -/// @file glm/gtx/inertia.hpp -/// @date 2006-04-21 / 2011-06-07 -/// @author Christophe Riccio -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_inertia GLM_GTX_inertia -/// @ingroup gtx -/// -/// @brief Create inertia matrices -/// -/// need to be included to use these functionalities. -/////////////////////////////////////////////////////////////////////////////////// - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) -# pragma message("GLM: GLM_GTX_inertia extension included") -#endif - -namespace glm -{ - /* - /// @addtogroup gtx_inertia - /// @{ - - //! Build an inertia matrix for a box. - //! From GLM_GTX_inertia extension. - template - tmat3x3 boxInertia3( - T const & Mass, - tvec3 const & Scale); - - //! Build an inertia matrix for a box. - //! From GLM_GTX_inertia extension. - template - tmat4x4 boxInertia4( - T const & Mass, - tvec3 const & Scale); - - //! Build an inertia matrix for a disk. - //! From GLM_GTX_inertia extension. - template - tmat3x3 diskInertia3( - T const & Mass, - T const & Radius); - - //! Build an inertia matrix for a disk. - //! From GLM_GTX_inertia extension. - template - tmat4x4 diskInertia4( - T const & Mass, - T const & Radius); - - //! Build an inertia matrix for a ball. - //! From GLM_GTX_inertia extension. - template - tmat3x3 ballInertia3( - T const & Mass, - T const & Radius); - - //! Build an inertia matrix for a ball. - //! From GLM_GTX_inertia extension. - template - tmat4x4 ballInertia4( - T const & Mass, - T const & Radius); - - //! Build an inertia matrix for a sphere. - //! From GLM_GTX_inertia extension. - template - tmat3x3 sphereInertia3( - T const & Mass, - T const & Radius); - - //! Build an inertia matrix for a sphere. - //! From GLM_GTX_inertia extension. - template - tmat4x4 sphereInertia4( - T const & Mass, - T const & Radius); - */ - /// @} -}// namespace glm - -#include "inertia.inl" diff --git a/glm/gtx/inertia.inl b/glm/gtx/inertia.inl deleted file mode 100644 index adbda54c..00000000 --- a/glm/gtx/inertia.inl +++ /dev/null @@ -1,116 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2006-04-21 -// Updated : 2006-12-06 -// Licence : This source is under MIT License -// File : glm/gtx/inertia.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// - -namespace glm -{ -/* - template - GLM_FUNC_QUALIFIER tmat3x3 boxInertia3 - ( - T const & Mass, - tvec3 const & Scale - ) - { - tmat3x3 Result(T(1)); - Result[0][0] = (Scale.y * Scale.y + Scale.z * Scale.z) * Mass / T(12); - Result[1][1] = (Scale.x * Scale.x + Scale.z * Scale.z) * Mass / T(12); - Result[2][2] = (Scale.x * Scale.x + Scale.y * Scale.y) * Mass / T(12); - return Result; - } - - template - GLM_FUNC_QUALIFIER tmat4x4 boxInertia4 - ( - T const & Mass, - tvec3 const & Scale - ) - { - tmat4x4 Result(T(1)); - Result[0][0] = (Scale.y * Scale.y + Scale.z * Scale.z) * Mass / T(12); - Result[1][1] = (Scale.x * Scale.x + Scale.z * Scale.z) * Mass / T(12); - Result[2][2] = (Scale.x * Scale.x + Scale.y * Scale.y) * Mass / T(12); - return Result; - } - - template - GLM_FUNC_QUALIFIER tmat3x3 diskInertia3 - ( - T const & Mass, - T const & Radius - ) - { - T a = Mass * Radius * Radius / T(2); - tmat3x3 Result(a); - Result[2][2] *= static_cast(2); - return Result; - } - - template - GLM_FUNC_QUALIFIER tmat4x4 diskInertia4 - ( - T const & Mass, - T const & Radius - ) - { - T a = Mass * Radius * Radius / T(2); - tmat4x4 Result(a); - Result[2][2] *= static_cast(2); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER tmat3x3 ballInertia3 - ( - T const & Mass, - T const & Radius - ) - { - T a = static_cast(2) * Mass * Radius * Radius / T(5); - return tmat3x3(a); - } - - template - GLM_FUNC_QUALIFIER tmat4x4 ballInertia4 - ( - T const & Mass, - T const & Radius - ) - { - T a = static_cast(2) * Mass * Radius * Radius / T(5); - tmat4x4 Result(a); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER tmat3x3 sphereInertia3 - ( - T const & Mass, - T const & Radius - ) - { - T a = static_cast(2) * Mass * Radius * Radius / T(3); - return tmat3x3(a); - } - - template - GLM_FUNC_QUALIFIER tmat4x4 sphereInertia4 - ( - T const & Mass, - T const & Radius - ) - { - T a = static_cast(2) * Mass * Radius * Radius / T(3); - tmat4x4 Result(a); - Result[3][3] = static_cast(1); - return Result; - } - */ -}//namespace glm diff --git a/glm/gtx/integer.hpp b/glm/gtx/integer.hpp index 4c6aa2bc..777847ca 100644 --- a/glm/gtx/integer.hpp +++ b/glm/gtx/integer.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/integer.inl b/glm/gtx/integer.inl index db30dacd..58c1b48b 100644 --- a/glm/gtx/integer.inl +++ b/glm/gtx/integer.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-24 -// Updated : 2011-10-13 -// Licence : This source is under MIT License -// File : glm/gtx/integer.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_integer +/// @file glm/gtx/integer.inl +/// @date 2005-12-24 / 2011-10-13 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm diff --git a/glm/gtx/intersect.hpp b/glm/gtx/intersect.hpp index d7d64920..e3aaaf40 100644 --- a/glm/gtx/intersect.hpp +++ b/glm/gtx/intersect.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/io.hpp b/glm/gtx/io.hpp index 8cebb0c9..5630d92b 100644 --- a/glm/gtx/io.hpp +++ b/glm/gtx/io.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -22,7 +26,7 @@ /// /// @ref gtx_io /// @file glm/gtx/io.hpp -/// @date 2013-11-22 +/// @date 2013-11-22 / 2014-11-25 /// @author Jan P Springer (regnirpsj@gmail.com) /// /// @see core (dependence) diff --git a/glm/gtx/io.inl b/glm/gtx/io.inl index 47052216..fe5f1949 100644 --- a/glm/gtx/io.inl +++ b/glm/gtx/io.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-11-22 -// Updated : 2013-12-18 -// Licence : This source is under MIT License -// File : glm/gtx/inl.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_io +/// @file glm/gtx/io.inl +/// @date 2013-11-22 / 2014-11-25 +/// @author Jan P Springer (regnirpsj@gmail.com) /////////////////////////////////////////////////////////////////////////////////////////////////// #include // std::setfill<>, std::fixed, std::setprecision, std::right, std::setw diff --git a/glm/gtx/log_base.hpp b/glm/gtx/log_base.hpp index ce9fabe7..b15383e0 100644 --- a/glm/gtx/log_base.hpp +++ b/glm/gtx/log_base.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/log_base.inl b/glm/gtx/log_base.inl index d0b0e6a9..bfb39a4c 100644 --- a/glm/gtx/log_base.inl +++ b/glm/gtx/log_base.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-10-24 -// Updated : 2008-10-24 -// Licence : This source is under MIT License -// File : glm/gtx/log_base.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_log_base +/// @file glm/gtx/log_base.inl +/// @date 2008-10-24 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/matrix_cross_product.hpp b/glm/gtx/matrix_cross_product.hpp index ea8b4f61..63945fcb 100644 --- a/glm/gtx/matrix_cross_product.hpp +++ b/glm/gtx/matrix_cross_product.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/matrix_cross_product.inl b/glm/gtx/matrix_cross_product.inl index dc41923e..f178f4c0 100644 --- a/glm/gtx/matrix_cross_product.inl +++ b/glm/gtx/matrix_cross_product.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2005-12-21 -// Licence : This source is under MIT License -// File : glm/gtx/matrix_cross_product.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_matrix_cross_product +/// @file glm/gtx/matrix_cross_product.inl +/// @date 2005-12-21 / 2005-12-21 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/matrix_decompose.hpp b/glm/gtx/matrix_decompose.hpp index c68c94a5..d58db217 100644 --- a/glm/gtx/matrix_decompose.hpp +++ b/glm/gtx/matrix_decompose.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/matrix_decompose.inl b/glm/gtx/matrix_decompose.inl index 2490762d..af443a7d 100644 --- a/glm/gtx/matrix_decompose.inl +++ b/glm/gtx/matrix_decompose.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/matrix_interpolation.hpp b/glm/gtx/matrix_interpolation.hpp index b058bc3a..c2521c40 100644 --- a/glm/gtx/matrix_interpolation.hpp +++ b/glm/gtx/matrix_interpolation.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/matrix_interpolation.inl b/glm/gtx/matrix_interpolation.inl index 5b6f3ace..4fb5f0aa 100644 --- a/glm/gtx/matrix_interpolation.inl +++ b/glm/gtx/matrix_interpolation.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-03-05 -// Updated : 2011-03-05 -// Licence : This source is under MIT License -// File : glm/gtx/matrix_interpolation.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_matrix_interpolation +/// @file glm/gtx/matrix_interpolation.hpp +/// @date 2011-03-05 / 2011-03-05 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/matrix_major_storage.hpp b/glm/gtx/matrix_major_storage.hpp index 77fd5c8a..34499879 100644 --- a/glm/gtx/matrix_major_storage.hpp +++ b/glm/gtx/matrix_major_storage.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/matrix_major_storage.inl b/glm/gtx/matrix_major_storage.inl index 12659cd5..1420e407 100644 --- a/glm/gtx/matrix_major_storage.inl +++ b/glm/gtx/matrix_major_storage.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2006-04-19 -// Updated : 2009-02-19 -// Licence : This source is under MIT License -// File : glm/gtx/matrix_major_storage.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_matrix_major_storage +/// @file glm/gtx/matrix_major_storage.hpp +/// @date 2006-04-19 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/matrix_operation.hpp b/glm/gtx/matrix_operation.hpp index 685e7bcd..b3c508d9 100644 --- a/glm/gtx/matrix_operation.hpp +++ b/glm/gtx/matrix_operation.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/matrix_operation.inl b/glm/gtx/matrix_operation.inl index 67765ce4..4cc0812d 100644 --- a/glm/gtx/matrix_operation.inl +++ b/glm/gtx/matrix_operation.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2009-08-29 -// Updated : 2009-08-29 -// Licence : This source is under MIT License -// File : glm/gtx/matrix_operation.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_matrix_operation +/// @file glm/gtx/matrix_operation.inl +/// @date 2009-08-29 / 2009-08-29 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/matrix_query.hpp b/glm/gtx/matrix_query.hpp index 5aacb7d3..77db9d66 100644 --- a/glm/gtx/matrix_query.hpp +++ b/glm/gtx/matrix_query.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/matrix_query.inl b/glm/gtx/matrix_query.inl index f3dc9208..e22cccd4 100644 --- a/glm/gtx/matrix_query.inl +++ b/glm/gtx/matrix_query.inl @@ -1,14 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-03-05 -// Updated : 2007-03-05 -// Licence : This source is under MIT License -// File : glm/gtx/matrix_query.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Dependency: -// - GLM core -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_matrix_query +/// @file glm/gtx/matrix_query.inl +/// @date 2007-03-05 / 2007-03-05 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/matrix_transform_2d.hpp b/glm/gtx/matrix_transform_2d.hpp index 002e98ef..9ad29538 100644 --- a/glm/gtx/matrix_transform_2d.hpp +++ b/glm/gtx/matrix_transform_2d.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/matrix_transform_2d.inl b/glm/gtx/matrix_transform_2d.inl index 5de01c0c..d11dd1a1 100644 --- a/glm/gtx/matrix_transform_2d.inl +++ b/glm/gtx/matrix_transform_2d.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/mixed_product.hpp b/glm/gtx/mixed_product.hpp index c47aedaa..71fd3966 100644 --- a/glm/gtx/mixed_product.hpp +++ b/glm/gtx/mixed_product.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/mixed_product.inl b/glm/gtx/mixed_product.inl index a6b4d0be..85063c3a 100644 --- a/glm/gtx/mixed_product.inl +++ b/glm/gtx/mixed_product.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-04-03 -// Updated : 2008-09-17 -// Licence : This source is under MIT License -// File : glm/gtx/mixed_product.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_mixed_product +/// @file glm/gtx/mixed_product.inl +/// @date 2007-04-03 / 2008-09-17 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/multiple.hpp b/glm/gtx/multiple.hpp index 5b3196cb..01536cf3 100644 --- a/glm/gtx/multiple.hpp +++ b/glm/gtx/multiple.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/multiple.inl b/glm/gtx/multiple.inl index fe175d46..e4669050 100644 --- a/glm/gtx/multiple.inl +++ b/glm/gtx/multiple.inl @@ -1,14 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2009-10-26 -// Updated : 2011-06-07 -// Licence : This source is under MIT License -// File : glm/gtx/multiple.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Dependency: -// - GLM core -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_multiple +/// @file glm/gtx/multiple.inl +/// @date 2009-10-26 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/norm.hpp b/glm/gtx/norm.hpp index 834c92c7..6b477f1e 100644 --- a/glm/gtx/norm.hpp +++ b/glm/gtx/norm.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/norm.inl b/glm/gtx/norm.inl index d26afa8f..db87e0dc 100644 --- a/glm/gtx/norm.inl +++ b/glm/gtx/norm.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2008-07-24 -// Licence : This source is under MIT License -// File : glm/gtx/norm.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_norm +/// @file glm/gtx/norm.inl +/// @date 2005-12-21 / 2008-07-24 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/normal.hpp b/glm/gtx/normal.hpp index 2b46be4e..9d7665d8 100644 --- a/glm/gtx/normal.hpp +++ b/glm/gtx/normal.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/normal.inl b/glm/gtx/normal.inl index ed48980b..d1dd99cc 100644 --- a/glm/gtx/normal.inl +++ b/glm/gtx/normal.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2011-06-07 -// Licence : This source is under MIT License -// File : glm/gtx/normal.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_normal +/// @file glm/gtx/normal.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/normalize_dot.hpp b/glm/gtx/normalize_dot.hpp index 2fcb4a54..406f7a24 100644 --- a/glm/gtx/normalize_dot.hpp +++ b/glm/gtx/normalize_dot.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/normalize_dot.inl b/glm/gtx/normalize_dot.inl index 31d2810f..b231a566 100644 --- a/glm/gtx/normalize_dot.inl +++ b/glm/gtx/normalize_dot.inl @@ -1,10 +1,33 @@ -////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-09-28 -// Updated : 2008-10-07 -// Licence : This source is under MIT License -// File : glm/gtx/normalize_dot.inl +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_normalize_dot +/// @file glm/gtx/normalize_dot.inl +/// @date 2007-09-28 / 2008-10-07 +/// @author Christophe Riccio ////////////////////////////////////////////////////////////////////////////////// namespace glm @@ -16,10 +39,7 @@ namespace glm genType const & y ) { - return - glm::dot(x, y) * - glm::inversesqrt(glm::dot(x, x) * - glm::dot(y, y)); + return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); } template @@ -29,10 +49,7 @@ namespace glm tvec2 const & y ) { - return - glm::dot(x, y) * - glm::inversesqrt(glm::dot(x, x) * - glm::dot(y, y)); + return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); } template diff --git a/glm/gtx/number_precision.hpp b/glm/gtx/number_precision.hpp index 62f95a9d..68a0690f 100644 --- a/glm/gtx/number_precision.hpp +++ b/glm/gtx/number_precision.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/number_precision.inl b/glm/gtx/number_precision.inl index 79a5f80b..c006fecb 100644 --- a/glm/gtx/number_precision.inl +++ b/glm/gtx/number_precision.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-05-10 -// Updated : 2007-05-10 -// Licence : This source is under MIT License -// File : glm/gtx/number_precision.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_number_precision +/// @file glm/gtx/number_precision.inl +/// @date 2007-05-10 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/optimum_pow.hpp b/glm/gtx/optimum_pow.hpp index 5f7cfc50..38920bbf 100644 --- a/glm/gtx/optimum_pow.hpp +++ b/glm/gtx/optimum_pow.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/optimum_pow.inl b/glm/gtx/optimum_pow.inl index ffa3b7e4..644af031 100644 --- a/glm/gtx/optimum_pow.inl +++ b/glm/gtx/optimum_pow.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2005-12-27 -// Licence : This source is under MIT License -// File : glm/gtx/optimum_pow.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_optimum_pow +/// @file glm/gtx/optimum_pow.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/orthonormalize.hpp b/glm/gtx/orthonormalize.hpp index 8ba3fff3..c406abd4 100644 --- a/glm/gtx/orthonormalize.hpp +++ b/glm/gtx/orthonormalize.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/orthonormalize.inl b/glm/gtx/orthonormalize.inl index 7195da8b..c147f0c4 100644 --- a/glm/gtx/orthonormalize.inl +++ b/glm/gtx/orthonormalize.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2005-12-21 -// Licence : This source is under MIT License -// File : glm/gtx/orthonormalize.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_orthonormalize +/// @file glm/gtx/orthonormalize.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/perpendicular.hpp b/glm/gtx/perpendicular.hpp index d5989517..8ff9122e 100644 --- a/glm/gtx/perpendicular.hpp +++ b/glm/gtx/perpendicular.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/perpendicular.inl b/glm/gtx/perpendicular.inl index dc23357b..60b43e9e 100644 --- a/glm/gtx/perpendicular.inl +++ b/glm/gtx/perpendicular.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2009-03-06 -// Licence : This source is under MIT License -// File : glm/gtx/perpendicular.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_perpendicular +/// @file glm/gtx/perpendicular.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/polar_coordinates.hpp b/glm/gtx/polar_coordinates.hpp index 639398d3..257e73e0 100644 --- a/glm/gtx/polar_coordinates.hpp +++ b/glm/gtx/polar_coordinates.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/polar_coordinates.inl b/glm/gtx/polar_coordinates.inl index dd76c085..80bda122 100644 --- a/glm/gtx/polar_coordinates.inl +++ b/glm/gtx/polar_coordinates.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-03-06 -// Updated : 2009-05-01 -// Licence : This source is under MIT License -// File : glm/gtx/polar_coordinates.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_polar_coordinates +/// @file glm/gtx/polar_coordinates.inl +/// @date 2007-03-06 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/projection.hpp b/glm/gtx/projection.hpp index 072a9d64..f5e41738 100644 --- a/glm/gtx/projection.hpp +++ b/glm/gtx/projection.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/projection.inl b/glm/gtx/projection.inl index c78d23ae..b07ee85a 100644 --- a/glm/gtx/projection.inl +++ b/glm/gtx/projection.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2009-03-06 -// Licence : This source is under MIT License -// File : glm/gtx/projection.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_projection +/// @file glm/gtx/projection.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/quaternion.hpp b/glm/gtx/quaternion.hpp index 3f29dc56..53f548e5 100644 --- a/glm/gtx/quaternion.hpp +++ b/glm/gtx/quaternion.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/quaternion.inl b/glm/gtx/quaternion.inl index 8b4db180..86a2f1cb 100644 --- a/glm/gtx/quaternion.inl +++ b/glm/gtx/quaternion.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2008-11-27 -// Licence : This source is under MIT License -// File : glm/gtx/quaternion.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_quaternion +/// @file glm/gtx/quaternion.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include "../gtc/constants.hpp" diff --git a/glm/gtx/range.hpp b/glm/gtx/range.hpp index f2fc01ba..2f0f7908 100644 --- a/glm/gtx/range.hpp +++ b/glm/gtx/range.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/raw_data.hpp b/glm/gtx/raw_data.hpp index d36a11fd..56f37afd 100644 --- a/glm/gtx/raw_data.hpp +++ b/glm/gtx/raw_data.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/raw_data.inl b/glm/gtx/raw_data.inl index ced27c8d..1e21ffb7 100644 --- a/glm/gtx/raw_data.inl +++ b/glm/gtx/raw_data.inl @@ -1,11 +1,31 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-11-19 -// Updated : 2008-11-19 -// Licence : This source is under MIT License -// File : glm/gtx/raw_data.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Dependency: -// - GLM core -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_raw_data +/// @file glm/gtx/raw_data.inl +/// @date 2008-11-19 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// diff --git a/glm/gtx/rotate_normalized_axis.hpp b/glm/gtx/rotate_normalized_axis.hpp index 3591b481..9deba38f 100644 --- a/glm/gtx/rotate_normalized_axis.hpp +++ b/glm/gtx/rotate_normalized_axis.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/rotate_normalized_axis.inl b/glm/gtx/rotate_normalized_axis.inl index 326bdb20..9bb257ca 100644 --- a/glm/gtx/rotate_normalized_axis.inl +++ b/glm/gtx/rotate_normalized_axis.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/rotate_vector.hpp b/glm/gtx/rotate_vector.hpp index 4fe09c81..acf1d7ca 100644 --- a/glm/gtx/rotate_vector.hpp +++ b/glm/gtx/rotate_vector.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/rotate_vector.inl b/glm/gtx/rotate_vector.inl index adb4f83b..94a40604 100644 --- a/glm/gtx/rotate_vector.inl +++ b/glm/gtx/rotate_vector.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2006-11-02 -// Updated : 2009-02-19 -// Licence : This source is under MIT License -// File : glm/gtx/rotate_vector.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_rotate_vector +/// @file glm/gtx/rotate_vector.inl +/// @date 2006-11-02 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/scalar_multiplication.hpp b/glm/gtx/scalar_multiplication.hpp index e0eee2e2..f9abfe5a 100644 --- a/glm/gtx/scalar_multiplication.hpp +++ b/glm/gtx/scalar_multiplication.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/scalar_relational.hpp b/glm/gtx/scalar_relational.hpp index 1eeccd33..8e855e60 100644 --- a/glm/gtx/scalar_relational.hpp +++ b/glm/gtx/scalar_relational.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/scalar_relational.inl b/glm/gtx/scalar_relational.inl index ad397c33..b28c8cfe 100644 --- a/glm/gtx/scalar_relational.inl +++ b/glm/gtx/scalar_relational.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-02-04 -// Updated : 2013-02-04 -// Licence : This source is under MIT License -// File : glm/gtx/scalar_relational.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_scalar_relational +/// @file glm/gtx/scalar_relational.inl +/// @date 2013-02-04 / 2013-02-04 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/simd_mat4.hpp b/glm/gtx/simd_mat4.hpp index 3ea8d05d..f4403360 100644 --- a/glm/gtx/simd_mat4.hpp +++ b/glm/gtx/simd_mat4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -20,8 +24,8 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// -/// @ref gtx_simd_vec4 -/// @file glm/gtx/simd_vec4.hpp +/// @ref gtx_simd_mat4 +/// @file glm/gtx/simd_mat4.hpp /// @date 2009-05-07 / 2011-06-07 /// @author Christophe Riccio /// diff --git a/glm/gtx/simd_mat4.inl b/glm/gtx/simd_mat4.inl index bac06506..46f149d8 100644 --- a/glm/gtx/simd_mat4.inl +++ b/glm/gtx/simd_mat4.inl @@ -1,10 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2009-05-19 -// Updated : 2009-05-19 -// Licence : This source is under MIT License -// File : glm/gtx/simd_mat4.hpp +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_simd_mat4 +/// @file glm/gtx/simd_mat4.inl +/// @date 2009-05-07 / 2011-06-07 +/// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm{ diff --git a/glm/gtx/simd_quat.hpp b/glm/gtx/simd_quat.hpp index ffdf0a9e..6371f5e4 100644 --- a/glm/gtx/simd_quat.hpp +++ b/glm/gtx/simd_quat.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -22,7 +26,7 @@ /// /// @ref gtx_simd_quat /// @file glm/gtx/simd_quat.hpp -/// @date 2009-05-07 / 2011-06-07 +/// @date 2013-04-22 / 2014-11-25 /// @author Christophe Riccio /// /// @see core (dependence) diff --git a/glm/gtx/simd_quat.inl b/glm/gtx/simd_quat.inl index 760113e3..95cd9b0f 100644 --- a/glm/gtx/simd_quat.inl +++ b/glm/gtx/simd_quat.inl @@ -1,12 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-04-22 -// Updated : 2013-04-22 -// Licence : This source is under MIT License -// File : glm/gtx/simd_quat.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// - +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_simd_quat +/// @file glm/gtx/simd_quat.inl +/// @date 2013-04-22 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm{ namespace detail{ diff --git a/glm/gtx/simd_vec4.hpp b/glm/gtx/simd_vec4.hpp index 06a9db04..a6868070 100644 --- a/glm/gtx/simd_vec4.hpp +++ b/glm/gtx/simd_vec4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/spline.hpp b/glm/gtx/spline.hpp index 07d07b34..3ae86d25 100644 --- a/glm/gtx/spline.hpp +++ b/glm/gtx/spline.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -50,7 +54,7 @@ namespace glm /// @addtogroup gtx_spline /// @{ - //! Return a point from a catmull rom curve. + /// Return a point from a catmull rom curve. /// @see gtx_spline extension. template GLM_FUNC_DECL genType catmullRom( @@ -60,7 +64,7 @@ namespace glm genType const & v4, typename genType::value_type const & s); - //! Return a point from a hermite curve. + /// Return a point from a hermite curve. /// @see gtx_spline extension. template GLM_FUNC_DECL genType hermite( @@ -70,7 +74,7 @@ namespace glm genType const & t2, typename genType::value_type const & s); - //! Return a point from a cubic curve. + /// Return a point from a cubic curve. /// @see gtx_spline extension. template GLM_FUNC_DECL genType cubic( diff --git a/glm/gtx/spline.inl b/glm/gtx/spline.inl index d3014609..1791b407 100644 --- a/glm/gtx/spline.inl +++ b/glm/gtx/spline.inl @@ -1,70 +1,92 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-01-25 -// Updated : 2009-02-19 -// Licence : This source is under MIT License -// File : glm/gtx/spline.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_spline +/// @file glm/gtx/spline.inl +/// @date 2007-01-25 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -namespace glm{ - -template -GLM_FUNC_QUALIFIER genType catmullRom -( - genType const & v1, - genType const & v2, - genType const & v3, - genType const & v4, - typename genType::value_type const & s -) +namespace glm { - typename genType::value_type s1 = s; - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); + template + GLM_FUNC_QUALIFIER genType catmullRom + ( + genType const & v1, + genType const & v2, + genType const & v3, + genType const & v4, + typename genType::value_type const & s + ) + { + typename genType::value_type s1 = s; + typename genType::value_type s2 = pow2(s); + typename genType::value_type s3 = pow3(s); - typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s; - typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2); - typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s; - typename genType::value_type f4 = s3 - s2; + typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s; + typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2); + typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s; + typename genType::value_type f4 = s3 - s2; - return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2); + return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2); -} + } -template -GLM_FUNC_QUALIFIER genType hermite -( - genType const & v1, - genType const & t1, - genType const & v2, - genType const & t2, - typename genType::value_type const & s -) -{ - typename genType::value_type s1 = s; - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); + template + GLM_FUNC_QUALIFIER genType hermite + ( + genType const & v1, + genType const & t1, + genType const & v2, + genType const & t2, + typename genType::value_type const & s + ) + { + typename genType::value_type s1 = s; + typename genType::value_type s2 = pow2(s); + typename genType::value_type s3 = pow3(s); - typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1); - typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2; - typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s; - typename genType::value_type f4 = s3 - s2; + typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1); + typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2; + typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s; + typename genType::value_type f4 = s3 - s2; - return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2; -} - -template -GLM_FUNC_QUALIFIER genType cubic -( - genType const & v1, - genType const & v2, - genType const & v3, - genType const & v4, - typename genType::value_type const & s -) -{ - return ((v1 * s + v2) * s + v3) * s + v4; -} + return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2; + } + template + GLM_FUNC_QUALIFIER genType cubic + ( + genType const & v1, + genType const & v2, + genType const & v3, + genType const & v4, + typename genType::value_type const & s + ) + { + return ((v1 * s + v2) * s + v3) * s + v4; + } }//namespace glm diff --git a/glm/gtx/std_based_type.hpp b/glm/gtx/std_based_type.hpp index d7960d69..8190f66f 100644 --- a/glm/gtx/std_based_type.hpp +++ b/glm/gtx/std_based_type.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/std_based_type.inl b/glm/gtx/std_based_type.inl index 89bd6764..259cfd52 100644 --- a/glm/gtx/std_based_type.inl +++ b/glm/gtx/std_based_type.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-06-08 -// Updated : 2008-06-08 -// Licence : This source is under MIT License -// File : glm/gtx/std_based_type.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_std_based_type +/// @file glm/gtx/std_based_type.inl +/// @date 2008-06-08 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/string_cast.hpp b/glm/gtx/string_cast.hpp index 3dd7cad3..2c3eb22f 100644 --- a/glm/gtx/string_cast.hpp +++ b/glm/gtx/string_cast.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/string_cast.inl b/glm/gtx/string_cast.inl index f30a0ff8..a898b542 100644 --- a/glm/gtx/string_cast.inl +++ b/glm/gtx/string_cast.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2006 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-04-27 -// Updated : 2014-05-10 -// Licence : This source is under MIT License -// File : glm/gtx/string_cast.hpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_string_cast +/// @file glm/gtx/string_cast.inl +/// @date 2008-04-26 / 2014-05-10 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/glm/gtx/transform.hpp b/glm/gtx/transform.hpp index d0ff300d..361bba21 100644 --- a/glm/gtx/transform.hpp +++ b/glm/gtx/transform.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/transform.inl b/glm/gtx/transform.inl index 8ea121ad..919ad755 100644 --- a/glm/gtx/transform.inl +++ b/glm/gtx/transform.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-21 -// Updated : 2009-04-29 -// Licence : This source is under MIT License -// File : glm/gtx/transform.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_transform +/// @file glm/gtx/transform.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/transform2.hpp b/glm/gtx/transform2.hpp index b41c504d..7758bf55 100644 --- a/glm/gtx/transform2.hpp +++ b/glm/gtx/transform2.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/transform2.inl b/glm/gtx/transform2.inl index be652d92..b798adc7 100644 --- a/glm/gtx/transform2.inl +++ b/glm/gtx/transform2.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-02-28 -// Updated : 2005-04-23 -// Licence : This source is under MIT License -// File : glm/gtx/transform2.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_transform2 +/// @file glm/gtx/transform2.inl +/// @date 2005-12-21 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/type_aligned.hpp b/glm/gtx/type_aligned.hpp index bfe4b3d4..7004e1be 100644 --- a/glm/gtx/type_aligned.hpp +++ b/glm/gtx/type_aligned.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/type_aligned.inl b/glm/gtx/type_aligned.inl index 744de959..607e9c7e 100644 --- a/glm/gtx/type_aligned.inl +++ b/glm/gtx/type_aligned.inl @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/vector_angle.hpp b/glm/gtx/vector_angle.hpp index 98a841f0..faf3afd9 100644 --- a/glm/gtx/vector_angle.hpp +++ b/glm/gtx/vector_angle.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/vector_angle.inl b/glm/gtx/vector_angle.inl index 4b5e8484..366c7ab6 100644 --- a/glm/gtx/vector_angle.inl +++ b/glm/gtx/vector_angle.inl @@ -1,11 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2005-12-30 -// Updated : 2008-09-29 -// Licence : This source is under MIT License -// File : glm/gtx/vector_angle.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_vector_angle +/// @file glm/gtx/vector_angle.inl +/// @date 2005-12-30 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/gtx/vector_query.hpp b/glm/gtx/vector_query.hpp index 3d1dbfd0..90bc8d00 100644 --- a/glm/gtx/vector_query.hpp +++ b/glm/gtx/vector_query.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/vector_query.inl b/glm/gtx/vector_query.inl index bd611ab5..2e7596e5 100644 --- a/glm/gtx/vector_query.inl +++ b/glm/gtx/vector_query.inl @@ -1,14 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-03-05 -// Updated : 2010-02-16 -// Licence : This source is under MIT License -// File : glm/gtx/vector_query.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Dependency: -// - GLM core -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_vector_query +/// @file glm/gtx/vector_query.inl +/// @date 2008-03-10 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/glm/gtx/wrap.hpp b/glm/gtx/wrap.hpp index 2a11a9b7..0ee1a923 100644 --- a/glm/gtx/wrap.hpp +++ b/glm/gtx/wrap.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/gtx/wrap.inl b/glm/gtx/wrap.inl index f6f9eaea..afa4052d 100644 --- a/glm/gtx/wrap.inl +++ b/glm/gtx/wrap.inl @@ -1,14 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2009-11-25 -// Updated : 2010-02-13 -// Licence : This source is under MIT License -// File : glm/gtx/wrap.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Dependency: -// - GLM core -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_wrap +/// @file glm/gtx/wrap.inl +/// @date 2009-11-25 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// namespace glm { diff --git a/glm/integer.hpp b/glm/integer.hpp index 5f7c00a4..dd19ac90 100644 --- a/glm/integer.hpp +++ b/glm/integer.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/mat2x2.hpp b/glm/mat2x2.hpp index 3e571d5c..933504c5 100644 --- a/glm/mat2x2.hpp +++ b/glm/mat2x2.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/mat2x3.hpp b/glm/mat2x3.hpp index 6c15b84e..07966d13 100644 --- a/glm/mat2x3.hpp +++ b/glm/mat2x3.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/mat2x4.hpp b/glm/mat2x4.hpp index 37058111..5e93ac19 100644 --- a/glm/mat2x4.hpp +++ b/glm/mat2x4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/mat3x2.hpp b/glm/mat3x2.hpp index baa60060..f4f99832 100644 --- a/glm/mat3x2.hpp +++ b/glm/mat3x2.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/mat3x3.hpp b/glm/mat3x3.hpp index 734e22e8..b544f40c 100644 --- a/glm/mat3x3.hpp +++ b/glm/mat3x3.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/mat3x4.hpp b/glm/mat3x4.hpp index 6d0d5eca..d4f4faf6 100644 --- a/glm/mat3x4.hpp +++ b/glm/mat3x4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/mat4x2.hpp b/glm/mat4x2.hpp index 9a404057..eb8920be 100644 --- a/glm/mat4x2.hpp +++ b/glm/mat4x2.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/mat4x3.hpp b/glm/mat4x3.hpp index 2f768152..4b6d8131 100644 --- a/glm/mat4x3.hpp +++ b/glm/mat4x3.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/mat4x4.hpp b/glm/mat4x4.hpp index 67239748..25ff56cd 100644 --- a/glm/mat4x4.hpp +++ b/glm/mat4x4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/matrix.hpp b/glm/matrix.hpp index 3b4bbb3f..ea224ec8 100644 --- a/glm/matrix.hpp +++ b/glm/matrix.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/packing.hpp b/glm/packing.hpp index d62de952..74fbb5e0 100644 --- a/glm/packing.hpp +++ b/glm/packing.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/trigonometric.hpp b/glm/trigonometric.hpp index 51edc935..67b978a8 100644 --- a/glm/trigonometric.hpp +++ b/glm/trigonometric.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/vec2.hpp b/glm/vec2.hpp index 6d7e17c2..efc448c3 100644 --- a/glm/vec2.hpp +++ b/glm/vec2.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/vec3.hpp b/glm/vec3.hpp index 9e3a8fc0..30cd097b 100644 --- a/glm/vec3.hpp +++ b/glm/vec3.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/vec4.hpp b/glm/vec4.hpp index 6b58a2ee..b099fd19 100644 --- a/glm/vec4.hpp +++ b/glm/vec4.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/glm/vector_relational.hpp b/glm/vector_relational.hpp index a0f3fd5f..8f2c8c65 100644 --- a/glm/vector_relational.hpp +++ b/glm/vector_relational.hpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index c542bff5..349b73fa 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-01-15 -// Updated : 2011-09-13 -// Licence : This source is under MIT licence -// File : test/core/func_common.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_common.cpp +/// @date 2011-01-15 / 2011-09-13 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #define GLM_FORCE_EXPLICIT_CTOR #include diff --git a/test/core/core_func_exponential.cpp b/test/core/core_func_exponential.cpp index a61fba60..885c1513 100644 --- a/test/core/core_func_exponential.cpp +++ b/test/core/core_func_exponential.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-01-15 -// Updated : 2011-09-13 -// Licence : This source is under MIT licence -// File : test/core/func_exponential.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_exponential.cpp +/// @date 2011-01-15 / 2011-09-13 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_func_geometric.cpp b/test/core/core_func_geometric.cpp index 62038895..3e093dea 100644 --- a/test/core/core_func_geometric.cpp +++ b/test/core/core_func_geometric.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-01-15 -// Updated : 2014-11-16 -// Licence : This source is under MIT licence -// File : test/core/func_geometric.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_geometric.cpp +/// @date 2011-01-15 / 2011-09-13 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index 21b7a5e6..eac947f9 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-05-03 -// Updated : 2011-05-03 -// Licence : This source is under MIT licence -// File : test/core/func_integer.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_integer.cpp +/// @date 2011-01-15 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_func_integer_bit_count.cpp b/test/core/core_func_integer_bit_count.cpp index 2e9d748a..ea196e12 100644 --- a/test/core/core_func_integer_bit_count.cpp +++ b/test/core/core_func_integer_bit_count.cpp @@ -1,3 +1,34 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_integer_bit_count.cpp +/// @date 2011-01-15 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + // This has the programs for computing the number of 1-bits // in a word, or byte, etc. // Max line length is 57, to fit in hacker.book. diff --git a/test/core/core_func_integer_find_lsb.cpp b/test/core/core_func_integer_find_lsb.cpp index 89b420a5..12e419dd 100644 --- a/test/core/core_func_integer_find_lsb.cpp +++ b/test/core/core_func_integer_find_lsb.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-10-27 -// Updated : 2014-10-27 -// Licence : This source is under MIT licence -// File : test/core/func_integer_find_lsb.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_integer_find_lsb.cpp +/// @date 2014-10-27 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// // This has the programs for computing the number of trailing zeros // in a word. diff --git a/test/core/core_func_integer_find_msb.cpp b/test/core/core_func_integer_find_msb.cpp index 21dd124a..176a6ea6 100644 --- a/test/core/core_func_integer_find_msb.cpp +++ b/test/core/core_func_integer_find_msb.cpp @@ -1,12 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-10-27 -// Updated : 2014-10-27 -// Licence : This source is under MIT licence -// File : test/core/func_integer_find_lsb.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// - +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_integer_find_msb.cpp +/// @date 2014-10-27 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// // This has the programs for computing the number of leading zeros // in a word. // Max line length is 57, to fit in hacker.book. diff --git a/test/core/core_func_matrix.cpp b/test/core/core_func_matrix.cpp index 14f52545..61f11d75 100644 --- a/test/core/core_func_matrix.cpp +++ b/test/core/core_func_matrix.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-01-15 -// Updated : 2012-05-02 -// Licence : This source is under MIT licence -// File : test/core/func_matrix.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_matrix.cpp +/// @date 2007-01-25 / 2011-06-07 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_func_noise.cpp b/test/core/core_func_noise.cpp index e9788702..ce455fbe 100644 --- a/test/core/core_func_noise.cpp +++ b/test/core/core_func_noise.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-01-15 -// Updated : 2011-09-13 -// Licence : This source is under MIT licence -// File : test/core/func_noise.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_noise.cpp +/// @date 2011-01-15 / 2011-09-13 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// int main() { diff --git a/test/core/core_func_packing.cpp b/test/core/core_func_packing.cpp index 236f51e3..868ad435 100644 --- a/test/core/core_func_packing.cpp +++ b/test/core/core_func_packing.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-01-15 -// Updated : 2011-09-13 -// Licence : This source is under MIT licence -// File : test/core/func_packing.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/func_packing.cpp +/// @date 2011-01-15 / 2011-09-13 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_func_swizzle.cpp b/test/core/core_func_swizzle.cpp index 0add4cb1..3508c979 100644 --- a/test/core/core_func_swizzle.cpp +++ b/test/core/core_func_swizzle.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-10-16 -// Updated : 2011-10-16 -// Licence : This source is under MIT License -// File : test/core/core_func_swizzle.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_func_swizzle.cpp +/// @date 2011-10-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #define GLM_MESSAGES #define GLM_SWIZZLE diff --git a/test/core/core_func_trigonometric.cpp b/test/core/core_func_trigonometric.cpp index 6c7ac3c4..fb4fd9b7 100644 --- a/test/core/core_func_trigonometric.cpp +++ b/test/core/core_func_trigonometric.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-01-15 -// Updated : 2011-09-13 -// Licence : This source is under MIT licence -// File : test/core/func_trigonometric.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_func_trigonometric.cpp +/// @date 2011-01-15 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/core/core_func_vector_relational.cpp b/test/core/core_func_vector_relational.cpp index 58978c6d..f21b1053 100644 --- a/test/core/core_func_vector_relational.cpp +++ b/test/core/core_func_vector_relational.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-01-15 -// Updated : 2011-09-13 -// Licence : This source is under MIT licence -// File : test/core/vector_relational.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_vector_relational.cpp +/// @date 2011-01-15 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_setup_force_cxx98.cpp b/test/core/core_setup_force_cxx98.cpp index e3a92e78..651cee9c 100644 --- a/test/core/core_setup_force_cxx98.cpp +++ b/test/core/core_setup_force_cxx98.cpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/test/core/core_setup_precision.cpp b/test/core/core_setup_precision.cpp index 40c28f1d..b0987237 100644 --- a/test/core/core_setup_precision.cpp +++ b/test/core/core_setup_precision.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-05-31 -// Updated : 2011-05-31 -// Licence : This source is under MIT License -// File : test/core/setup_precision_highp.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_setup_precision.cpp +/// @date 2011-05-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #define GLM_FORCE_INLINE #define GLM_PRECISION_HIGHP_FLOAT diff --git a/test/core/core_type_cast.cpp b/test/core/core_type_cast.cpp index 9cac442b..1d9ee494 100644 --- a/test/core/core_type_cast.cpp +++ b/test/core/core_type_cast.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-05-06 -// Updated : 2013-05-06 -// Licence : This source is under MIT License -// File : test/core/type_cast.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_cast.cpp +/// @date 2013-05-06 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_float.cpp b/test/core/core_type_float.cpp index bb967eb5..7f70e9cb 100644 --- a/test/core/core_type_float.cpp +++ b/test/core/core_type_float.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2011-05-06 -// Licence : This source is under MIT License -// File : test/core/type_float.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_float.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/core/core_type_int.cpp b/test/core/core_type_int.cpp index 054c5c1d..19be2361 100644 --- a/test/core/core_type_int.cpp +++ b/test/core/core_type_int.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2011-05-06 -// Licence : This source is under MIT License -// File : test/core/type_int.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_int.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/core/core_type_length.cpp b/test/core/core_type_length.cpp index 879caff8..2e5a93ae 100644 --- a/test/core/core_type_length.cpp +++ b/test/core/core_type_length.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-05-25 -// Updated : 2011-05-25 -// Licence : This source is under MIT License -// File : test/core/type_length.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_length.cpp +/// @date 2011-05-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/core/core_type_length_size.cpp b/test/core/core_type_length_size.cpp index 8edc58b2..74735591 100644 --- a/test/core/core_type_length_size.cpp +++ b/test/core/core_type_length_size.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-05-25 -// Updated : 2011-05-25 -// Licence : This source is under MIT License -// File : test/core/type_length.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_length_size.cpp +/// @date 2011-05-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #define GLM_FORCE_SIZE_FUNC #include diff --git a/test/core/core_type_mat2x2.cpp b/test/core/core_type_mat2x2.cpp index 6c6e5b5d..5637f7f6 100644 --- a/test/core/core_type_mat2x2.cpp +++ b/test/core/core_type_mat2x2.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2008-08-31 -// Licence : This source is under MIT License -// File : test/core/type_mat2x2.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_mat2x2.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_mat2x3.cpp b/test/core/core_type_mat2x3.cpp index 1106b625..22a5d3e6 100644 --- a/test/core/core_type_mat2x3.cpp +++ b/test/core/core_type_mat2x3.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2013-10-04 -// Licence : This source is under MIT License -// File : test/core/type_mat2x3.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_mat2x3.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_mat2x4.cpp b/test/core/core_type_mat2x4.cpp index 9a0036fd..b9638685 100644 --- a/test/core/core_type_mat2x4.cpp +++ b/test/core/core_type_mat2x4.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2008-08-31 -// Licence : This source is under MIT License -// File : test/core/type_mat2x4.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_mat2x4.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_mat3x2.cpp b/test/core/core_type_mat3x2.cpp index 9d789e67..82318a29 100644 --- a/test/core/core_type_mat3x2.cpp +++ b/test/core/core_type_mat3x2.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2008-08-31 -// Licence : This source is under MIT License -// File : test/core/type_mat3x2.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_mat3x2.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_mat3x3.cpp b/test/core/core_type_mat3x3.cpp index b3fc7322..beb46aa8 100644 --- a/test/core/core_type_mat3x3.cpp +++ b/test/core/core_type_mat3x3.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2008-08-31 -// Licence : This source is under MIT License -// File : test/core/type_mat3x3.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_mat3x3.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_mat3x4.cpp b/test/core/core_type_mat3x4.cpp index 52da11a6..ea50ec0a 100644 --- a/test/core/core_type_mat3x4.cpp +++ b/test/core/core_type_mat3x4.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2008-08-31 -// Licence : This source is under MIT License -// File : test/core/type_mat3x4.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_mat3x4.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_mat4x2.cpp b/test/core/core_type_mat4x2.cpp index 9d707039..9f98c86a 100644 --- a/test/core/core_type_mat4x2.cpp +++ b/test/core/core_type_mat4x2.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2008-08-31 -// Licence : This source is under MIT License -// File : test/core/type_mat4x2.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_mat4x2.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_mat4x3.cpp b/test/core/core_type_mat4x3.cpp index ca70b6bc..02ba2676 100644 --- a/test/core/core_type_mat4x3.cpp +++ b/test/core/core_type_mat4x3.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2008-08-31 -// Licence : This source is under MIT License -// File : test/core/type_mat4x3.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_mat4x3.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_mat4x4.cpp b/test/core/core_type_mat4x4.cpp index ad6fdc78..29e4fb91 100644 --- a/test/core/core_type_mat4x4.cpp +++ b/test/core/core_type_mat4x4.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2008-08-31 -// Licence : This source is under MIT License -// File : test/core/type_mat4x4.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_mat4x4.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/core/core_type_vec1.cpp b/test/core/core_type_vec1.cpp index b88e87ee..f151f575 100644 --- a/test/core/core_type_vec1.cpp +++ b/test/core/core_type_vec1.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-10-11 -// Updated : 2014-10-11 -// Licence : This source is under MIT License -// File : test/core/type_vec1.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_vec1.cpp +/// @date 2014-10-11 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #define GLM_SWIZZLE #include diff --git a/test/core/core_type_vec2.cpp b/test/core/core_type_vec2.cpp index 2ac3da96..72f1e212 100644 --- a/test/core/core_type_vec2.cpp +++ b/test/core/core_type_vec2.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2011-05-31 -// Licence : This source is under MIT License -// File : test/core/type_vec2.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_vec2.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #define GLM_SWIZZLE #include diff --git a/test/core/core_type_vec3.cpp b/test/core/core_type_vec3.cpp index 31627a68..b7ec1256 100644 --- a/test/core/core_type_vec3.cpp +++ b/test/core/core_type_vec3.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2013-08-27 -// Licence : This source is under MIT License -// File : test/core/type_vec3.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_vec3.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #define GLM_SWIZZLE #include diff --git a/test/core/core_type_vec4.cpp b/test/core/core_type_vec4.cpp index 355d91f4..7d4b80d8 100644 --- a/test/core/core_type_vec4.cpp +++ b/test/core/core_type_vec4.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2008-08-31 -// Updated : 2013-12-24 -// Licence : This source is under MIT License -// File : test/core/type_vec4.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/core/core_type_vec4.cpp +/// @date 2008-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// //#define GLM_FORCE_AVX2 #define GLM_SWIZZLE diff --git a/test/gtc/gtc_bitfield.cpp b/test/gtc/gtc_bitfield.cpp index 828208bb..ab5dab87 100644 --- a/test/gtc/gtc_bitfield.cpp +++ b/test/gtc/gtc_bitfield.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-10-25 -// Updated : 2014-10-25 -// Licence : This source is under MIT licence -// File : test/gtc/bitfield.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_bitfield.cpp +/// @date 2014-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_constants.cpp b/test/gtc/gtc_constants.cpp index 77ba47ce..42d473d7 100644 --- a/test/gtc/gtc_constants.cpp +++ b/test/gtc/gtc_constants.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2012-09-19 -// Updated : 2012-12-13 -// Licence : This source is under MIT licence -// File : test/gtc/constants.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_constants.cpp +/// @date 2012-09-19 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtc/gtc_epsilon.cpp b/test/gtc/gtc_epsilon.cpp index 6ef111c8..763cc3a1 100644 --- a/test/gtc/gtc_epsilon.cpp +++ b/test/gtc/gtc_epsilon.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2012-09-19 -// Updated : 2012-09-19 -// Licence : This source is under MIT licence -// File : test/gtc/epsilon.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_epsilon.cpp +/// @date 2012-09-19 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_integer.cpp b/test/gtc/gtc_integer.cpp index 011af9a7..9fc1aa61 100644 --- a/test/gtc/gtc_integer.cpp +++ b/test/gtc/gtc_integer.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-11-17 -// Updated : 2014-11-17 -// Licence : This source is under MIT licence -// File : test/gtc/integer.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_integer.cpp +/// @date 2014-11-17 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #define GLM_FORCE_INLINE #include diff --git a/test/gtc/gtc_matrix_access.cpp b/test/gtc/gtc_matrix_access.cpp index e9da259a..b70182b2 100644 --- a/test/gtc/gtc_matrix_access.cpp +++ b/test/gtc/gtc_matrix_access.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2010-09-16 -// Updated : 2013-05-10 -// Licence : This source is under MIT licence -// File : test/gtc/matrix_access.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_matrix_access.cpp +/// @date 2010-09-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_matrix_integer.cpp b/test/gtc/gtc_matrix_integer.cpp index 428e34f0..6a5c130d 100644 --- a/test/gtc/gtc_matrix_integer.cpp +++ b/test/gtc/gtc_matrix_integer.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2010-09-16 -// Updated : 2010-09-16 -// Licence : This source is under MIT licence -// File : test/gtc/matrix_integer.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_matrix_integer.cpp +/// @date 2010-09-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtc/gtc_matrix_inverse.cpp b/test/gtc/gtc_matrix_inverse.cpp index e63c9175..16b21601 100644 --- a/test/gtc/gtc_matrix_inverse.cpp +++ b/test/gtc/gtc_matrix_inverse.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2010-09-16 -// Updated : 2010-09-16 -// Licence : This source is under MIT licence -// File : test/gtc/matrix_inverse.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_matrix_inverse.cpp +/// @date 2010-09-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtc/gtc_matrix_transform.cpp b/test/gtc/gtc_matrix_transform.cpp index 9530045f..f35b151f 100644 --- a/test/gtc/gtc_matrix_transform.cpp +++ b/test/gtc/gtc_matrix_transform.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2010-09-16 -// Updated : 2010-09-16 -// Licence : This source is under MIT licence -// File : test/gtc/matrix_transform.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_matrix_transform.cpp +/// @date 2010-09-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_noise.cpp b/test/gtc/gtc_noise.cpp index dee176b9..c3829f4e 100644 --- a/test/gtc/gtc_noise.cpp +++ b/test/gtc/gtc_noise.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-04-21 -// Updated : 2011-04-26 -// Licence : This source is under MIT licence -// File : test/gtc/noise.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_noise.cpp +/// @date 2011-04-21 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_packing.cpp b/test/gtc/gtc_packing.cpp index 0cef7e61..3ac9defa 100644 --- a/test/gtc/gtc_packing.cpp +++ b/test/gtc/gtc_packing.cpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -20,9 +24,8 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// -/// @ref test -/// @file test/gtc/packing.cpp -/// @date 2013-08-09 / 2013-08-09 +/// @file test/gtc/gtc_packing.cpp +/// @date 2013-08-09 / 2014-11-25 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// diff --git a/test/gtc/gtc_quaternion.cpp b/test/gtc/gtc_quaternion.cpp index 650c58ae..89dff8ca 100644 --- a/test/gtc/gtc_quaternion.cpp +++ b/test/gtc/gtc_quaternion.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2010-09-16 -// Updated : 2011-05-25 -// Licence : This source is under MIT licence -// File : test/gtc/quaternion.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_quaternion.cpp +/// @date 2010-09-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_random.cpp b/test/gtc/gtc_random.cpp index 19303826..a0019572 100644 --- a/test/gtc/gtc_random.cpp +++ b/test/gtc/gtc_random.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-09-19 -// Updated : 2011-09-19 -// Licence : This source is under MIT licence -// File : test/gtc/random.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_random.cpp +/// @date 2011-09-19 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_reciprocal.cpp b/test/gtc/gtc_reciprocal.cpp index a98b8a1e..6de998ed 100644 --- a/test/gtc/gtc_reciprocal.cpp +++ b/test/gtc/gtc_reciprocal.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2012-09-19 -// Updated : 2012-09-19 -// Licence : This source is under MIT licence -// File : test/gtc/reciprocal.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_reciprocal.cpp +/// @date 2012-09-19 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_type_precision.cpp b/test/gtc/gtc_type_precision.cpp index 7b3af0fc..6147bec3 100644 --- a/test/gtc/gtc_type_precision.cpp +++ b/test/gtc/gtc_type_precision.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2010-09-16 -// Updated : 2013-04-16 -// Licence : This source is under MIT licence -// File : test/gtc/type_precision.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_type_precision.cpp +/// @date 2010-09-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_type_ptr.cpp b/test/gtc/gtc_type_ptr.cpp index b4fa4213..970f3b67 100644 --- a/test/gtc/gtc_type_ptr.cpp +++ b/test/gtc/gtc_type_ptr.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2010-09-16 -// Updated : 2011-05-27 -// Licence : This source is under MIT licence -// File : test/gtc/type_ptr.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_type_ptr.cpp +/// @date 2010-09-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtc/gtc_ulp.cpp b/test/gtc/gtc_ulp.cpp index 7c73175d..6d8c6574 100644 --- a/test/gtc/gtc_ulp.cpp +++ b/test/gtc/gtc_ulp.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-04-26 -// Updated : 2011-04-26 -// Licence : This source is under MIT licence -// File : test/gtc/ulp.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_ulp.cpp +/// @date 2011-04-26 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtc/gtc_vec1.cpp b/test/gtc/gtc_vec1.cpp index 129c76f0..6a3975e0 100644 --- a/test/gtc/gtc_vec1.cpp +++ b/test/gtc/gtc_vec1.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-10-11 -// Updated : 2014-10-11 -// Licence : This source is under MIT License -// File : test/gtc/vec1.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtc/gtc_vec1.cpp +/// @date 2014-10-11 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtx/CMakeLists.txt b/test/gtx/CMakeLists.txt index e5e109c6..4be4343f 100644 --- a/test/gtx/CMakeLists.txt +++ b/test/gtx/CMakeLists.txt @@ -13,7 +13,6 @@ glmCreateTestGTC(gtx_fast_square_root) glmCreateTestGTC(gtx_fast_trigonometry) glmCreateTestGTC(gtx_gradient_paint) glmCreateTestGTC(gtx_handed_coordinate_space) -glmCreateTestGTC(gtx_inertia) glmCreateTestGTC(gtx_integer) glmCreateTestGTC(gtx_intersect) glmCreateTestGTC(gtx_io) diff --git a/test/gtx/gtx_associated_min_max.cpp b/test/gtx/gtx_associated_min_max.cpp index 5840e33b..8d5428ee 100644 --- a/test/gtx/gtx_associated_min_max.cpp +++ b/test/gtx/gtx_associated_min_max.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/associated_min_max.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_associated_min_max.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_closest_point.cpp b/test/gtx/gtx_closest_point.cpp index 5840e33b..fbd5fff0 100644 --- a/test/gtx/gtx_closest_point.cpp +++ b/test/gtx/gtx_closest_point.cpp @@ -1,14 +1,35 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/associated_min_max.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_closest_point.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include -#include +#include int main() { diff --git a/test/gtx/gtx_color_space.cpp b/test/gtx/gtx_color_space.cpp index 0849adcd..014e4696 100644 --- a/test/gtx/gtx_color_space.cpp +++ b/test/gtx/gtx_color_space.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/color_space.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_color_space.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int test_saturation() diff --git a/test/gtx/gtx_color_space_YCoCg.cpp b/test/gtx/gtx_color_space_YCoCg.cpp index 4dbccc7b..172ce624 100644 --- a/test/gtx/gtx_color_space_YCoCg.cpp +++ b/test/gtx/gtx_color_space_YCoCg.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/color_space_YCoCg.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_color_space_YCoCg.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_common.cpp b/test/gtx/gtx_common.cpp index 8f06dcd7..3c89e1a6 100644 --- a/test/gtx/gtx_common.cpp +++ b/test/gtx/gtx_common.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-09-08 -// Updated : 2014-09-08 -// Licence : This source is under MIT licence -// File : test/gtx/common.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_common.cpp +/// @date 2014-09-08 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtx/gtx_compatibility.cpp b/test/gtx/gtx_compatibility.cpp index 95faa6e1..6d039122 100644 --- a/test/gtx/gtx_compatibility.cpp +++ b/test/gtx/gtx_compatibility.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/compatibility.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_compatibility.cpp +/// @date 2014-09-08 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_component_wise.cpp b/test/gtx/gtx_component_wise.cpp index 9e5ffff3..2d032267 100644 --- a/test/gtx/gtx_component_wise.cpp +++ b/test/gtx/gtx_component_wise.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/component_wise.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_component_wise.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_dual_quaternion.cpp b/test/gtx/gtx_dual_quaternion.cpp index 562f7b38..dd135012 100644 --- a/test/gtx/gtx_dual_quaternion.cpp +++ b/test/gtx/gtx_dual_quaternion.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-02-10 -// Updated : 2013-02-11 -// Licence : This source is under MIT licence -// File : test/gtc/gtc_dual_quaternion.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_dual_quaternion.cpp +/// @date 2013-02-10 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_euler_angle.cpp b/test/gtx/gtx_euler_angle.cpp index 330f6863..f4b1c905 100644 --- a/test/gtx/gtx_euler_angle.cpp +++ b/test/gtx/gtx_euler_angle.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2014-01-11 -// Licence : This source is under MIT licence -// File : test/gtx/euler_angle.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_euler_angle.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// // Code sample from Filippo Ramaciotti diff --git a/test/gtx/gtx_extend.cpp b/test/gtx/gtx_extend.cpp index 6dd268d5..2c12c5a0 100644 --- a/test/gtx/gtx_extend.cpp +++ b/test/gtx/gtx_extend.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/extend.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_extend.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_extented_min_max.cpp b/test/gtx/gtx_extented_min_max.cpp index 5840e33b..f3f2320d 100644 --- a/test/gtx/gtx_extented_min_max.cpp +++ b/test/gtx/gtx_extented_min_max.cpp @@ -1,14 +1,35 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/associated_min_max.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_extented_min_max.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include -#include +#include int main() { diff --git a/test/gtx/gtx_fast_exponential.cpp b/test/gtx/gtx_fast_exponential.cpp index 3318b882..2377cbe7 100644 --- a/test/gtx/gtx_fast_exponential.cpp +++ b/test/gtx/gtx_fast_exponential.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/associated_min_max.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_fast_exponential.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_fast_square_root.cpp b/test/gtx/gtx_fast_square_root.cpp index 061dbb3b..d33817b8 100644 --- a/test/gtx/gtx_fast_square_root.cpp +++ b/test/gtx/gtx_fast_square_root.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/fast_square_root.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_fast_square_root.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_fast_trigonometry.cpp b/test/gtx/gtx_fast_trigonometry.cpp index f8fe3a8f..d0c671e6 100644 --- a/test/gtx/gtx_fast_trigonometry.cpp +++ b/test/gtx/gtx_fast_trigonometry.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/fast_trigonometry.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_fast_trigonometry.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_gradient_paint.cpp b/test/gtx/gtx_gradient_paint.cpp index 80af3662..3df7aca2 100644 --- a/test/gtx/gtx_gradient_paint.cpp +++ b/test/gtx/gtx_gradient_paint.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-10-13 -// Updated : 2011-10-13 -// Licence : This source is under MIT licence -// File : test/gtx/gradient_paint.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_gradient_paint.cpp +/// @date 2011-10-13 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtx/gtx_handed_coordinate_space.cpp b/test/gtx/gtx_handed_coordinate_space.cpp index d45563d0..7ce83079 100644 --- a/test/gtx/gtx_handed_coordinate_space.cpp +++ b/test/gtx/gtx_handed_coordinate_space.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/handed_coordinate_space.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_handed_coordinate_space.cpp +/// @date 2011-10-13 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_inertia.cpp b/test/gtx/gtx_inertia.cpp deleted file mode 100644 index 7a8956f2..00000000 --- a/test/gtx/gtx_inertia.cpp +++ /dev/null @@ -1,18 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/inertia.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// - -#include -#include - -int main() -{ - int Error(0); - - return Error; -} diff --git a/test/gtx/gtx_integer.cpp b/test/gtx/gtx_integer.cpp index fd41c0b6..8485b0ed 100644 --- a/test/gtx/gtx_integer.cpp +++ b/test/gtx/gtx_integer.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-10-11 -// Updated : 2011-10-11 -// Licence : This source is under MIT licence -// File : test/gtx/gtx_integer.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_integer.cpp +/// @date 2011-10-11 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_intersect.cpp b/test/gtx/gtx_intersect.cpp index 5c3b5cb6..b1636e9a 100644 --- a/test/gtx/gtx_intersect.cpp +++ b/test/gtx/gtx_intersect.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/intersect.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_intersect.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_io.cpp b/test/gtx/gtx_io.cpp index 05be9bf1..050ff2ed 100644 --- a/test/gtx/gtx_io.cpp +++ b/test/gtx/gtx_io.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-11-22 -// Updated : 2013-11-22 -// Licence : This source is under MIT licence -// File : test/gtx/io.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_io.cpp +/// @date 2013-11-22 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_log_base.cpp b/test/gtx/gtx_log_base.cpp index 4de4ed09..83d980fe 100644 --- a/test/gtx/gtx_log_base.cpp +++ b/test/gtx/gtx_log_base.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/log_base.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_log_base.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_matrix_cross_product.cpp b/test/gtx/gtx_matrix_cross_product.cpp index 5dcd9376..b697c093 100644 --- a/test/gtx/gtx_matrix_cross_product.cpp +++ b/test/gtx/gtx_matrix_cross_product.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/matrix_cross_product.hpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_matrix_cross_product.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_matrix_decompose.cpp b/test/gtx/gtx_matrix_decompose.cpp index 6a9241ae..f158066c 100644 --- a/test/gtx/gtx_matrix_decompose.cpp +++ b/test/gtx/gtx_matrix_decompose.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-08-31 -// Updated : 2014-08-31 -// Licence : This source is under MIT licence -// File : test/gtx/decomposition.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_decomposition.cpp +/// @date 2014-08-31 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtx/gtx_matrix_interpolation.cpp b/test/gtx/gtx_matrix_interpolation.cpp index 6e4c19aa..0c0305f0 100644 --- a/test/gtx/gtx_matrix_interpolation.cpp +++ b/test/gtx/gtx_matrix_interpolation.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2012-09-19 -// Updated : 2012-09-19 -// Licence : This source is under MIT licence -// File : test/gtx/matrix_interpolation.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_matrix_interpolation.cpp +/// @date 2012-09-19 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtx/gtx_matrix_major_storage.cpp b/test/gtx/gtx_matrix_major_storage.cpp index c3794bc7..2ca82b0a 100644 --- a/test/gtx/gtx_matrix_major_storage.cpp +++ b/test/gtx/gtx_matrix_major_storage.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/matrix_major_storage.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_matrix_major_storage.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_matrix_operation.cpp b/test/gtx/gtx_matrix_operation.cpp index 05274262..638da3e9 100644 --- a/test/gtx/gtx_matrix_operation.cpp +++ b/test/gtx/gtx_matrix_operation.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/matrix_operation.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_matrix_operation.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_matrix_query.cpp b/test/gtx/gtx_matrix_query.cpp index d53b03b6..f97f6593 100644 --- a/test/gtx/gtx_matrix_query.cpp +++ b/test/gtx/gtx_matrix_query.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-11-22 -// Updated : 2011-11-22 -// Licence : This source is under MIT licence -// File : test/gtx/matrix_query.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_matrix_query.cpp +/// @date 2011-11-22 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtx/gtx_matrix_transform_2d.cpp b/test/gtx/gtx_matrix_transform_2d.cpp index 786143b2..e7162ac1 100644 --- a/test/gtx/gtx_matrix_transform_2d.cpp +++ b/test/gtx/gtx_matrix_transform_2d.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-02-21 -// Updated : 2014-02-21 -// Licence : This source is under MIT licence -// File : test/gtx/matrix_transform_2d.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_matrix_transform_2d.cpp +/// @date 2014-02-21 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtx/gtx_multiple.cpp b/test/gtx/gtx_multiple.cpp index f2500260..473d0510 100644 --- a/test/gtx/gtx_multiple.cpp +++ b/test/gtx/gtx_multiple.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2012-11-19 -// Updated : 2012-11-19 -// Licence : This source is under MIT licence -// File : test/gtx/gtx_multiple.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_multiple.cpp +/// @date 2012-11-19 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtx/gtx_norm.cpp b/test/gtx/gtx_norm.cpp index 096a5d8d..553b2654 100644 --- a/test/gtx/gtx_norm.cpp +++ b/test/gtx/gtx_norm.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/norm.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_norm.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_normal.cpp b/test/gtx/gtx_normal.cpp index ead190f9..f1cf31a1 100644 --- a/test/gtx/gtx_normal.cpp +++ b/test/gtx/gtx_normal.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/normal.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_normal.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_normalize_dot.cpp b/test/gtx/gtx_normalize_dot.cpp index 67313225..64d98672 100644 --- a/test/gtx/gtx_normalize_dot.cpp +++ b/test/gtx/gtx_normalize_dot.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/normalize_dot.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_normalize_dot.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_number_precision.cpp b/test/gtx/gtx_number_precision.cpp index a2e9008d..17a04a4c 100644 --- a/test/gtx/gtx_number_precision.cpp +++ b/test/gtx/gtx_number_precision.cpp @@ -1,13 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/number_precision.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_number_precision.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_optimum_pow.cpp b/test/gtx/gtx_optimum_pow.cpp index 430d0e5e..a0336e45 100644 --- a/test/gtx/gtx_optimum_pow.cpp +++ b/test/gtx/gtx_optimum_pow.cpp @@ -1,14 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/optimum_pow.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_optimum_pow.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include -#include #include int main() diff --git a/test/gtx/gtx_orthonormalize.cpp b/test/gtx/gtx_orthonormalize.cpp index e9902d63..95300e26 100644 --- a/test/gtx/gtx_orthonormalize.cpp +++ b/test/gtx/gtx_orthonormalize.cpp @@ -1,14 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/orthonormalize.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_orthonormalize.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include -#include #include int main() diff --git a/test/gtx/gtx_perpendicular.cpp b/test/gtx/gtx_perpendicular.cpp index 0f2a5fec..3c3fe0ef 100644 --- a/test/gtx/gtx_perpendicular.cpp +++ b/test/gtx/gtx_perpendicular.cpp @@ -1,14 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/perpendicular.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_perpendicular.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include -#include #include int main() diff --git a/test/gtx/gtx_polar_coordinates.cpp b/test/gtx/gtx_polar_coordinates.cpp index 957c9884..e77c054f 100644 --- a/test/gtx/gtx_polar_coordinates.cpp +++ b/test/gtx/gtx_polar_coordinates.cpp @@ -1,14 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/polar_coordinates.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_polar_coordinates.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include -#include #include int main() diff --git a/test/gtx/gtx_projection.cpp b/test/gtx/gtx_projection.cpp index 777c165b..a9f18028 100644 --- a/test/gtx/gtx_projection.cpp +++ b/test/gtx/gtx_projection.cpp @@ -1,14 +1,34 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/projection.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_projection.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include -#include #include int main() diff --git a/test/gtx/gtx_quaternion.cpp b/test/gtx/gtx_quaternion.cpp index 3153a910..d4c6f435 100644 --- a/test/gtx/gtx_quaternion.cpp +++ b/test/gtx/gtx_quaternion.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-05-25 -// Updated : 2011-05-31 -// Licence : This source is under MIT licence -// File : test/gtx/quaternion.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_quaternion.cpp +/// @date 2011-05-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_range.cpp b/test/gtx/gtx_range.cpp index 91911490..d7fb872a 100644 --- a/test/gtx/gtx_range.cpp +++ b/test/gtx/gtx_range.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-09-19 -// Updated : 2014-09-19 -// Licence : This source is under MIT licence -// File : test/gtx/gtx_range.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_range.cpp +/// @date 2014-09-19 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_rotate_normalized_axis.cpp b/test/gtx/gtx_rotate_normalized_axis.cpp index cf10598f..38031bf2 100644 --- a/test/gtx/gtx_rotate_normalized_axis.cpp +++ b/test/gtx/gtx_rotate_normalized_axis.cpp @@ -12,6 +12,10 @@ /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -20,13 +24,11 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// -/// @ref gtx_rotate_normalized_axis -/// @file test/gtx/rotate_normalized_axis.cpp +/// @file test/gtx/gtx_rotate_normalized_axis.cpp /// @date 2012-12-13 / 2012-12-13 /// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// -#include #include int main() diff --git a/test/gtx/gtx_rotate_vector.cpp b/test/gtx/gtx_rotate_vector.cpp index ff8fac60..b8212f06 100644 --- a/test/gtx/gtx_rotate_vector.cpp +++ b/test/gtx/gtx_rotate_vector.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-05-16 -// Updated : 2011-05-16 -// Licence : This source is under MIT licence -// File : test/gtx/rotate_vector.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_rotate_vector.cpp +/// @date 2011-05-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_scalar_multiplication.cpp b/test/gtx/gtx_scalar_multiplication.cpp index a8aef354..19325653 100644 --- a/test/gtx/gtx_scalar_multiplication.cpp +++ b/test/gtx/gtx_scalar_multiplication.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-09-22 -// Updated : 2014-09-22 -// Licence : This source is under MIT licence -// File : test/gtx/gtx_scalar_multiplication.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_scalar_multiplication.cpp +/// @date 2014-09-22 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include diff --git a/test/gtx/gtx_scalar_relational.cpp b/test/gtx/gtx_scalar_relational.cpp index 096d1dc8..5156e6c5 100644 --- a/test/gtx/gtx_scalar_relational.cpp +++ b/test/gtx/gtx_scalar_relational.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-02-04 -// Updated : 2013-02-04 -// Licence : This source is under MIT licence -// File : test/gtx/gtx_scalar_relational.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_scalar_relational.cpp +/// @date 2013-02-04 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_simd_mat4.cpp b/test/gtx/gtx_simd_mat4.cpp index 615b69f2..c7ea4592 100644 --- a/test/gtx/gtx_simd_mat4.cpp +++ b/test/gtx/gtx_simd_mat4.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2010-09-16 -// Updated : 2010-09-16 -// Licence : This source is under MIT licence -// File : test/gtx/simd-mat4.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_simd_mat4.cpp +/// @date 2010-09-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_simd_vec4.cpp b/test/gtx/gtx_simd_vec4.cpp index af7894f3..e71a60b9 100644 --- a/test/gtx/gtx_simd_vec4.cpp +++ b/test/gtx/gtx_simd_vec4.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2010-09-16 -// Updated : 2010-09-16 -// Licence : This source is under MIT licence -// File : test/gtx/simd-vec4.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_simd_vec4.cpp +/// @date 2010-09-16 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_spline.cpp b/test/gtx/gtx_spline.cpp index d82536fe..c627fb21 100644 --- a/test/gtx/gtx_spline.cpp +++ b/test/gtx/gtx_spline.cpp @@ -1,14 +1,37 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2013-10-25 -// Updated : 2013-10-25 -// Licence : This source is under MIT licence -// File : test/gtx/associated_min_max.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_spline.cpp +/// @date 2013-10-25 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include -#include +#include +#include +#include #include namespace catmullRom diff --git a/test/gtx/gtx_string_cast.cpp b/test/gtx/gtx_string_cast.cpp index 2d796b22..61223a88 100644 --- a/test/gtx/gtx_string_cast.cpp +++ b/test/gtx/gtx_string_cast.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-09-01 -// Updated : 2011-09-01 -// Licence : This source is under MIT licence -// File : test/gtx/string_cast.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_string_cast.cpp +/// @date 2011-09-01 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_type_aligned.cpp b/test/gtx/gtx_type_aligned.cpp index bddb6cba..aeff2b7e 100644 --- a/test/gtx/gtx_type_aligned.cpp +++ b/test/gtx/gtx_type_aligned.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2014-11-23 -// Updated : 2014-11-23 -// Licence : This source is under MIT licence -// File : test/gtc/type_aligned.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_type_aligned.cpp +/// @date 2014-11-23 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_vector_angle.cpp b/test/gtx/gtx_vector_angle.cpp index 94d38880..342c59ed 100644 --- a/test/gtx/gtx_vector_angle.cpp +++ b/test/gtx/gtx_vector_angle.cpp @@ -1,11 +1,33 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-05-15 -// Updated : 2011-05-15 -// Licence : This source is under MIT licence -// File : test/gtx/vector_angle.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_vector_angle.cpp +/// @date 2011-05-15 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// #include #include diff --git a/test/gtx/gtx_vector_query.cpp b/test/gtx/gtx_vector_query.cpp index d6d8f9fc..a2ea54b5 100644 --- a/test/gtx/gtx_vector_query.cpp +++ b/test/gtx/gtx_vector_query.cpp @@ -1,13 +1,37 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2011-11-23 -// Updated : 2011-11-23 -// Licence : This source is under MIT licence -// File : test/gtx/vector_query.cpp -/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// Restrictions: +/// By making use of the Software for military purposes, you choose to make +/// a Bunny unhappy. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @file test/gtx/gtx_vector_query.cpp +/// @date 2011-11-23 / 2014-11-25 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// -#include +#include +#include +#include #include int test_areCollinear() From cdd36afdc183c0d8b5be95eeba9c77b790c44f0d Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 26 Nov 2014 00:33:24 +0100 Subject: [PATCH 37/64] Fixed build --- glm/gtx/component_wise.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/glm/gtx/component_wise.hpp b/glm/gtx/component_wise.hpp index 2907900a..fb6b6ed6 100644 --- a/glm/gtx/component_wise.hpp +++ b/glm/gtx/component_wise.hpp @@ -43,6 +43,7 @@ // Dependencies #include "../detail/setup.hpp" +#include "../detail/precision.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) # pragma message("GLM: GLM_GTX_component_wise extension included") From bbf88573492c27794e90df34fff43285a4a38ff9 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Thu, 27 Nov 2014 22:36:50 +0100 Subject: [PATCH 38/64] Updated readme --- readme.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/readme.txt b/readme.txt index 3c4546e4..0f4a07f6 100644 --- a/readme.txt +++ b/readme.txt @@ -44,7 +44,6 @@ http://glm.g-truc.net/glm.pdf GLM 0.9.6.0: 2014-11-30 -------------------------------------------------------------------------------- Features: -- Added transparent use of SIMD instructions for vec4 and mat4 types - Exposed template vector and matrix types in 'glm' namespace #239, #244 - Added GTX_scalar_multiplication for C++ 11 compiler only #242 - Added GTX_range for C++ 11 compiler only #240 From bdd723ed3bb1d7947a73d7a09dbc744d7f089cbd Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Thu, 27 Nov 2014 23:42:35 +0100 Subject: [PATCH 39/64] Updated deprecated compilers --- glm/detail/setup.hpp | 7 ------- readme.txt | 6 +++--- test/core/core_setup_message.cpp | 12 ------------ 3 files changed, 3 insertions(+), 22 deletions(-) diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index a5374699..e5982bad 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -133,8 +133,6 @@ // GCC defines #define GLM_COMPILER_GCC 0x02000000 -#define GLM_COMPILER_GCC42 0x02000090 -#define GLM_COMPILER_GCC43 0x020000A0 #define GLM_COMPILER_GCC44 0x020000B0 #define GLM_COMPILER_GCC45 0x020000C0 #define GLM_COMPILER_GCC46 0x020000D0 @@ -145,9 +143,6 @@ // CUDA #define GLM_COMPILER_CUDA 0x10000000 -#define GLM_COMPILER_CUDA30 0x10000010 -#define GLM_COMPILER_CUDA31 0x10000020 -#define GLM_COMPILER_CUDA32 0x10000030 #define GLM_COMPILER_CUDA40 0x10000040 #define GLM_COMPILER_CUDA41 0x10000050 #define GLM_COMPILER_CUDA42 0x10000060 @@ -157,8 +152,6 @@ // LLVM #define GLM_COMPILER_LLVM 0x20000000 -#define GLM_COMPILER_LLVM30 0x20000010 -#define GLM_COMPILER_LLVM31 0x20000020 #define GLM_COMPILER_LLVM32 0x20000030 #define GLM_COMPILER_LLVM33 0x20000040 #define GLM_COMPILER_LLVM34 0x20000050 diff --git a/readme.txt b/readme.txt index 0f4a07f6..8b41c70c 100644 --- a/readme.txt +++ b/readme.txt @@ -98,10 +98,10 @@ Deprecation: - Removed degrees for function parameters - Removed GLM_FORCE_RADIANS, active by default - Removed VC 2005 / 8 and 2008 / 9 support -- Removed GCC 3.4 to 4.5 support +- Removed GCC 3.4 to 4.3 support - Removed LLVM GCC support -- Removed LLVM 2.6 to 2.9 support -- Removed CUDA 3.0 to 4.0 support +- Removed LLVM 2.6 to 3.1 support +- Removed CUDA 3.0 to 3.2 support ================================================================================ GLM 0.9.5.4: 2014-06-21 diff --git a/test/core/core_setup_message.cpp b/test/core/core_setup_message.cpp index 1cab01f4..07d5d0b5 100644 --- a/test/core/core_setup_message.cpp +++ b/test/core/core_setup_message.cpp @@ -41,12 +41,6 @@ int test_compiler() { switch(GLM_COMPILER) { - case GLM_COMPILER_GCC42: - std::printf("GLM_COMPILER_GCC42\n"); - break; - case GLM_COMPILER_GCC43: - std::printf("GLM_COMPILER_GCC43\n"); - break; case GLM_COMPILER_GCC44: std::printf("GLM_COMPILER_GCC44\n"); break; @@ -109,12 +103,6 @@ int test_compiler() { switch(GLM_COMPILER) { - case GLM_COMPILER_LLVM30: - std::printf("GLM_COMPILER_LLVM30\n"); - break; - case GLM_COMPILER_LLVM31: - std::printf("GLM_COMPILER_LLVM31\n"); - break; case GLM_COMPILER_LLVM32: std::printf("GLM_COMPILER_LLVM32\n"); break; From 3ad3dbcd9300c7fb18b75833c022b01d1b4bbb25 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Fri, 28 Nov 2014 02:24:05 +0100 Subject: [PATCH 40/64] Added overview post code sample --- glm/detail/dummy.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/glm/detail/dummy.cpp b/glm/detail/dummy.cpp index 5d0392be..8392ede9 100644 --- a/glm/detail/dummy.cpp +++ b/glm/detail/dummy.cpp @@ -189,7 +189,34 @@ glm::vec3 lighting return Color; } */ + + +template class vecType> +T normalizeDotA(vecType const & x, vecType const & y) +{ + return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); +} + +#define GLM_TEMPLATE_GENTYPE typename T, glm::precision P, template class + +template +T normalizeDotB(vecType const & x, vecType const & y) +{ + return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); +} + +template +typename vecType::value_type normalizeDotC(vecType const & a, vecType const & b) +{ + return glm::dot(a, b) * glm::inversesqrt(glm::dot(a, a) * glm::dot(b, b)); +} + int main() { + glm::vec4 v(1); + float a = normalizeDotA(v, v); + float b = normalizeDotB(v, v); + float c = normalizeDotC(v, v); + return 0; } From 49b326b44adabac72e62970e1b0ae443ac9619ec Mon Sep 17 00:00:00 2001 From: Christophe Juniet Date: Thu, 27 Nov 2014 18:04:15 +0100 Subject: [PATCH 41/64] Fix MSVC intrinsics detection MSVC and Clang support BitScanFoward and BitScanReverse only on Windows. --- glm/detail/func_integer.inl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index 45e2033a..4345e8fa 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -104,7 +104,7 @@ namespace detail } }; -# if(GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) +# if(GLM_ARCH != GLM_ARCH_PURE) && ((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_LLVM) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) template struct compute_findLSB { @@ -162,7 +162,7 @@ namespace detail } }; -# if(GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) +# if(GLM_ARCH != GLM_ARCH_PURE) && ((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_LLVM) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) template GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) { From be0c5da488c7738fb304c91d3aca33e43410ecc5 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 00:53:47 +0100 Subject: [PATCH 42/64] size_type and length_type for all types --- glm/detail/type_mat2x2.hpp | 27 +++++++----- glm/detail/type_mat2x2.inl | 78 ++++++++++++++++++++--------------- glm/detail/type_mat2x3.hpp | 29 ++++++++----- glm/detail/type_mat2x3.inl | 76 ++++++++++++++++++++-------------- glm/detail/type_mat2x4.hpp | 29 ++++++++----- glm/detail/type_mat2x4.inl | 76 ++++++++++++++++++++-------------- glm/detail/type_mat3x2.hpp | 29 ++++++++----- glm/detail/type_mat3x2.inl | 76 ++++++++++++++++++++-------------- glm/detail/type_mat3x3.hpp | 29 ++++++++----- glm/detail/type_mat3x3.inl | 76 ++++++++++++++++++++-------------- glm/detail/type_mat3x4.hpp | 29 ++++++++----- glm/detail/type_mat3x4.inl | 76 ++++++++++++++++++++-------------- glm/detail/type_mat4x2.hpp | 29 ++++++++----- glm/detail/type_mat4x2.inl | 76 ++++++++++++++++++++-------------- glm/detail/type_mat4x3.hpp | 29 ++++++++----- glm/detail/type_mat4x3.inl | 76 ++++++++++++++++++++-------------- glm/detail/type_mat4x4.hpp | 31 ++++++++------ glm/detail/type_mat4x4.inl | 76 ++++++++++++++++++++-------------- glm/detail/type_vec1.hpp | 28 +++++++------ glm/detail/type_vec1.inl | 78 ++++++++++++++++++++--------------- glm/detail/type_vec2.hpp | 31 +++++++------- glm/detail/type_vec2.inl | 82 ++++++++++++++++++++++--------------- glm/detail/type_vec3.hpp | 31 +++++++------- glm/detail/type_vec3.inl | 76 ++++++++++++++++++++-------------- glm/detail/type_vec4.hpp | 31 +++++++------- glm/detail/type_vec4.inl | 76 ++++++++++++++++++++-------------- glm/gtc/quaternion.hpp | 29 +++++++------ glm/gtc/quaternion.inl | 70 ++++++++++++++++++------------- glm/gtx/dual_quaternion.hpp | 31 ++++++++------ glm/gtx/dual_quaternion.inl | 79 +++++++++++++++++++++-------------- 30 files changed, 948 insertions(+), 641 deletions(-) diff --git a/glm/detail/type_mat2x2.hpp b/glm/detail/type_mat2x2.hpp index a3877ebd..008a1f0d 100644 --- a/glm/detail/type_mat2x2.hpp +++ b/glm/detail/type_mat2x2.hpp @@ -43,18 +43,11 @@ namespace glm template struct tmat2x2 { - typedef T value_type; - typedef std::size_t size_type; typedef tvec2 col_type; typedef tvec2 row_type; typedef tmat2x2 type; typedef tmat2x2 transpose_type; - -# ifdef GLM_FORCE_SIZE_FUNC - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC + typedef T value_type; template friend tvec2 operator/(tmat2x2 const & m, tvec2 const & v); @@ -117,8 +110,22 @@ namespace glm ////////////////////////////////////// // Accesses - GLM_FUNC_DECL col_type & operator[](length_t i); - GLM_FUNC_DECL col_type const & operator[](length_t i) const; +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; + + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Unary arithmetic operators template GLM_FUNC_DECL tmat2x2 & operator=(tmat2x2 const & m); diff --git a/glm/detail/type_mat2x2.inl b/glm/detail/type_mat2x2.inl index b4700ebc..5d26395c 100644 --- a/glm/detail/type_mat2x2.inl +++ b/glm/detail/type_mat2x2.inl @@ -50,37 +50,6 @@ namespace detail } }//namespace detail -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tmat2x2::size() const - { - return 2; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tmat2x2::length() const - { - return 2; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER typename tmat2x2::col_type & tmat2x2::operator[](length_t i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER typename tmat2x2::col_type const & tmat2x2::operator[](length_t i) const - { - assert(i < this->length()); - return this->value[i]; - } - ////////////////////////////////////////////////////////////// // Constructors @@ -219,8 +188,53 @@ namespace detail this->value[1] = col_type(m[1]); } + ////////////////////////////////////// + // Accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x2::size_type tmat2x2::size() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x2::col_type & tmat2x2::operator[](typename tmat2x2::size_type i) + { + assert(i < this->size()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x2::col_type const & tmat2x2::operator[](typename tmat2x2::size_type i) const + { + assert(i < this->size()); + return this->value[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x2::length_type tmat2x2::length() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x2::col_type & tmat2x2::operator[](typename tmat2x2::length_type i) + { + assert(i < this->length()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x2::col_type const & tmat2x2::operator[](typename tmat2x2::length_type i) const + { + assert(i < this->length()); + return this->value[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////////////////////////////// - // mat2x2 operators + // Unary updatable operators template template diff --git a/glm/detail/type_mat2x3.hpp b/glm/detail/type_mat2x3.hpp index f7e8a49b..6c05bbc4 100644 --- a/glm/detail/type_mat2x3.hpp +++ b/glm/detail/type_mat2x3.hpp @@ -44,18 +44,11 @@ namespace glm template struct tmat2x3 { - typedef T value_type; - typedef std::size_t size_type; typedef tvec3 col_type; typedef tvec2 row_type; typedef tmat2x3 type; typedef tmat3x2 transpose_type; - -# ifdef GLM_FORCE_SIZE_FUNC - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC + typedef T value_type; private: /// @cond DETAIL @@ -110,9 +103,25 @@ namespace glm GLM_FUNC_DECL explicit tmat2x3(tmat4x2 const & x); GLM_FUNC_DECL explicit tmat2x3(tmat4x3 const & x); + ////////////////////////////////////// // Accesses - GLM_FUNC_DECL col_type & operator[](length_t i); - GLM_FUNC_DECL col_type const & operator[](length_t i) const; + +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; + + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Unary arithmetic operators template GLM_FUNC_DECL tmat2x3 & operator= (tmat2x3 const & m); diff --git a/glm/detail/type_mat2x3.inl b/glm/detail/type_mat2x3.inl index cbbbe4b0..20960e1f 100644 --- a/glm/detail/type_mat2x3.inl +++ b/glm/detail/type_mat2x3.inl @@ -32,37 +32,6 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tmat2x3::size() const - { - return 2; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tmat2x3::length() const - { - return 2; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER typename tmat2x3::col_type & tmat2x3::operator[](length_t i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER typename tmat2x3::col_type const & tmat2x3::operator[](length_t i) const - { - assert(i < this->length()); - return this->value[i]; - } - ////////////////////////////////////////////////////////////// // Constructors @@ -203,6 +172,51 @@ namespace glm this->value[1] = m[1]; } + ////////////////////////////////////// + // Accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x3::size_type tmat2x3::size() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x3::col_type & tmat2x3::operator[](typename tmat2x3::size_type i) + { + assert(i < this->size()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x3::col_type const & tmat2x3::operator[](typename tmat2x3::size_type i) const + { + assert(i < this->size()); + return this->value[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x3::length_type tmat2x3::length() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x3::col_type & tmat2x3::operator[](typename tmat2x3::length_type i) + { + assert(i < this->length()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x3::col_type const & tmat2x3::operator[](typename tmat2x3::length_type i) const + { + assert(i < this->length()); + return this->value[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////////////////////////////// // Unary updatable operators diff --git a/glm/detail/type_mat2x4.hpp b/glm/detail/type_mat2x4.hpp index 63b51389..bc26dac9 100644 --- a/glm/detail/type_mat2x4.hpp +++ b/glm/detail/type_mat2x4.hpp @@ -44,18 +44,11 @@ namespace glm template struct tmat2x4 { - typedef T value_type; - typedef std::size_t size_type; typedef tvec4 col_type; typedef tvec2 row_type; typedef tmat2x4 type; typedef tmat4x2 transpose_type; - -# ifdef GLM_FORCE_SIZE_FUNC - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC + typedef T value_type; private: /// @cond DETAIL @@ -111,9 +104,25 @@ namespace glm GLM_FUNC_DECL explicit tmat2x4(tmat4x2 const & x); GLM_FUNC_DECL explicit tmat2x4(tmat4x3 const & x); + ////////////////////////////////////// // Accesses - GLM_FUNC_DECL col_type & operator[](length_t i); - GLM_FUNC_DECL col_type const & operator[](length_t i) const; + +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; + + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Unary arithmetic operators template GLM_FUNC_DECL tmat2x4& operator= (tmat2x4 const & m); diff --git a/glm/detail/type_mat2x4.inl b/glm/detail/type_mat2x4.inl index f68712ee..d7f63785 100644 --- a/glm/detail/type_mat2x4.inl +++ b/glm/detail/type_mat2x4.inl @@ -32,37 +32,6 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tmat2x4::size() const - { - return 2; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tmat2x4::length() const - { - return 2; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER typename tmat2x4::col_type & tmat2x4::operator[](length_t i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER typename tmat2x4::col_type const & tmat2x4::operator[](length_t i) const - { - assert(i < this->length()); - return this->value[i]; - } - ////////////////////////////////////////////////////////////// // Constructors @@ -204,6 +173,51 @@ namespace glm this->value[1] = col_type(m[1], 0); } + ////////////////////////////////////// + // Accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x4::size_type tmat2x4::size() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x4::col_type & tmat2x4::operator[](typename tmat2x4::size_type i) + { + assert(i < this->size()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x4::col_type const & tmat2x4::operator[](typename tmat2x4::size_type i) const + { + assert(i < this->size()); + return this->value[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x4::length_type tmat2x4::length() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x4::col_type & tmat2x4::operator[](typename tmat2x4::length_type i) + { + assert(i < this->length()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat2x4::col_type const & tmat2x4::operator[](typename tmat2x4::length_type i) const + { + assert(i < this->length()); + return this->value[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////////////////////////////// // Unary updatable operators diff --git a/glm/detail/type_mat3x2.hpp b/glm/detail/type_mat3x2.hpp index 2d5efc43..706f91fd 100644 --- a/glm/detail/type_mat3x2.hpp +++ b/glm/detail/type_mat3x2.hpp @@ -44,18 +44,11 @@ namespace glm template struct tmat3x2 { - typedef T value_type; - typedef std::size_t size_type; typedef tvec2 col_type; typedef tvec3 row_type; typedef tmat3x2 type; typedef tmat2x3 transpose_type; - -# ifdef GLM_FORCE_SIZE_FUNC - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC + typedef T value_type; private: /// @cond DETAIL @@ -117,9 +110,25 @@ namespace glm GLM_FUNC_DECL explicit tmat3x2(tmat4x2 const & x); GLM_FUNC_DECL explicit tmat3x2(tmat4x3 const & x); + ////////////////////////////////////// // Accesses - GLM_FUNC_DECL col_type & operator[](length_t i); - GLM_FUNC_DECL col_type const & operator[](length_t i) const; + +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; + + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Unary arithmetic operators template GLM_FUNC_DECL tmat3x2 & operator= (tmat3x2 const & m); diff --git a/glm/detail/type_mat3x2.inl b/glm/detail/type_mat3x2.inl index 777c7589..2c299dea 100644 --- a/glm/detail/type_mat3x2.inl +++ b/glm/detail/type_mat3x2.inl @@ -32,37 +32,6 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tmat3x2::size() const - { - return 3; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tmat3x2::length() const - { - return 3; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER typename tmat3x2::col_type & tmat3x2::operator[](length_t i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER typename tmat3x2::col_type const & tmat3x2::operator[](length_t i) const - { - assert(i < this->length()); - return this->value[i]; - } - ////////////////////////////////////////////////////////////// // Constructors @@ -232,6 +201,51 @@ namespace glm this->value[2] = col_type(m[2]); } + ////////////////////////////////////// + // Accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x2::size_type tmat3x2::size() const + { + return 3; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x2::col_type & tmat3x2::operator[](typename tmat3x2::size_type i) + { + assert(i < this->size()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x2::col_type const & tmat3x2::operator[](typename tmat3x2::size_type i) const + { + assert(i < this->size()); + return this->value[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x2::length_type tmat3x2::length() const + { + return 3; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x2::col_type & tmat3x2::operator[](typename tmat3x2::length_type i) + { + assert(i < this->length()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x2::col_type const & tmat3x2::operator[](typename tmat3x2::length_type i) const + { + assert(i < this->length()); + return this->value[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////////////////////////////// // Unary updatable operators diff --git a/glm/detail/type_mat3x3.hpp b/glm/detail/type_mat3x3.hpp index 03c0ba6b..b11c1344 100644 --- a/glm/detail/type_mat3x3.hpp +++ b/glm/detail/type_mat3x3.hpp @@ -43,18 +43,11 @@ namespace glm template struct tmat3x3 { - typedef T value_type; - typedef std::size_t size_type; typedef tvec3 col_type; typedef tvec3 row_type; typedef tmat3x3 type; typedef tmat3x3 transpose_type; - -# ifdef GLM_FORCE_SIZE_FUNC - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC + typedef T value_type; template friend tvec3 operator/(tmat3x3 const & m, tvec3 const & v); @@ -121,9 +114,25 @@ namespace glm GLM_FUNC_DECL explicit tmat3x3(tmat3x4 const & x); GLM_FUNC_DECL explicit tmat3x3(tmat4x3 const & x); + ////////////////////////////////////// // Accesses - GLM_FUNC_DECL col_type & operator[](length_t i); - GLM_FUNC_DECL col_type const & operator[](length_t i) const; + +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; + + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Unary arithmetic operators template GLM_FUNC_DECL tmat3x3& operator= (tmat3x3 const & m); diff --git a/glm/detail/type_mat3x3.inl b/glm/detail/type_mat3x3.inl index 4115b8f9..b36634a4 100644 --- a/glm/detail/type_mat3x3.inl +++ b/glm/detail/type_mat3x3.inl @@ -56,37 +56,6 @@ namespace detail } }//namespace detail -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tmat3x3::size() const - { - return 3; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tmat3x3::length() const - { - return 3; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER typename tmat3x3::col_type & tmat3x3::operator[](length_t i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER typename tmat3x3::col_type const & tmat3x3::operator[](length_t i) const - { - assert(i < this->length()); - return this->value[i]; - } - ////////////////////////////////////////////////////////////// // Constructors @@ -256,6 +225,51 @@ namespace detail this->value[2] = m[2]; } + ////////////////////////////////////// + // Accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x3::size_type tmat3x3::size() const + { + return 3; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x3::col_type & tmat3x3::operator[](typename tmat3x3::size_type i) + { + assert(i < this->size()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x3::col_type const & tmat3x3::operator[](typename tmat3x3::size_type i) const + { + assert(i < this->size()); + return this->value[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x3::length_type tmat3x3::length() const + { + return 3; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x3::col_type & tmat3x3::operator[](typename tmat3x3::length_type i) + { + assert(i < this->length()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x3::col_type const & tmat3x3::operator[](typename tmat3x3::length_type i) const + { + assert(i < this->length()); + return this->value[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////////////////////////////// // Operators diff --git a/glm/detail/type_mat3x4.hpp b/glm/detail/type_mat3x4.hpp index 48913218..caa4f7f3 100644 --- a/glm/detail/type_mat3x4.hpp +++ b/glm/detail/type_mat3x4.hpp @@ -44,18 +44,11 @@ namespace glm template struct tmat3x4 { - typedef T value_type; - typedef size_t size_type; typedef tvec4 col_type; typedef tvec3 row_type; typedef tmat3x4 type; typedef tmat4x3 transpose_type; - -# ifdef GLM_FORCE_SIZE_FUNC - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC + typedef T value_type; private: /// @cond DETAIL @@ -116,9 +109,25 @@ namespace glm GLM_FUNC_DECL explicit tmat3x4(tmat4x2 const & x); GLM_FUNC_DECL explicit tmat3x4(tmat4x3 const & x); + ////////////////////////////////////// // Accesses - GLM_FUNC_DECL col_type & operator[](length_t i); - GLM_FUNC_DECL col_type const & operator[](length_t i) const; + +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; + + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Unary arithmetic operators template GLM_FUNC_DECL tmat3x4 & operator=(tmat3x4 const & m); diff --git a/glm/detail/type_mat3x4.inl b/glm/detail/type_mat3x4.inl index 46755fa6..37258c36 100644 --- a/glm/detail/type_mat3x4.inl +++ b/glm/detail/type_mat3x4.inl @@ -32,37 +32,6 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tmat3x4::size() const - { - return 3; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tmat3x4::length() const - { - return 3; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER typename tmat3x4::col_type & tmat3x4::operator[](length_t i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER typename tmat3x4::col_type const & tmat3x4::operator[](length_t i) const - { - assert(i < this->length()); - return this->value[i]; - } - ////////////////////////////////////////////////////////////// // Constructors @@ -231,6 +200,51 @@ namespace glm this->value[2] = col_type(m[2], 0); } + ////////////////////////////////////// + // Accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x4::size_type tmat3x4::size() const + { + return 3; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x4::col_type & tmat3x4::operator[](typename tmat3x4::size_type i) + { + assert(i < this->size()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x4::col_type const & tmat3x4::operator[](typename tmat3x4::size_type i) const + { + assert(i < this->size()); + return this->value[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x4::length_type tmat3x4::length() const + { + return 3; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x4::col_type & tmat3x4::operator[](typename tmat3x4::length_type i) + { + assert(i < this->length()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat3x4::col_type const & tmat3x4::operator[](typename tmat3x4::length_type i) const + { + assert(i < this->length()); + return this->value[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////////////////////////////// // Unary updatable operators diff --git a/glm/detail/type_mat4x2.hpp b/glm/detail/type_mat4x2.hpp index d52f0461..d6c11af0 100644 --- a/glm/detail/type_mat4x2.hpp +++ b/glm/detail/type_mat4x2.hpp @@ -44,18 +44,11 @@ namespace glm template struct tmat4x2 { - typedef T value_type; - typedef std::size_t size_type; typedef tvec2 col_type; typedef tvec4 row_type; typedef tmat4x2 type; typedef tmat2x4 transpose_type; - -# ifdef GLM_FORCE_SIZE_FUNC - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC + typedef T value_type; private: /// @cond DETAIL @@ -122,9 +115,25 @@ namespace glm GLM_FUNC_DECL explicit tmat4x2(tmat4x3 const & x); GLM_FUNC_DECL explicit tmat4x2(tmat3x4 const & x); + ////////////////////////////////////// // Accesses - GLM_FUNC_DECL col_type & operator[](length_t i); - GLM_FUNC_DECL col_type const & operator[](length_t i) const; + +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; + + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Unary arithmetic operators template GLM_FUNC_DECL tmat4x2& operator=(tmat4x2 const & m); diff --git a/glm/detail/type_mat4x2.inl b/glm/detail/type_mat4x2.inl index 470b2ed3..7e758222 100644 --- a/glm/detail/type_mat4x2.inl +++ b/glm/detail/type_mat4x2.inl @@ -32,37 +32,6 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tmat4x2::size() const - { - return 4; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tmat4x2::length() const - { - return 4; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER typename tmat4x2::col_type & tmat4x2::operator[](length_t i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER typename tmat4x2::col_type const & tmat4x2::operator[](length_t i) const - { - assert(i < this->length()); - return this->value[i]; - } - ////////////////////////////////////////////////////////////// // Constructors @@ -254,6 +223,51 @@ namespace glm this->value[3] = col_type(0); } + ////////////////////////////////////// + // Accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x2::size_type tmat4x2::size() const + { + return 4; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x2::col_type & tmat4x2::operator[](typename tmat4x2::size_type i) + { + assert(i < this->size()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x2::col_type const & tmat4x2::operator[](typename tmat4x2::size_type i) const + { + assert(i < this->size()); + return this->value[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x2::length_type tmat4x2::length() const + { + return 4; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x2::col_type & tmat4x2::operator[](typename tmat4x2::length_type i) + { + assert(i < this->length()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x2::col_type const & tmat4x2::operator[](typename tmat4x2::length_type i) const + { + assert(i < this->length()); + return this->value[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////////////////////////////// // Unary updatable operators diff --git a/glm/detail/type_mat4x3.hpp b/glm/detail/type_mat4x3.hpp index 31db995a..dbd95fb5 100644 --- a/glm/detail/type_mat4x3.hpp +++ b/glm/detail/type_mat4x3.hpp @@ -44,18 +44,11 @@ namespace glm template struct tmat4x3 { - typedef T value_type; - typedef std::size_t size_type; typedef tvec3 col_type; typedef tvec4 row_type; typedef tmat4x3 type; typedef tmat3x4 transpose_type; - -# ifdef GLM_FORCE_SIZE_FUNC - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC + typedef T value_type; private: // Data @@ -121,9 +114,25 @@ namespace glm GLM_FUNC_DECL explicit tmat4x3(tmat4x2 const & x); GLM_FUNC_DECL explicit tmat4x3(tmat3x4 const & x); + ////////////////////////////////////// // Accesses - GLM_FUNC_DECL col_type & operator[](size_type i); - GLM_FUNC_DECL col_type const & operator[](size_type i) const; + +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; + + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Unary arithmetic operators template GLM_FUNC_DECL tmat4x3 & operator=(tmat4x3 const & m); diff --git a/glm/detail/type_mat4x3.inl b/glm/detail/type_mat4x3.inl index fae25fed..77a69ae5 100644 --- a/glm/detail/type_mat4x3.inl +++ b/glm/detail/type_mat4x3.inl @@ -32,37 +32,6 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tmat4x3::size() const - { - return 4; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tmat4x3::length() const - { - return 4; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER typename tmat4x3::col_type & tmat4x3::operator[](size_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER typename tmat4x3::col_type const & tmat4x3::operator[](size_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - ////////////////////////////////////////////////////////////// // Constructors @@ -254,6 +223,51 @@ namespace glm this->value[3] = col_type(0); } + ////////////////////////////////////// + // Accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x3::size_type tmat4x3::size() const + { + return 4; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x3::col_type & tmat4x3::operator[](typename tmat4x3::size_type i) + { + assert(i < this->size()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x3::col_type const & tmat4x3::operator[](typename tmat4x3::size_type i) const + { + assert(i < this->size()); + return this->value[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x3::length_type tmat4x3::length() const + { + return 4; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x3::col_type & tmat4x3::operator[](typename tmat4x3::length_type i) + { + assert(i < this->length()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x3::col_type const & tmat4x3::operator[](typename tmat4x3::length_type i) const + { + assert(i < this->length()); + return this->value[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////////////////////////////// // Unary updatable operators diff --git a/glm/detail/type_mat4x4.hpp b/glm/detail/type_mat4x4.hpp index 993846e9..bc8cefff 100644 --- a/glm/detail/type_mat4x4.hpp +++ b/glm/detail/type_mat4x4.hpp @@ -43,18 +43,11 @@ namespace glm template struct tmat4x4 { - typedef T value_type; - typedef std::size_t size_type; typedef tvec4 col_type; typedef tvec4 row_type; typedef tmat4x4 type; typedef tmat4x4 transpose_type; - -# ifdef GLM_FORCE_SIZE_FUNC - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC + typedef T value_type; template friend tvec4 operator/(tmat4x4 const & m, tvec4 const & v); @@ -69,7 +62,6 @@ namespace glm public: // Constructors GLM_FUNC_DECL tmat4x4(); - //GLM_FUNC_DECL tmat4x4(tmat4x4 const & m); template GLM_FUNC_DECL tmat4x4(tmat4x4 const & m); @@ -127,11 +119,26 @@ namespace glm GLM_FUNC_DECL explicit tmat4x4(tmat3x4 const & x); GLM_FUNC_DECL explicit tmat4x4(tmat4x3 const & x); + ////////////////////////////////////// // Accesses - GLM_FUNC_DECL col_type & operator[](length_t i); - GLM_FUNC_DECL col_type const & operator[](length_t i) const; - //GLM_FUNC_DECL tmat4x4 & operator=(tmat4x4 const & m); +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; + + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Unary arithmetic operators + template GLM_FUNC_DECL tmat4x4 & operator=(tmat4x4 const & m); template diff --git a/glm/detail/type_mat4x4.inl b/glm/detail/type_mat4x4.inl index 7ae20451..cf37e090 100644 --- a/glm/detail/type_mat4x4.inl +++ b/glm/detail/type_mat4x4.inl @@ -92,37 +92,6 @@ namespace detail } }//namespace detail -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tmat4x4::size() const - { - return 4; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tmat4x4::length() const - { - return 4; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER typename tmat4x4::col_type & tmat4x4::operator[](length_t i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER typename tmat4x4::col_type const & tmat4x4::operator[](length_t i) const - { - assert(i < this->length()); - return this->value[i]; - } - ////////////////////////////////////////////////////////////// // Constructors @@ -340,6 +309,51 @@ namespace detail this->value[3] = col_type(m[3], 1); } + ////////////////////////////////////// + // Accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x4::size_type tmat4x4::size() const + { + return 4; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x4::col_type & tmat4x4::operator[](typename tmat4x4::size_type i) + { + assert(i < this->size()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x4::col_type const & tmat4x4::operator[](typename tmat4x4::size_type i) const + { + assert(i < this->size()); + return this->value[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x4::length_type tmat4x4::length() const + { + return 4; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x4::col_type & tmat4x4::operator[](typename tmat4x4::length_type i) + { + assert(i < this->length()); + return this->value[i]; + } + + template + GLM_FUNC_QUALIFIER typename tmat4x4::col_type const & tmat4x4::operator[](typename tmat4x4::length_type i) const + { + assert(i < this->length()); + return this->value[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////////////////////////////// // Operators diff --git a/glm/detail/type_vec1.hpp b/glm/detail/type_vec1.hpp index 8d8bd05b..0c819ac8 100644 --- a/glm/detail/type_vec1.hpp +++ b/glm/detail/type_vec1.hpp @@ -55,17 +55,6 @@ namespace glm typedef tvec1 bool_type; typedef T value_type; - ////////////////////////////////////// - // Helper - -# ifdef GLM_FORCE_SIZE_FUNC - /// Return the count of components of the vector - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - /// Return the count of components of the vector - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC - ////////////////////////////////////// // Data @@ -99,8 +88,21 @@ namespace glm ////////////////////////////////////// // Accesses - GLM_FUNC_DECL T & operator[](length_t i); - GLM_FUNC_DECL T const & operator[](length_t i) const; +# ifdef GLM_FORCE_SIZE_FUNC + /// Return the count of components of the vector + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_type size() const; + + GLM_FUNC_DECL T & operator[](size_type i); + GLM_FUNC_DECL T const & operator[](size_type i) const; +# else + /// Return the count of components of the vector + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL T & operator[](length_type i); + GLM_FUNC_DECL T const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC ////////////////////////////////////// // Implicit basic constructors diff --git a/glm/detail/type_vec1.inl b/glm/detail/type_vec1.inl index 110edce7..55811739 100644 --- a/glm/detail/type_vec1.inl +++ b/glm/detail/type_vec1.inl @@ -32,43 +32,12 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tvec1::size() const - { - return 1; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tvec1::length() const - { - return 1; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER T & tvec1::operator[](length_t i) - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } - - template - GLM_FUNC_QUALIFIER T const & tvec1::operator[](length_t i) const - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } - ////////////////////////////////////// // Implicit basic constructors template GLM_FUNC_QUALIFIER tvec1::tvec1() -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifndef GLM_FORCE_NO_CTOR_INIT : x(0) # endif {} @@ -118,6 +87,51 @@ namespace glm : x(static_cast(v.x)) {} + ////////////////////////////////////// + // Component accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec1::size_type tvec1::size() const + { + return 1; + } + + template + GLM_FUNC_QUALIFIER T & tvec1::operator[](typename tvec1::size_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tvec1::operator[](typename tvec1::size_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec1::length_type tvec1::length() const + { + return 1; + } + + template + GLM_FUNC_QUALIFIER T & tvec1::operator[](typename tvec1::length_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tvec1::operator[](typename tvec1::length_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////// // Unary arithmetic operators diff --git a/glm/detail/type_vec2.hpp b/glm/detail/type_vec2.hpp index dc4de565..8ad6f946 100644 --- a/glm/detail/type_vec2.hpp +++ b/glm/detail/type_vec2.hpp @@ -54,18 +54,6 @@ namespace glm typedef tvec2 type; typedef tvec2 bool_type; typedef T value_type; - typedef int size_type; - - ////////////////////////////////////// - // Helper - -# ifdef GLM_FORCE_SIZE_FUNC - /// Return the count of components of the vector - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - /// Return the count of components of the vector - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC ////////////////////////////////////// // Data @@ -99,10 +87,23 @@ namespace glm # endif ////////////////////////////////////// - // Accesses + // Component accesses - GLM_FUNC_DECL T & operator[](length_t i); - GLM_FUNC_DECL T const & operator[](length_t i) const; +# ifdef GLM_FORCE_SIZE_FUNC + /// Return the count of components of the vector + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_type size() const; + + GLM_FUNC_DECL T & operator[](size_type i); + GLM_FUNC_DECL T const & operator[](size_type i) const; +# else + /// Return the count of components of the vector + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL T & operator[](length_type i); + GLM_FUNC_DECL T const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC ////////////////////////////////////// // Implicit basic constructors diff --git a/glm/detail/type_vec2.inl b/glm/detail/type_vec2.inl index b6645260..674f075c 100644 --- a/glm/detail/type_vec2.inl +++ b/glm/detail/type_vec2.inl @@ -32,44 +32,13 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tvec2::size() const - { - return 2; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tvec2::length() const - { - return 2; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER T & tvec2::operator[](length_t i) - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } - - template - GLM_FUNC_QUALIFIER T const & tvec2::operator[](length_t i) const - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } - ////////////////////////////////////// // Implicit basic constructors template GLM_FUNC_QUALIFIER tvec2::tvec2() # ifndef GLM_FORCE_NO_CTOR_INIT - : x(0), y(0) + : x(0), y(0) # endif {} @@ -92,8 +61,8 @@ namespace glm {} template - GLM_FUNC_QUALIFIER tvec2::tvec2(T const & s1, T const & s2) - : x(s1), y(s2) + GLM_FUNC_QUALIFIER tvec2::tvec2(T const & a, T const & b) + : x(a), y(b) {} ////////////////////////////////////// @@ -137,6 +106,51 @@ namespace glm , y(static_cast(v.y)) {} + ////////////////////////////////////// + // Component accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec2::size_type tvec2::size() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER T & tvec2::operator[](typename tvec2::size_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tvec2::operator[](typename tvec2::size_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec2::length_type tvec2::length() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER T & tvec2::operator[](typename tvec2::length_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tvec2::operator[](typename tvec2::length_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////// // Unary arithmetic operators diff --git a/glm/detail/type_vec3.hpp b/glm/detail/type_vec3.hpp index 581eef7f..094a3703 100644 --- a/glm/detail/type_vec3.hpp +++ b/glm/detail/type_vec3.hpp @@ -54,18 +54,6 @@ namespace glm typedef tvec3 type; typedef tvec3 bool_type; typedef T value_type; - typedef int size_type; - - ////////////////////////////////////// - // Helper - -# ifdef GLM_FORCE_SIZE_FUNC - /// Return the count of components of the vector - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - /// Return the count of components of the vector - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC ////////////////////////////////////// // Data @@ -100,10 +88,23 @@ namespace glm # endif//GLM_LANG ////////////////////////////////////// - // Accesses + // Component accesses - GLM_FUNC_DECL T & operator[](length_t i); - GLM_FUNC_DECL T const & operator[](length_t i) const; +# ifdef GLM_FORCE_SIZE_FUNC + /// Return the count of components of the vector + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_type size() const; + + GLM_FUNC_DECL T & operator[](size_type i); + GLM_FUNC_DECL T const & operator[](size_type i) const; +# else + /// Return the count of components of the vector + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL T & operator[](length_type i); + GLM_FUNC_DECL T const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC ////////////////////////////////////// // Implicit basic constructors diff --git a/glm/detail/type_vec3.inl b/glm/detail/type_vec3.inl index 7cc96351..27c1b90d 100644 --- a/glm/detail/type_vec3.inl +++ b/glm/detail/type_vec3.inl @@ -32,37 +32,6 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tvec3::size() const - { - return 3; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tvec3::length() const - { - return 3; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER T & tvec3::operator[](length_t i) - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } - - template - GLM_FUNC_QUALIFIER T const & tvec3::operator[](length_t i) const - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } - ////////////////////////////////////// // Implicit basic constructors @@ -166,6 +135,51 @@ namespace glm z(static_cast(v.z)) {} + ////////////////////////////////////// + // Component accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec3::size_type tvec3::size() const + { + return 3; + } + + template + GLM_FUNC_QUALIFIER T & tvec3::operator[](typename tvec3::size_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tvec3::operator[](typename tvec3::size_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec3::length_type tvec3::length() const + { + return 3; + } + + template + GLM_FUNC_QUALIFIER T & tvec3::operator[](typename tvec3::length_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tvec3::operator[](typename tvec3::length_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////// // Unary arithmetic operators diff --git a/glm/detail/type_vec4.hpp b/glm/detail/type_vec4.hpp index 7ae526c3..b62906a2 100644 --- a/glm/detail/type_vec4.hpp +++ b/glm/detail/type_vec4.hpp @@ -106,18 +106,6 @@ namespace detail typedef tvec4 type; typedef tvec4 bool_type; typedef T value_type; - typedef int size_type; - - ////////////////////////////////////// - // Helper - -# ifdef GLM_FORCE_SIZE_FUNC - /// Return the count of components of the vector - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -# else - /// Return the count of components of the vector - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -# endif//GLM_FORCE_SIZE_FUNC ////////////////////////////////////// // Data @@ -154,10 +142,23 @@ namespace detail # endif//GLM_LANG ////////////////////////////////////// - // Accesses + // Component accesses - GLM_FUNC_DECL T & operator[](length_t i); - GLM_FUNC_DECL T const & operator[](length_t i) const; +# ifdef GLM_FORCE_SIZE_FUNC + /// Return the count of components of the vector + typedef size_t size_type; + GLM_FUNC_DECL GLM_CONSTEXPR size_type size() const; + + GLM_FUNC_DECL T & operator[](size_type i); + GLM_FUNC_DECL T const & operator[](size_type i) const; +# else + /// Return the count of components of the vector + typedef length_t length_type; + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL T & operator[](length_type i); + GLM_FUNC_DECL T const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC ////////////////////////////////////// // Implicit basic constructors diff --git a/glm/detail/type_vec4.inl b/glm/detail/type_vec4.inl index 450fa6f5..f14b9cf2 100644 --- a/glm/detail/type_vec4.inl +++ b/glm/detail/type_vec4.inl @@ -32,37 +32,6 @@ namespace glm { -#ifdef GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tvec4::size() const - { - return 4; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tvec4::length() const - { - return 4; - } -#endif - - ////////////////////////////////////// - // Accesses - - template - GLM_FUNC_QUALIFIER T & tvec4::operator[](length_t i) - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } - - template - GLM_FUNC_QUALIFIER T const & tvec4::operator[](length_t i) const - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } - ////////////////////////////////////// // Implicit basic constructors @@ -268,6 +237,51 @@ namespace glm w(static_cast(v.w)) {} + ////////////////////////////////////// + // Component accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec4::size_type tvec4::size() const + { + return 4; + } + + template + GLM_FUNC_QUALIFIER T & tvec4::operator[](typename tvec4::size_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tvec4::operator[](typename tvec4::size_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec4::length_type tvec4::length() const + { + return 4; + } + + template + GLM_FUNC_QUALIFIER T & tvec4::operator[](typename tvec4::length_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tvec4::operator[](typename tvec4::length_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////// // Unary arithmetic operators diff --git a/glm/gtc/quaternion.hpp b/glm/gtc/quaternion.hpp index a76f4530..15372cd0 100644 --- a/glm/gtc/quaternion.hpp +++ b/glm/gtc/quaternion.hpp @@ -62,25 +62,30 @@ namespace glm template struct tquat { + typedef tquat type; typedef T value_type; - typedef tvec4 bool_type; public: T x, y, z, w; -#if GLM_FORCE_SIZE_FUNC - /// Return the count of components of a quaternion - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -#else - /// Return the count of components of a quaternion - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -#endif//GLM_FORCE_SIZE_FUNC - ////////////////////////////////////// - // Accesses + // Component accesses - GLM_FUNC_DECL T & operator[](length_t i); - GLM_FUNC_DECL T const & operator[](length_t i) const; +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + /// Return the count of components of a quaternion + GLM_FUNC_DECL GLM_CONSTEXPR size_type size() const; + + GLM_FUNC_DECL T & operator[](size_type i); + GLM_FUNC_DECL T const & operator[](size_type i) const; +# else + typedef length_t length_type; + /// Return the count of components of a quaternion + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL T & operator[](length_type i); + GLM_FUNC_DECL T const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC ////////////////////////////////////// // Implicit basic constructors diff --git a/glm/gtc/quaternion.inl b/glm/gtc/quaternion.inl index 31d489a8..d9615ce1 100644 --- a/glm/gtc/quaternion.inl +++ b/glm/gtc/quaternion.inl @@ -49,43 +49,57 @@ namespace detail }; }//namespace detail -#if GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tquat::size() const - { - return 4; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tquat::length() const - { - return 4; - } -#endif - ////////////////////////////////////// - // Accesses + // Component accesses - template - GLM_FUNC_QUALIFIER T & tquat::operator[] (length_t i) - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tquat::size_type tquat::size() const + { + return 4; + } - template - GLM_FUNC_QUALIFIER T const & tquat::operator[] (length_t i) const - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&x)[i]; - } + template + GLM_FUNC_QUALIFIER T & tquat::operator[](typename tquat::size_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tquat::operator[](typename tquat::size_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tquat::length_type tquat::length() const + { + return 4; + } + + template + GLM_FUNC_QUALIFIER T & tquat::operator[](typename tquat::length_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } + + template + GLM_FUNC_QUALIFIER T const & tquat::operator[](typename tquat::length_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&x)[i]; + } +# endif//GLM_FORCE_SIZE_FUNC ////////////////////////////////////// // Implicit basic constructors template GLM_FUNC_QUALIFIER tquat::tquat() -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifndef GLM_FORCE_NO_CTOR_INIT : x(0), y(0), z(0), w(1) # endif {} diff --git a/glm/gtx/dual_quaternion.hpp b/glm/gtx/dual_quaternion.hpp index 4c1bd3d2..333d9681 100644 --- a/glm/gtx/dual_quaternion.hpp +++ b/glm/gtx/dual_quaternion.hpp @@ -67,14 +67,25 @@ namespace glm public: glm::tquat real, dual; -#if GLM_FORCE_SIZE_FUNC - /// Return the count of components of a dual quaternion - GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const; -#else - /// Return the count of components of a dual quaternion - GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const; -#endif//GLM_FORCE_SIZE_FUNC - + ////////////////////////////////////// + // Component accesses + +# ifdef GLM_FORCE_SIZE_FUNC + typedef size_t size_type; + /// Return the count of components of a dual quaternion + GLM_FUNC_DECL GLM_CONSTEXPR size_type size() const; + + GLM_FUNC_DECL part_type & operator[](size_type i); + GLM_FUNC_DECL part_type const & operator[](size_type i) const; +# else + typedef length_t length_type; + /// Return the count of components of a dual quaternion + GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const; + + GLM_FUNC_DECL part_type & operator[](length_type i); + GLM_FUNC_DECL part_type const & operator[](length_type i) const; +# endif//GLM_FORCE_SIZE_FUNC + ////////////////////////////////////// // Implicit basic constructors @@ -104,10 +115,6 @@ namespace glm GLM_FUNC_DECL explicit tdualquat(tmat2x4 const & holder_mat); GLM_FUNC_DECL explicit tdualquat(tmat3x4 const & aug_mat); - // Accesses - GLM_FUNC_DECL part_type & operator[](int i); - GLM_FUNC_DECL part_type const & operator[](int i) const; - // Operators GLM_FUNC_DECL tdualquat & operator*=(T const & s); GLM_FUNC_DECL tdualquat & operator/=(T const & s); diff --git a/glm/gtx/dual_quaternion.inl b/glm/gtx/dual_quaternion.inl index 13312bff..eb1b5970 100644 --- a/glm/gtx/dual_quaternion.inl +++ b/glm/gtx/dual_quaternion.inl @@ -35,19 +35,53 @@ namespace glm { -#if GLM_FORCE_SIZE_FUNC - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR size_t tdualquat::size() const - { - return 2; - } -#else - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t tdualquat::length() const - { - return 2; - } -#endif + ////////////////////////////////////// + // Component accesses + +# ifdef GLM_FORCE_SIZE_FUNC + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tdualquat::size_type tdualquat::size() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER typename tdualquat::part_type & tdualquat::operator[](typename tdualquat::size_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&real)[i]; + } + + template + GLM_FUNC_QUALIFIER typename tdualquat::part_type const & tdualquat::operator[](typename tdualquat::size_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&real)[i]; + } +# else + template + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tdualquat::length_type tdualquat::length() const + { + return 2; + } + + template + GLM_FUNC_QUALIFIER typename tdualquat::part_type & tdualquat::operator[](typename tdualquat::length_type i) + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&real)[i]; + } + + template + GLM_FUNC_QUALIFIER typename tdualquat::part_type const & tdualquat::operator[](typename tdualquat::length_type i) const + { + assert(i >= 0 && static_cast(i) < detail::component_count(*this)); + return (&real)[i]; + } +# endif//GLM_FORCE_SIZE_FUNC + + ////////////////////////////////////// + // Implicit basic constructors template GLM_FUNC_QUALIFIER tdualquat::tdualquat() @@ -113,24 +147,7 @@ namespace glm } ////////////////////////////////////////////////////////////// - // tdualquat accesses - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type & tdualquat::operator[](length_t i) - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&real)[i]; - } - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type const & tdualquat::operator[](length_t i) const - { - assert(i >= 0 && static_cast(i) < detail::component_count(*this)); - return (&real)[i]; - } - - ////////////////////////////////////////////////////////////// - // tdualquat operators + // tdualquat operators template GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator*=(T const & s) From 9b250cc86fe89054347e13cf56d387aa8891d473 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 02:43:06 +0100 Subject: [PATCH 43/64] Fixed arch detection for Intel compiler --- doc/glm.docx | Bin 1069591 -> 1069649 bytes doc/glm.pdf | Bin 1240162 -> 1240743 bytes glm/detail/func_integer.inl | 4 ++-- glm/detail/setup.hpp | 4 ++-- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/glm.docx b/doc/glm.docx index 363dc21be2719b6c798b0244d69b79281276a918..5c76b4143d45ca405c83cb4618ec927c3dd1b44e 100644 GIT binary patch delta 58067 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

    Z$l9mZbX)Z4Q~Ly>>OI&xibSQ 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 diff --git a/doc/glm.pdf b/doc/glm.pdf index 399709e8f9e1ad630436c3d934a53a90984907dc..d9dd1f3bacd3bd1d44348d3de43b3453268d7508 100644 GIT binary patch delta 145076 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 delta 144577 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 ns;zzzI$zf{adz struct compute_findLSB { @@ -162,7 +162,7 @@ namespace detail } }; -# if(GLM_ARCH != GLM_ARCH_PURE) && ((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_LLVM) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) +# if(GLM_ARCH != GLM_ARCH_PURE) && ((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_INTEL)) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) template GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) { diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index e5982bad..5c905e42 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -580,7 +580,7 @@ # define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2) #elif defined(GLM_FORCE_SSE2) # define GLM_ARCH (GLM_ARCH_SSE2) -#elif GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM | GLM_COMPILER_GCC) +#elif (GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM | GLM_COMPILER_GCC)) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_LINUX)) # if(__AVX2__) # define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2) # elif(__AVX__) @@ -592,7 +592,7 @@ # else # define GLM_ARCH GLM_ARCH_PURE # endif -#elif GLM_COMPILER & GLM_COMPILER_VC +#elif (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)) # if defined(__AVX2__) # define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2) # elif defined(__AVX__) From 7e81213fdddf4df6e8617cb26288dda7820698ff Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 18:47:58 +0100 Subject: [PATCH 44/64] Fixed mod function specialization #281 Fixed bitscan detection --- glm/detail/func_common.inl | 16 ++++++--- glm/detail/func_integer.inl | 8 ++--- glm/detail/setup.hpp | 9 +++-- glm/gtc/integer.hpp | 40 +++++++++++++++++++-- glm/gtc/integer.inl | 35 ++++++++++-------- test/core/core_func_common.cpp | 35 ++++++++++++++++++ test/core/core_func_integer.cpp | 55 +++++++++++++++++++++++----- test/gtc/gtc_integer.cpp | 63 +++++++++++++++++++++++++++++++-- 8 files changed, 225 insertions(+), 36 deletions(-) diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index def8b26a..cd04085e 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -162,6 +162,16 @@ namespace detail return (x >> Shift) | y; } }; + + template class vecType, typename genType, bool isFloat = true> + struct compute_mod + { + GLM_FUNC_QUALIFIER static vecType call(vecType const & a, genType const & b) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mod' only accept floating-point inputs. Include for integer inputs."); + return a - b * floor(a / b); + } + }; }//namespace detail // abs @@ -334,15 +344,13 @@ namespace detail template class vecType> GLM_FUNC_QUALIFIER vecType mod(vecType const & x, T y) { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mod' only accept floating-point inputs"); - return x - y * floor(x / y); + return detail::compute_mod::is_iec559>::call(x, y); } template class vecType> GLM_FUNC_QUALIFIER vecType mod(vecType const & x, vecType const & y) { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mod' only accept floating-point inputs"); - return x - y * floor(x / y); + return detail::compute_mod, std::numeric_limits::is_iec559>::call(x, y); } // modf diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index a4f6847e..a57db01a 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -104,7 +104,7 @@ namespace detail } }; -# if(GLM_ARCH != GLM_ARCH_PURE) && ((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_INTEL)) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) +# if GLM_HAS_BITSCAN_WINDOWS template struct compute_findLSB { @@ -126,7 +126,7 @@ namespace detail return IsNotNull ? int(Result) : -1; } }; -# endif//GLM_ARCH != GLM_ARCH_PURE +# endif//GLM_HAS_BITSCAN_WINDOWS template class vecType, bool EXEC = true> struct compute_findMSB_step_vec @@ -162,7 +162,7 @@ namespace detail } }; -# if(GLM_ARCH != GLM_ARCH_PURE) && ((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_INTEL)) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) +# if GLM_HAS_BITSCAN_WINDOWS template GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) { @@ -196,7 +196,7 @@ namespace detail return detail::functor1::call(compute_findMSB_64, x); } }; -# endif//GLM_ARCH != GLM_ARCH_PURE +# endif//GLM_HAS_BITSCAN_WINDOWS }//namespace detail // uaddCarry diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index 5c905e42..8a856260 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -525,14 +525,19 @@ (GLM_LANG & GLM_LANG_CXX11_FLAG) || \ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))) -#define GLM_HAS_TRIVIAL_QUERIES (\ +#define GLM_HAS_TRIVIAL_QUERIES ( \ ((GLM_LANG & GLM_LANG_CXX11_FLAG) && !(GLM_COMPILER & GLM_COMPILER_GCC)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013))) -#define GLM_HAS_MAKE_SIGNED (\ +#define GLM_HAS_MAKE_SIGNED ( \ (GLM_LANG & GLM_LANG_CXX11_FLAG) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013))) +#define GLM_HAS_BITSCAN_WINDOWS ( \ + (GLM_ARCH != GLM_ARCH_PURE) && \ + (GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && \ + (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_LLVM | GLM_COMPILER_INTEL))) + // OpenMP #ifdef _OPENMP # if GLM_COMPILER & GLM_COMPILER_GCC diff --git a/glm/gtc/integer.hpp b/glm/gtc/integer.hpp index b3dda8ab..edcbb9b8 100644 --- a/glm/gtc/integer.hpp +++ b/glm/gtc/integer.hpp @@ -45,6 +45,7 @@ // Dependencies #include "../detail/setup.hpp" #include "../detail/precision.hpp" +#include "../detail/func_common.hpp" #include "../detail/func_integer.hpp" #include "../detail/func_exponential.hpp" #include @@ -58,11 +59,46 @@ namespace glm /// @addtogroup gtc_integer /// @{ - /// Returns the log2 of x. Can be reliably using to compute mipmap count from the texture size. - /// From GLM_GTC_integer extension. + /// Returns the log2 of x for integer values. Can be reliably using to compute mipmap count from the texture size. + /// @see gtc_integer template GLM_FUNC_DECL genIUType log2(genIUType x); + /// Modulus. Returns x % y + /// for each component in x using the floating point value y. + /// + /// @tparam genIUType Integer-point scalar or vector types. + /// + /// @see gtc_integer + /// @see GLSL mod man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genIUType mod(genIUType x, genIUType y); + + /// Modulus. Returns x % y + /// for each component in x using the floating point value y. + /// + /// @tparam T Integer scalar types. + /// @tparam vecType vector types. + /// + /// @see gtc_integer + /// @see GLSL mod man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template class vecType> + GLM_FUNC_DECL vecType mod(vecType const & x, T y); + + /// Modulus. Returns x % y + /// for each component in x using the floating point value y. + /// + /// @tparam T Integer scalar types. + /// @tparam vecType vector types. + /// + /// @see gtc_integer + /// @see GLSL mod man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template class vecType> + GLM_FUNC_DECL vecType mod(vecType const & x, vecType const & y); + /// @} } //namespace glm diff --git a/glm/gtc/integer.inl b/glm/gtc/integer.inl index 9e3c24be..5a23f0b2 100644 --- a/glm/gtc/integer.inl +++ b/glm/gtc/integer.inl @@ -44,24 +44,31 @@ namespace detail } }; -# if(GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) - - template - struct compute_log2 - { - GLM_FUNC_QUALIFIER static tvec4 call(tvec4 const & vec) +# if GLM_HAS_BITSCAN_WINDOWS + template + struct compute_log2 { - tvec4 Result(glm::uninitialize); + GLM_FUNC_QUALIFIER static tvec4 call(tvec4 const & vec) + { + tvec4 Result(glm::uninitialize); - _BitScanReverse(reinterpret_cast(&Result.x), vec.x); - _BitScanReverse(reinterpret_cast(&Result.y), vec.y); - _BitScanReverse(reinterpret_cast(&Result.z), vec.z); - _BitScanReverse(reinterpret_cast(&Result.w), vec.w); + _BitScanReverse(reinterpret_cast(&Result.x), vec.x); + _BitScanReverse(reinterpret_cast(&Result.y), vec.y); + _BitScanReverse(reinterpret_cast(&Result.z), vec.z); + _BitScanReverse(reinterpret_cast(&Result.w), vec.w); - return Result; + return Result; + } + }; +# endif//GLM_HAS_BITSCAN_WINDOWS + + template class vecType, typename genType> + struct compute_mod + { + GLM_FUNC_QUALIFIER static vecType call(vecType const & a, genType const & b) + { + return a % b; } }; - -# endif//GLM_ARCH != GLM_ARCH_PURE }//namespace detail }//namespace glm diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index 349b73fa..5bef95d7 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -162,6 +162,40 @@ namespace modf_ } }//namespace modf +namespace mod_ +{ + int test() + { + int Error(0); + + { + float A(3.0); + float B(2.0f); + float C = glm::mod(A, B); + + Error += glm::abs(C - 1.0f) < 0.00001f ? 0 : 1; + } + + { + glm::vec4 A(3.0); + float B(2.0f); + glm::vec4 C = glm::mod(A, B); + + Error += glm::all(glm::epsilonEqual(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1; + } + + { + glm::vec4 A(3.0); + glm::vec4 B(2.0f); + glm::vec4 C = glm::mod(A, B); + + Error += glm::all(glm::epsilonEqual(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1; + } + + return Error; + } +}//namespace mod_ + namespace floatBitsToInt { int test() @@ -1109,6 +1143,7 @@ int main() Error += sign::test(); Error += floor_::test(); + Error += mod_::test(); Error += modf_::test(); Error += floatBitsToInt::test(); Error += floatBitsToUint::test(); diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index eac947f9..739d3347 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -578,6 +578,7 @@ namespace findMSB genType Return; }; +# if GLM_HAS_BITSCAN_WINDOWS template GLM_FUNC_QUALIFIER int findMSB_intrinsic(genIUType Value) { @@ -590,6 +591,20 @@ namespace findMSB _BitScanReverse(&Result, Value); return int(Result); } +# endif//GLM_HAS_BITSCAN_WINDOWS + +# if GLM_ARCH & GLM_ARCH_AVX + template + GLM_FUNC_QUALIFIER int findMSB_avx(genIUType Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + + if(Value == 0) + return -1; + + return int(_tzcnt_u32(Value)); + } +# endif template GLM_FUNC_QUALIFIER int findMSB_095(genIUType Value) @@ -698,7 +713,7 @@ namespace findMSB }; int Error(0); - std::size_t const Count(1000000); + std::size_t const Count(10000000); std::clock_t Timestamps0 = std::clock(); @@ -738,12 +753,14 @@ namespace findMSB std::clock_t Timestamps4 = std::clock(); - for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) - { - int Result = findMSB_intrinsic(Data[i].Value); - Error += Data[i].Return == Result ? 0 : 1; - } +# if GLM_HAS_BITSCAN_WINDOWS + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result = findMSB_intrinsic(Data[i].Value); + Error += Data[i].Return == Result ? 0 : 1; + } +# endif//GLM_HAS_BITSCAN_WINDOWS std::clock_t Timestamps5 = std::clock(); @@ -756,13 +773,31 @@ namespace findMSB std::clock_t Timestamps6 = std::clock(); +# if GLM_ARCH & GLM_ARCH_AVX + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result = findMSB_avx(Data[i].Value); + Error += Data[i].Return == Result ? 0 : 1; + } +# endif + + std::clock_t Timestamps7 = std::clock(); + std::printf("glm::findMSB: %d clocks\n", static_cast(Timestamps1 - Timestamps0)); std::printf("findMSB - nlz1: %d clocks\n", static_cast(Timestamps2 - Timestamps1)); std::printf("findMSB - nlz2: %d clocks\n", static_cast(Timestamps3 - Timestamps2)); std::printf("findMSB - 0.9.5: %d clocks\n", static_cast(Timestamps4 - Timestamps3)); - std::printf("findMSB - intrinsics: %d clocks\n", static_cast(Timestamps5 - Timestamps4)); + +# if GLM_HAS_BITSCAN_WINDOWS + std::printf("findMSB - intrinsics: %d clocks\n", static_cast(Timestamps5 - Timestamps4)); +# endif//GLM_HAS_BITSCAN_WINDOWS std::printf("findMSB - pop: %d clocks\n", static_cast(Timestamps6 - Timestamps5)); +# if GLM_ARCH & GLM_ARCH_AVX + std::printf("findMSB - avx tzcnt: %d clocks\n", static_cast(Timestamps7 - Timestamps6)); +# endif + return Error; } @@ -888,6 +923,8 @@ namespace findMSB for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { int Result0 = findMSB_intrinsic(Data[i].Value); + //unsigned int A = _lzcnt_u32(Data[i].Value); + //unsigned int B = _tzcnt_u32(Data[i].Value); Error += Data[i].Return == Result0 ? 0 : 1; } @@ -1527,6 +1564,8 @@ int main() Error += ::bitfieldInsert::test(); Error += ::bitfieldExtract::test(); + Error += ::findMSB::perf(); + # ifdef GLM_TEST_ENABLE_PERF Error += ::bitCount::perf(); Error += ::bitfieldReverse::perf(); diff --git a/test/gtc/gtc_integer.cpp b/test/gtc/gtc_integer.cpp index 9fc1aa61..f671c17f 100644 --- a/test/gtc/gtc_integer.cpp +++ b/test/gtc/gtc_integer.cpp @@ -30,6 +30,7 @@ /////////////////////////////////////////////////////////////////////////////////// #define GLM_FORCE_INLINE +#include #include #include #include @@ -102,7 +103,7 @@ namespace log2_ printf("glm::log2: %d clocks\n", End - Begin); } -# if(GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)) +# if GLM_HAS_BITSCAN_WINDOWS { std::vector Result; Result.resize(Count); @@ -163,7 +164,7 @@ namespace log2_ printf("glm::log2 reinterpret: %d clocks\n", End - Begin); } -# endif//GLM_ARCH != GLM_ARCH_PURE +# endif//GLM_HAS_BITSCAN_WINDOWS { std::vector Result; @@ -197,12 +198,70 @@ namespace log2_ } }//namespace log2_ +namespace mod_ +{ + int test() + { + int Error(0); + + { + float A(3.0); + float B(2.0f); + float C = glm::mod(A, B); + + Error += glm::abs(C - 1.0f) < 0.00001f ? 0 : 1; + } + + { + glm::vec4 A(3.0); + float B(2.0f); + glm::vec4 C = glm::mod(A, B); + + Error += glm::all(glm::epsilonEqual(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1; + } + + { + glm::vec4 A(3.0); + glm::vec4 B(2.0f); + glm::vec4 C = glm::mod(A, B); + + Error += glm::all(glm::epsilonEqual(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1; + } + + { + int A(3); + int B(2); + int C = glm::mod(A, B); + + Error += C == 1 ? 0 : 1; + } + + { + glm::ivec4 A(3); + int B(2); + glm::ivec4 C = glm::mod(A, B); + + Error += glm::all(glm::equal(C, glm::ivec4(1))) ? 0 : 1; + } + + { + glm::ivec4 A(3); + glm::ivec4 B(2); + glm::ivec4 C = glm::mod(A, B); + + Error += glm::all(glm::equal(C, glm::ivec4(1))) ? 0 : 1; + } + + return Error; + } +}//namespace mod_ int main() { int Error(0); Error += ::log2_::test(); + Error += ::mod_::test(); # ifdef GLM_TEST_ENABLE_PERF Error += ::log2_::perf(); From cfac6e1b06504c6cfe035835e64da9333aee4f0d Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 19:10:55 +0100 Subject: [PATCH 45/64] Fixed _tzcnt_u32 build, only with Windows --- test/core/core_func_integer.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index 739d3347..93646bd1 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -593,7 +593,7 @@ namespace findMSB } # endif//GLM_HAS_BITSCAN_WINDOWS -# if GLM_ARCH & GLM_ARCH_AVX +# if GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC template GLM_FUNC_QUALIFIER int findMSB_avx(genIUType Value) { @@ -604,7 +604,7 @@ namespace findMSB return int(_tzcnt_u32(Value)); } -# endif +# endif//GLM_ARCH & GLM_ARCH_AVX && GLM_PLATFORM & GLM_PLATFORM_WINDOWS template GLM_FUNC_QUALIFIER int findMSB_095(genIUType Value) @@ -794,9 +794,9 @@ namespace findMSB # endif//GLM_HAS_BITSCAN_WINDOWS std::printf("findMSB - pop: %d clocks\n", static_cast(Timestamps6 - Timestamps5)); -# if GLM_ARCH & GLM_ARCH_AVX +# if GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC std::printf("findMSB - avx tzcnt: %d clocks\n", static_cast(Timestamps7 - Timestamps6)); -# endif +# endif//GLM_ARCH & GLM_ARCH_AVX && GLM_PLATFORM & GLM_PLATFORM_WINDOWS return Error; } From 4ee163ed7928321df8747e0e4933346d395e3766 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 20:09:33 +0100 Subject: [PATCH 46/64] Updated section 3.4 SIMD support --- doc/glm.docx | Bin 1069649 -> 1070640 bytes doc/glm.pdf | Bin 1240743 -> 1242870 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/glm.docx b/doc/glm.docx index 5c76b4143d45ca405c83cb4618ec927c3dd1b44e..a76bbe2a69a2411d74a6ca43d36f2d073b330ae1 100644 GIT binary patch delta 62442 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


    g3@MbDzvs2ToR8!0`&hQfb`DC^j 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 z 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 V|2HidvIGcD3qTGdA^l(ce*yO|P{IHJ diff --git a/doc/glm.pdf b/doc/glm.pdf index d9dd1f3bacd3bd1d44348d3de43b3453268d7508..25ea0c2e8d8ee13da28f948b9fd9296574631953 100644 GIT binary patch delta 201585 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 -`MP*9kXQ;Z3J9sM|rv$8P{U>+Po))78wR zQ8A9<;cpp`1GS6av6a|=OBZZ5qFu>GkUxGsGyEs3b}rBI8xrFaN}+?#?+=BpCXZaG zwRXCYcbQf`#z2DK6lhXN_Z)b)qH1I%PK>7p*ums3ADt~d9<4a~Btx#{Ms{ManE9IV ziAtixK~FB79iM_MV-a@)XCTqCBbQNzAQODv!mIYbCAJRAO7`!wE znL6Ax4Ep1qV4Tq;$$%)x-fqZhw?)37yH{rhE_?q{3p z+z%@?yuY`PE;li4Dt*KSf=njj`rj)3GOAiq);nQRjH?VrgZn69KWu@y-uh%L!^7|oH0%e#WT+j%o>H)6wZ2<`@c_ytAj?WRZOC6E?Ym-5$KyT zFuqRw;?G{W5r_1fMw(hXlB5qiHASLlhj9-UVSNc2@D`A0+OHzV4?KB{-Fd zVv9)1nkB1*VoS9QotW*pDvxiwL%PgkKjC zU!G1!2fR5!QhvgYKCUk¥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%0D}CFP31@|Lkd0FJWn8>A;kpsBtuHMbanvF?Up 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
    NA);=xZU^REg~MGy!Q|I5jik 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î%ntL+ zc9`EY%d@+|XP0!`yvWi|1+S=k>{Y}@>h@iHV3FokN(rLJg|*ju0uLBGeidbzKEJxw>S+n^E{vS$$O z8n83mKLK_@NB@w1vmmWRc~CNDhA+9mke5~=>L)k*k2hmEO0Xs@RTz$d≪g$70pW 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%0Dmv^vdBt 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 F{{dW8P__U7 delta 199777 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 V`B3J6QzU@&iVW`V!4!|G{U4@x*v9|> From a6b31d8fa1b4bfeece3b70776c2ad96245a17239 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 20:21:13 +0100 Subject: [PATCH 47/64] Fixed test build --- doc/glm.docx | Bin 1070640 -> 1070701 bytes test/core/core_func_integer.cpp | 16 ++++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/glm.docx b/doc/glm.docx index a76bbe2a69a2411d74a6ca43d36f2d073b330ae1..28b9636262052c085206cdaea788a9b07eef6a80 100644 GIT binary patch delta 47308 zcmV)GK)%1QtU>LpL9iYW3dIv>7?aol0P>=fC=e|Zlb+!<(`aX=$97hA0}T{tin3Uf zXb>KMnaolosw|0@h!f}X#fcLqBL4N?zD_61qaPIsviZa8!&QRu%tdG?c&f4lha|LtF&&WDjVpZa0SKoMbb{xtL6o{ZCUc7Ar2cw>L+ zCWC3<#ZeNC(t#IE&!W*N@cgr1t`w%n#w_ zD2k_U3P0nAv#A?@na|!p=`%MC?t@8?K1128Toe<%J(iCj%>XpWtIzU>ov( zhuKThNk;kR5;?YoM6ig(8*NCa)>%+8b%StO@rzhfVlF4`RsdfwVD_+|aNfnye6}nt z*srw9@XMkswCo+q%7t8RTCyK8w_|q(7C80JFCW4vcJC)Z5r~Wdt~03CCl`P?_pbNl z0hkaDnWu9vnnYl$4*7R-M(#($XZ)Oh!E56A%#Gd4;oB2Iv^m4k0Lbua>VHk~s*?YM ztLK1z!<)A!ENeS5E7^-nmOpamlXUgYHD2OOj+gVAt2Ii3%Cefwc2}dqIihAb9o8tZ ztixNj&}AECR+L4pyBax3kz|3Fy3`z56E#`xu0~c9I9-*^4%^6avTZsYa#c}(R7;ZV z{Sd(9WyL@PTh=HFtPZ7;3a?}Q_|=2^kM88{i3dHoA0stqi@VvM?0Xnp$5AvQ)K1*+ zp?Gf;zj1D`7T--$Jqg_6QdUy_cHZT}*V%axPJ+;9hC!0v0aYjDo3Z$IwfKe&JRxX$ z?uOntiU~UMCNBtrk>Bu#0b!1R3dnN{=2qH^( z4o{6nzL(nBvlCJoa_)qQ$=`eYn>`7x<8{mgP!A6P61r1B`(Wxm_&h(DfwPc3<$Zj7 z7rV1@;5jioavj5E_xvHdl=nRD3mg>U7LrSsT-htlBN`D{TJ zeA~OU@bNnEP~7+fc#(6AUBj^ADSU^S#s0{TZ-__w=->EB@VlS0A8VF zXco`%%jZf2Tbispi`KoohfXhk$^s$`JJ1Gl3tixB*3?z2=0tHCXQ`~cu;LfBNtbkG zac7@432dbyC6io##hWTwHj1PL3#E&1LqhdCdY1on?NZIQbAEQU?RN_r9 z>aIgY`#jAmn> zxd}Wkh}uA>XbFboykL~Gt=rTzMR#z7_~LG}(vi6HG-~dD&&JO)KL%&v3ph*YmBp7s zLiiY&5u*!3YOJVtjqJ5O;cfan@e2~(7Zo-1b9M5N@eh;fzdyW50BX^2ME*bVp(MT2F=^z?^*{oH)jzz+Vid7A+=4^_VWXrPN z-w|Xz{I`S|D~^I8bL+>!2Lr3y%jh1TNoY|Zj7+21a~wR3Q|ABuUj{@d{qrCH zi)T4}W?cY6k`+gHUYV|H{NkJNra8EBT94*5405%Mu#QN6I-eI8FiT+K*LnHwO^xIk zc4Bsaj0C1YJ-j#bCzIRMjnk~a-jIF=L-ba}+u^WZq^}9hnXymupDK+yYY}tc3`a6` z@!+o7`UznHDzs#6ze(=~Sj=lAvcNz0OHt0Cdo1|4juDbz^SUYVEy!XymLmbQ6|$;# z2w6a>C==Idk8z0RXu2)65mM*0$%1YRnpx|A`XpJ93|n2wu2fyKI7@d3ZMH1hYKC|@ zZL>;j?i%VReRif}J9UAjc9*-VAG{w)U&Xw^Q1_<3$}(a2RTQwLPbpWn#(MWg(n^E& z2DcUz7kI<`u)W*jh@EZ<&hjQNSxY_6sK_sphjS_J6`Xx~dK$C}&Ti)JkM%d3;(MZh zBwDi3CT`H!^!0{Pef-ddvc|#{fivt@6Ph)`x3y+pvu|hM*M2+=5;CV4B+S^4{rhJI z%7E4nPnl8d`%E-qys;ZU_@_)7F>d(GfHoxXLUfpY(BZM4aHl zu*RZ7<|#l)_9U1FIoXeyA z!(fD;J`wC}4nxvpd`iL}ad1CR;bMXp!4U8*;Q1LqNCL?CO7sC;0Z5KWd&x#Qhofj0OStZ?%qd_K2fa9R|umN^d^%WS}u`Y1~U1rWb95R z%)Ou61TZ!TUrBaYQK4HgN)1piGB;ePfnSiFYn%e`h3U06F2(D zyT37?97g~6H|8&wAFWfy{_FLPeS6D%x_KoDU4FQ}y0oFD%a7*OXY2BR<2%LxYCe9t zW3DbgT;2hxcb^z+Mo!?ReTyW1uy4%w@KZM~uP*QYcKS->IhS`IvHi}c8%AfY^_#m( z^YfK{!(4y9x&Cx(1FI|`_T%M8=LTrEKiD7d2GAC`#@Ii>59ap0eszTncqIz;&mg}W zln`Tny8heE<-7NH%==G&SC$PI4I8+q8&`JL01&HrrC)wHWi0)J{th{L!+ZkTUQ4=I zc_ts`=l3>NguKz=KlASL(?=Af`RU``4g5R>Ip5qZ2>SW*);?wQo6B2N3Fqe1hu0D@ zDnHQiiI4`=e6%y#&@hPNE$jy#!QY>6$yY)qW7+x@Pzc8K@s;R*E0fR$odj8wRM~Db zhhFos59m%8=+sQ2%(ITL5*6k+Q58%cCyLtusGtg(feCv{5=(r`*qYJVmsupv5Hw9t zvAZwNBFVa=>K1T=R8g8ml6XZFaFB=re?j6TO_Ru2W%E3es%mQ!+qGh5G zocUk)HYhR-EkHTki8TufNwrmb9a>bF$U#H@Cu28AH)|XKW^r@NU{hsm7^*X ze?($*Mc0sH^wwx}GEDQ2{H@xwLM1gn2urE?D-#ZGnBetF%6{byFG*J}lV;o(t;pvh z?w8s6`ISn4n2ja>vKys|46(Sfe4FR9Yvq2)58u4QG>lRMvP+eIDZurn_-*cI)s;&-E6D-A*x|4u zlVwL+keR)(cn-ej^{r|yXBxIBS+#ivQLuHxCOOl8OU)HTUXzxZn>kIji)BwCyHir< zs^@a|$$am-7@WzYzKv1U>_(O9YO7ZgkUzq+IveZc!D`hxookWe^- z+L3u6=UM;p%e%;My*wgZJZqCB%h{9UMlDfP6h%(7YhGHTBkAaZ%`F|b-FQ!20BDkX zpX8r^#Z3}Xz*1*X0)7p@SQt}0TgQUJV9LgA=hs&4+X#kh%-eHkb^9(mk&Pks(gbA~ zg#^fUcQLE=jd}9#-v`5?A683u3u8Y> zajn&1--@=W(zX81zOfyqB0|)ub=tHaL9flgCXKDsC8?aMRF+G$ko|>pXmwgczMsv1 zW-j`Rt*H+RZwn5;C-9dVK!JZ3;NOOYB;>IU3l9i<+<3bFH z4x!l1{oJdfn79eWcBuWJe0U{%s;)6T5Uo3d5pUUsrn7C9kL(3T`PivXV3bT@%x1m_ zkzNme$VjXc_yGXA_0#!`!VV`<*x8SN)}3KT>(EXNZW9G5_=@O=SWcoh??OQ8eONibngYs zYJH&(9kcaf%*NwTx(kpJ2F!Kr&$4rspw-cgEWM?O#PdglNZiU+?}s3EcSy1w-sDRPXdZT{KmxW9crf-M2c&JK_cgfoTAfz*ila~sH>D} z0Y_^eqcj)=Ubgd3@|>jpl%f!SOo`QfK_OExEQM^LKvAd%DAZMEwSZ|w=AZt=U{mJq zgU<~8)Nfqiwwq%AA%N(ZQmwg_y*v*=?C!y9+q7+!>`p*|s0TpQRj##wc}2IEA1o%B z&u~LF3P1cYWmoqEek5Lhw?wUe_9KO#Zv{VHrB@3BX}~y9?BPz7@GwoP2HqbN{P6vN zAJaBCRh(D$@>z?3| zVp*J~OE@n>@u&xQ)KzA+Fi-}J6(sKc1o!+H=2K-}gqAlaFcpM<0dAfh{7y59a@iac zJPEykC)wh3S#;(VS zN4QV2u1jrB&7~QRc)80AN3wlO7vO|(?3C=&>f@H|6pwQD9}^y}Z0C3gVt2+PK{iBC zX}S=kC+<;KIo2Y7rZ>L3`tZxUJM)+OARPt%gl^af{HGAqIRt5{V(VlH6osH3Ku}j1 z)*@y%77#?jMs9t#`dwA>kAXo)m0{fv4B~CxGDLyS>GuSKy2`K?F}Jb6Ab*ww6B?&R z_EQAv9D#IMb`1N~149&n+96O^+0`N@H5LdIgsK1F#}t8ogriEU?gs*ihGhtnf%z;H zfqH;IU8PlvnAcb!P?lBni|gUqdx}HCQRP?nBpxK_s$q~L{3s6f0EfEDuNE=Ev4%s` zAzDb`n1HAs`&Y{buh}MD=+PG->MGM(#LUJOAi}&Mnqm!7pg`0$5Q)4jS*%DsqMiUz zS1Hya<}lWOfGCaKFd0QL-2?>WK%uB>D3WAH&@GCa z_|rN5SfZq;d5|1fwn(xQKcG#PUShtq5CoR1c16ro90S+(?GY&d>J*gSyL^=1NJ^^T~|Dk9bU( z(mjD6R?`f@v2aS5!cPz2r@KsPu9PbM=zIGe74yfypJPgo?g{?zf^BjJ>2+Tff9UqE zFF+%*%Vig6Bn_BPGe3NH#o+qYID%K)`(P4(q|X$Uq+?2&=KHdu-f|?4#3QIz^zFSO zsjH-EDc|IkiT&9GY;)=(b4SqFp^vd@Q21eiRHJ!Fj&!A)et>)^M0E{OoF-VdsnUU4 zPax_wld7w9`{A3` zx=O^B2h3l>=qY4^B$@jZih%RS1V#N=izXSeW+)Qoyim8P2X0eWIoL9e?7}ErxIz?u zq@zl{?g#v^oNfq`V^R3&2mExEd@bYf?7GNyWPY2wlVBA1al$0?*({1v3P;jWrDFF3 zj(Aq&E#7{0IHCiymw;1OiP_44arFOxpa>)#Qwp}wk2SG^t@A1;Q-`Q04pCPr*vf!o zejY!Qko72oeKlJNDvQIL|3DMz~}Af*_h$y#Kv zKtZYpAk|flwt}NJEAkPVJ}~h-%phtOM-Q<(rC^l;CPM;IUNrQnlY~N{xYRW+$)+YbicV+N`hiPwSGn5? zp2v7Qj^=p%bTe;7~#Kg5VP1tpXS1*NV*Nn%A^F&qj?JprYz z61f#TqVeakAN!2whJZ_M@`agyJ~O|~{e(u63Sm$@>KuM zEaTBA2!{+Xju}SY9Fw)Pcy~0SK2rswjwxHaF99Y)b_9bSYuy)&>MB25!BZUT1G#w; zK)XVB>Jxiq9wyU2!^n<86Uc=^Q`gWWOA>DiDs`WF0!>|IZ!37N<7GB~4L1V9Df|HM zDg1N|KZ3wZtYD+oQ~2ot{B)JQt>9UXFnYs*TQ=GD6r^M3ry!ZT6UO}0pR(U)Ka0$h z8;9sIP5eiHathCn-ABK;nhXX5id^zBC3*|{?W=XLF`dl`tf80`x%z=z-KBQpDUg_G znM6}R^Ph^n07xXti``^@%-s8)ivzxB#0-PSY>mqOGxNJ2N7U5GsLzasK9ji9*@SKxfSf-jDC);40jw?CylK)?0(#;*b(Q_C;+6qs zG@Z>;pK+Nq4xmX;25@Xj4{t+3P%P>iiv+9&Z$xS|O9tRrx1xtLXUD(Ior8yRo7lUD}aWoUjjs3 zWq4}?=EfiSu^)PW)CWSo9}^Ju<46EmmpF-K=@6_ZK2TSQ+gfpI$qM=7{Kqd1z9-5){K zC<>`Zl`pOK0)<3f)g*}=_ft)XQr zX5?=&OichH=&_5RtIc6WOA|G-&2|B{BeN1ZfGf>^souH9OPtB^vXhy0Z9Ho`tj0@i zRs|oZM%Lyv+Y#He(Xu$pXcSp~hm@Yl0!@dq5<77COftH}i>K zhU8zp0{;?3NLlASkOjG~#qIkQawqbBgI6UhbJAQO|96@&1+t_3AA zRr~k%zB>e=={eE)Gxt&SW$MOXZc{f-;n4u~6wAf^J1e~&C*<;Kq!I5-Kt4BMkbdkB zuYo;A?7LscJL$z`n8wj?-gJ(7L4q9)7X;*gG_JB#7Ho}EMQnPBr6Q{uy5&?ssF9_b z#j`wVU<;O-wqmQwdX`=TQ4g^@8&`Q+<4|5D;X`u|mj_-yxabqPY2YQy5AUu%{Ky1& zau046HZ9$n1oyEUKQkjxWl}p{toIOQMmW4^8+Jy(1(r6;P9s|x&Fo4ybMGepkcmQn z;+WJ*TRKrO5o&xnEN2m8=2;kupZN~NsP>tI!CmuEN{=O_mufTV*rUT0czg(htZ+WP_hb0Ii9edg3-U$? z38NtK*B7$NxeGt_>bpHQD=MddO1dqoHMdSQMN@I4g_?b5ogh)vqHlYO;xC}KemnxT z1xqH#(xQXOH1;qZ%*OttsdBOAAT?k@>z;M9+Eftxex4%cxf8%ouog5hCICE+BOo!e zikyKF7*-6{6~sdZbO|nJ{6-i?Xuh@nGGHzdCIEgPq6qCO90o(M8scq#B+)2+a$_Ix zweG}K8m)rAs22_gxP#aY{7`#gh9f*X#`iLZ8oJuagt(y%Y^;_hVo0tGi3c$N^e-K{(1C;Rgplg_37P}I>-aedJSGXI^GODs zL_6H@c_Sp6DyQ<|rrJt>i%oV>a1V#_U(?Jvi2dK@0jju*1cL8TI`BKdf*V}rHkhh7 zh@M)TBP?=6>=HgprL5sCdP88hPjQe!p9lbe;|5J-5FK#W&J=tj#vMMoVT$sOMtGm& zGG{B9&t_4KKEeGn>3xfXLYHtb169Dj6iOcYGwgLk^dxe)Msx{(Bc{0HWm4IwEfQzS z7}4IXnZY*ADHm}Ojlg#gh%cBo5&caBGdw;%^G>sdCg&}5M9@_c-1u6GrfkU;Yl_R* z36f#ivaF#exvC=-?P;YWS3!~ARj=|(puUt>K2tEk%2gUBjZEJ@)qz$=0}n_}LL zVSA)1?}nS{*Jo&d^BXm*VuY_l+l7g<3w4!QKjLhpX}hpCwlkMOMvu5NM=FL=MaWGR zt!%4*h-M;KjDrX8PFfrHeVj#>_R#W;8NRQgNi6wS*QIx+*%!dS!2&U9gA8>v^+ zg|kLP<|SK@RjW2+XB}3t6%ki8x9PR3SiLtQ@2i$Aay}1#jb>L@KUK46H9P15_XCZRRdwFbTWn#|Izjx^W_Xqp`Xh{uxjG#RBR_WI zHk}WHYAkDCtOb5|*&{ZiAZsY5XRltkVj$W=c%rI_hD2uB z%b^Ox5e3a4>-RScFE^0};c*7XlatTe3vYM(zqrGH8KP(&dl+XJW}yNcl@H73+MY5& z=uPHihA+j?@YD?f!%rEEKTZPA4-tubZv6m(j<&u^WC#$Rq(qYvbU4j=L-3 zhK5v3N!Z*^QZn`W3|IZ(z3Y7;5o3RU;^9G0?n-2}Nj8lWY$aN9W7{&p_Ar_L z`@@?wo_mAPuS#kM?zb{G(UK*@GI0v-MLAeI&6Sp>b8B>$Jb)dO$RvSx6o=$=e@{td zB-Ld#iL5?HTA>l|Y)T@-JA&5V^<-qcm&1?iYCU~DPxbrWNM zjqQvj-uWtHrEQE|gAyF>1h*M#O0=gJw|+XGZDl*j6>MfZukwm)==Gdb&SFK5-I&3* zrK{69QOu7=2XM>9M6G$s&)96hHA!awf!O;t*qSw2(f0?9zu2s-Jb>JWr zKnL53fOVMzdscr2^$*6g*}pujFrp$#gO^Rcj;r~_wRJBHxuNDYf)7F_PlH2$J=;NL z1`J6{YSD%bg{;%Lj8}_fHg_^vX1*1va+Ul_aG$|qsup?H?Da^BWjIW%y*b?O%a56_UI5} zyBS22rQ$A5?lYrJl?jRrt}FM zOI{`d7xpG`e4`Mmk7q)V1n>yg3!!A38;5myr7tz|m!RCr1IX=7D7Y7e`=j7q)t^23 z9*;1%jR<7IE77nCfmbS6gJ0(iHe_=?Y)ygN7Ja|HxXq zv&*EmcRw$zA z@Qqeqef*$SpI6#rtKXBteXV}a>d&Tb%75K^RI;y_w%UEEg7kuatmp%0euy6}G+z`n zQxUY<6f3W5oFMVlDORfa$EEpu`?=pj^S=tY?tg9N?dd$r>qO7XInlPH**e+oglhk> zYX9E;-Z#;HvC#fDUXN@$Hg5~HTv(2iCEL=e*K@quFMO9?4^W+HKYVGS{k$r&f@Rmw z^D{M3(fQhX7^?k$N2UGWqvwDg;7q*Pm5*0)Gi?;<$-DunMHGkz7S z(9FdB-K$rU_4XL^O1)bPB{nJ+zM0s{H{%SRlX$hZkvz*(i<0BC@y)1}QY+otO6!(z z;5upns*YNAY{0WYh+7K~cNfvtGBXrBBvptsM2ywgjw-9BZP$E!Sx^kwQJ0(TP_U$6 z`CWkJwzc6DEWb5a9-O2Dlm0avfBM{>>YWTIml+8ZC@D}9pxmI#hbZ5Rrqh*eFey+T z6qVK`R_y~*mDMbn5SLqsw}3ECV`W))YO6DOO%xTOwnGWWO9s2LOn$8cSbaQO_L^NH zR8U-_xYhx#`Cn&Ih&!6Q6AEtM8MrkUSwXySr#*YOV<(vAWs#FOvj)?wGo>nywHc-< zB2z@}6(T?Q(bP}l=UoAa!g0CY?*oo2xMXmWoDFI_)TZW|Ux?UyFz;d~lgu_8f5`}n z_7v^AKzlqP!_HM&Yez%}*=5#I{^w(*_1nZ3p1jry~9OLmixHyVHRy)=q{ ziT!MsRhk7sk@#H`n$y<4*rI!l%%^YDKaodv;Q5&)auy*a<1GNSGfT{V4Q4IPJvD!@PPw~8LKgstGANon~5W*YJ41Nhl zf#-%P6c~hF?7N9yK6IN&gDDwf}FFD!G1G>bLQ66=~3Tl<4CKe_P` zaKM{@){zbcu>!RP8I-Isl=Oa*f8>PSPb#grbMGhqyEw@C3b%iTTTj4Lw1kZH%hTQ9 z_7$LY@iHrBJJXMXI7x4!Cp>J9!HzQjwY+IYlle3(-7hYXN5bg60qC;$^;7nX%XwNR z9)C&2uMhAEWn{Ff63;K6Egnf1N>VZJax#jcSTfw&j2m}E#VkcM%=~ZxFZ-Jl<>eeB zR4kY_{OaaB^Nc9Qg9XTsXjU*U3?{jg;*S=G(Je0CM`;>OS1!lplk4)U*y?f}$r$@l z@`N|>K{J{Bw7y)DL?#os>o|_;6o-`-&3~z_msDh#1vVWTSxem9He7szssDbM<4!=F z1Y{X%O9Sj)oSiY~&iGm9*P{0j9aZ4uR>xz#RvQ}{k^{-g>9UT~3Tghw<|9L11o_#k zyJK}Omvtc9EER=!L`|}4=V2U7Dul9HYMRO8p{Q+6^XieV-!46}7F^{NiBnWz3xDEK zUEf#N*PULJNrk{|_K{u7d+C}!a;n0MB+gcrl_46es8&-YcRJ?ma0khe+3D56pikIl4Va0R`wOhuQQ)vY>~Klj#1(Bcu`!{_oi_qInk~#gu{A5FX&`Rncu7X1ph29 z&)QwC5!O_}Hfx(H)WIZkpG=7tWPd9Y^zpb)ilA@;TR&%;lT=eTYVjOJXPwenklDDV zcClpF)jPzla}lkz>vbXc8tkh10rq&ziit78&JJ$=GCE1o!UB151>~@T=KE4;@UxU9zr@4*4MW4A2oPXC>gQqflWf_zi-roErkbXV(`VZdwC0d} zE8nBJ9lYS!oGjJ?f&%NXl7ApqH&8oP=XKNh^EJ12IXl)yg;ZS@MXnZ~l6j4_SiY)4 zx-AO&a(uB3mVZ@2wiUKbKiWzE z(+2PM2Zjn8OF_tv@!~~foS$ztky207RE-U81xu8X90qLWkvPxu!;}QU$>rOzJB0Qa zt@??kjXBGTQ**$+5t+Mh)UdhLTM=t*({}~2A6lW8WJ`k7CXZ_;J1)`M&W_8IYzm*F zQ>Vt=uU@}*=Gtrrp2l-4<=?sWEN=2IL1vq_3j?R?l~ zQMO`4&bExw#?0IL z_wUxKTQl=z=^TGBTczFR!CdOh$UoN?04<0-m`D9%3lv}#OMm9sRta;>G_5_puKM_a zhs!Tr0=Rmj+RkMoOaHSCzOuTh+FCu*B3ZH~IGAFv)y~#u*6$2|ohRuHrn_7c{4L-7)hjL_Dp%waJ5iV-7v01Qg109om}oR{6C}}hlT=Rv z_YR@x?a4F|MzJA zGe3s5feJkOKZw$R9i1{F{AJDH~@_UP;Y>G1BdT1o8~i)Ybbs5|JnP}-nfx0!N0=60)wg=Rhmce z@?Zt^n)m%@S-R{>77U`tforJfOW;f-`<|obWsAPqo!iB#)sdgvsaN-U{ z+&tp|$Sl^8MIsd}*)lDMr7zY=B0Wi@BPG&jI4SzJ5@o~XRYfRoE2Nl?s#RJZ?P6Qq z?YV|Y%R;uU+PMg(UC1$TT*S; ztwd|9swi2uyY1(dqLfmzr*g5YW{+&D7Bju~pxSoh)qhYB0av;^pz(ranmR9)(Zid( zC~15dJqPN5MtD-a16oEr0fdB)lP9ejN?4=SCJXn!5i zNS|&xEh?rYE4opwazqnpdLi3Xc->7qe^HS=po#KtH+~l*5G;(mQiZL3w?rNZ!C38U z}DYG7e;Rc ziPdj+g9nN*pnu~c!aSpkg-AYo6U0dvJ>tVIr3q&203fa-Spw;tStLhSwSTQrHM>rP zJ-lA$cVm25E%QUWfJNw<=S5fjkol@GaW>!wpmu6{k!o{n9)T6cy%YUsxbnGm>@SFD z5n=+!T7^Um=AdLB+y%K(%zp%Y+FZF{#RgH1 zbS^F$ozk+=MPe%LzdpRAMrBQ;aXxD!B0=R9JKX|JBzkept$a)smn;4mpC`Fk zOz1cAmycYy!a^{X@E%rMNti_DK&$K0ZfOOmV9mPP&ioE5oH^>qZ$tA$+fXZ|;}l2N zRNb;RbOeL+>Iq*^Uw_-QY@;kR)3j`&eb%*Xy>K?PY1!h8`}7ce`v%>^@ydI6YjtbN zq=`8lVMw$zO>=5i8;YhpDZ&P*83u5oTTDxt!UZ(Nv|Fn6)$xu4cT&`6tF?p1foW}x zmnz13&fhY<5VKRz5##D|%{cDzCd3>Rv-TYrqs0Q$lM#|>9Ri^OyE zxO@Bn<~1H((D@A>$%hXI5l0$*&p4N8RHUW+8TaQO|92o#?y-6XedA|ehal$s&p-a( zG^2le96CP1&;%fS`}#N>253u!xnZ1@#Kc_D)QAo%ug_|^mF#zZb5aBLf$;oI-#mM#Inu$ zc2&5aUm%aH!nY=-z0F_0rhgGB2qskk9zcbEe!>66-$-HAWKrBcn?I72#DmRoQ%sl> zdBc&7j&tmi$d9&)Oe<}$nB+oO^wtM&a*hsJM>!Pv6Z7;p|0}~Sfp>%6#n;UJlFUuQ zoMZAwcz>6FcNHwt2f#I5yNI`N65iG>M@7i8s{mPXjQD2b2A?l|tnG1`gqp26S-mB` z>$pDlyt$>2gn4ee6HF^wW#(;il9(fj8UGPY*2D1eV`l<)Y{oKA$2A01 z1XJY^&$F-bt%L}3_SjeI>`han!yii!8?%SLGGfcum{^D@D>koc{mEeelucg(bMiI# zIvv$8t$~2GWr-5xaD;2X&ar>>tL>`OALb88qxn5;{Dx<(Aw-nZ%hi{@T7OT1fh*m? zAb*M~=(1>5V#9cW=VgH}mv=a{)ddWE@%rvAjIgqZHQDu5>?dHBNN$3dyI!wIypXpH z60GRP+`^CNQE-J7$zVmyAJ-vRIY6hxul^XP;YBgUij^7`gBY}!1$Xs`KSicG<1Rza zU%_Sg;BA*zM37}Ov*%~C>*E!{)BXJEw||Sj{N^j zbPSt;y71?9;|{T{-+FPJnv(FsM?QF8h-ESOMvR~vzYf;$GSd&-PA{kCckuYkD1Yp# z%9vz9Q;@DyLQw=ubzO%q2dz>?O-0AL0@8ptEI3#F+qLX9UcS zos`WjT`B8d{zcdN?A{*VF1t=DFV?O5d5|J423a)?QDo|)c<6KH5>qTeYSnY(f4vK1 zKeeT2=1qzb6dyge{_T|?ZH^>jJAcpYoxmpIy_nSo*kQ;wpOY;Pb3#jUs_|@9s;k@L zUXX>&uoY9%fKeWa8bN+20{=Gty>KYfckus6g`YmMd_mfxZ_bJatec`O+RqGaS)@vX zNH9nMOJ5z|zhmjN zEXjtcDB_WADYjn5ys4Usi4F}rwJrR1Lc89r^#tE0%3}9{v{BYTW<)}wKE5%HL6aoe ztk6nQCcp4+_WV}Oa$Ut5AOvR$q{X}R@cJX59V)0p3998|U1{WnhkKD;hv~2g!*0U+ zOS2?IYQFh68Qyl~il{>kTYqb`d9(D{@0fO%YDR zMcDF#7>4Bvy1Gp)IA(^Cftq4xEW;>$tczh39-fk66k*s6!zj)2=P(Yy*wFV>Yx(4u zqYfdc5Y1Qo3Ma}vQEnsUnv)@JS7#j+?BD;_UuIt)zfHL9zUO}6M1Q=|m{eX>vlP)h zv>SNRL(eslV51{H$De>QRSSM<+Z?^OMmo%;|8*XQ(c;tPpjj4<7`9`@v}IY8GBfWJ z(4aOe!dS~>g!s)e&@hS|J>+CM8^c)Lk(B)>uyciv6_MNR_Vd5*c@d{ORI5|jH#N@o zzix37_sXZ6VoWxzS$`Hx$1%_VLH%e22oZ_4DGr%Zifhf~MQdByVz=hy;dOi@N0anH z*2EpU)X(eDR9T5BkDG^gk7>MCA@7L0Pt$~MNTm*Z>k$%x{`}(~B#J3bM2yA;6dHU6*yq)PHQZk_5bW=33dLG!g5l zyz8=MVU<=pqS)ps(Du~5>yj)ZQ&pfs*)gmN9Z25cZBsQnc+%05&hEVHF0w`Wm{K;< z`7(LeZ9_t`dg!o@r*9Cd*?rq6%czKxS2q~62xjfwi@*knD z1Qv=bTO}VSQ-4o7EA6~`)o{qX`ltWRy$`o_bbP41!(FWt&Pc1~C7gGCO$w^8EH%#y zNFY+%ks&Ob?JMpQQbXWD?lxQm*NlNgWWN9Hi zlWL0fxPO=&5p*izRZSBdee%P4l(mpPonM1^?JY^sziqzf2A6RXt>;;p<5h~;v#c6m z0C}PK!5`zqTP?h3v8jed>in)CPw|Y1J3*2qa>5(;e)P!Qg%5soy$fP56k1|UoEis4`R*E0-m%m~;#7nqE=zqtlsWbBbz78Uv!>ffyzVRW=2+uAK zZ+%kZFrKBNOa-_AKv_O!bHNk?CA>kzsm~jp%^w3u+PSx6i>^F8RdHbMY5-ZgU|U+u zs1!YU-Ju54A{Gweh4@?cW(FzwchM9`K2x$k_Ik5or0n%>*^=4o)d17O!hbvF)9WMUmvb`I@JIVFs-OwT%4!kFsX zx@d@*%y2Xo)&`o^B~j3-rGyR+>}DZey?^4Csd82(JNj%y!7&8O9f11GN^kR``7{z3 zGEj%^<(7|i#eEhY9=Ge8Vc1RRW@(m$KbUVmj!V5^0D5!+LmliqS+8%!;+F3+30}5> z97P>mF!Nx$i#{DebPUZIQWtYCtdG@8$a)|~DI4ucGU>Z4yce0W=?Djx>?V?qMt|+I ziP=E~qCqRjlF`IZcxZwbk3ZiSGns$0T;$_Sx#O6>H9ND!L@z5y`HRy*sS!K;KRNJ0B=qkI^ zIHOkQ-g$%nv+fyNgt-@tWC|2Z<$rOV5hNWV@6)dN`TBLwJkHVm7M}sWs6jXR*N(np z;Gnbn*{xwiWA5)$?|s<|j)9p6*TI|%ub^o>6zKGlO*^4=65c|)H)uP=1*^o5Fs_rd zuyaWI$kAQ(n+8RzG~$5t%lc(?9Y)D|wdRqlF4u4a~z(J2O z3ZZYecz9B=84q*sM+pQ7)SyYiZRagOKQsw~>5vb7_x4?1Tiiu3sFb^$#14}4~b~Ib< zQF+^uZt{*J9GQea7Hv=7+kY+@x+9Zd&SO}W2GUV&11ZzTNj`ONyI|U)B$CSeN2N5g zc-s}-mMy_J@)`#xZ#x-=*tG^ta8$iIO%)|wI`p=m(#)j@yv}RpA(PJsS+d{wE6`_r z$i^z>sa4x1^dzalX42+hWs)yf)XZiK%OZ&eZ)?f`2Sch|TMDnJM1QQ_6Zz431kYD_ z#FOD<^aTa>HkiPc-tC>g801fz+AlC1sdJb`e|u|&f*tHJ;Npadcc;Q-yP}y6nA6QL z2Xa1s{P2;fP=%`-j_DjS7@9pkOO|C#(S=MUemdvDZ$7v3{RJug}kcl9Pwv3K20Chl$zYRXcI#2{Op}%^}I>bX^sf~@6VKqcW zv}B|WSdC|N05@{a2}&3jKh{~oxQlP^`221GJv-E^@TWIN7Ar1{v#VIYU9RasN#Srr z*NeWIHQnxd20M|C&c828LL)a6d*1!1f$HoDK8Bh1hkq-5_Z5{#^R|D9cq=#GAA8`t zD?7TYADa}op&mebv^_5?UPFe}P%XhS-GfSwr^Au9myh&tv?fE*3pyM#)QvkRzI$;e zg(};IB{%~jjZ@%6mv=?T!`m0b+A^YSri|8HglySTj;to;sQSgSYAQ0Cd`8)&!i<1m z;pBUG?Oi86UUrcuufTuIpoIo$Ck=mmTrd4%{Ka4AIT~OIOUF$)knHlthf*=O-e1G$ zEd-3g7q{_bMih8UxI}`Y*E)F{J*Vg46EU| zs_L+IT*w}7B*v_Mk5Q(?D@y$yBCJpf_>i!XY|?E7d>UKiRKRTDhyz>|O#__&9QpX| zxgW>9{bK!q#v&mJ2dfN{qu1G#Boa1^jIyf*)7G?F0WMpRHNzm`GCL&=hSE+XEQCTD zQt2d>W~>x&Ug&?@j*&SJpxjP34)b6qszM>zJYwoD+>FEW9VQ&MhI7+t=3)h*gl7<4 zm^sAm!Z;4D@JEwy8>q>>dH3lZ6!$4(iTjRRM>B!nL~&*@ojwUo#JA*`^nIqekcZO( zN_%Oc{)D67HmhG$sx3iLZPXzurO|Ii0)IL6+EpwK%DR8XQfgz;jn^z><=@ZJUIj(8 zn~N&;2qxQZ!NCXBaFEV#{Y9|8y&HI%O^u6#pdeWFZ3vUT#}drK>xSy;3X8p_LdNNY z6nrGQ)CMRg+U{J~8_ctghO)1hp;s%^+Du4jf#fkSPoMz#$ai5O5spaY~7FrmcYF|35Nw< z!f-HUX%|!u(r|o0+QrWw9qZ!L#fSHwe{$@LUw(i3`SZp5OQz0pitfse#FCW!Jn{AR z;?3KiKfCWf7)Zo^kI5OArz^k`NYqQkfFWF?S(WVzM;->he;j%L*NQYHV~#eaKF6ivg;!uEO0w zRr7x%9|yAT{rM3h>xZdHwJCP_M8G`=_|{7%Uzqc9UR(ad_%c(WGK5qGNdu07aUB0$ z5GPIAa2acwBs-6;Gpv;2$4-le~XpdqE98Wbg+M9b@GC38#d1p3w@GfPIAo4lw%erLFPok zPn&{oYhHk(q~IRJdj36&fF|(>2@X@P&$AKGT9Df7)Aom7%!d9=M=9y;Vct(kWZVxK zjF3GMFCz_4{Uyqtaqwm3FG#t#FMeL?vWnv_7JQODCxq%qPwwD_$ez2m)$qvTb7283e`1iM?w%<^{a`r2@zLokoWCBlq*t zO90ESx!;1-B7BI?xOc&7{q>A{j}d?GbJjBOSIHUo@9%#<fv5U;&un!{P)0ewZ){@_6sk<}NbVVeZe0fU}# zZ!GJKyMP~{D;BcSZAI0c)1Gc8tC0lMACPksSo0_XnrimkEf!LiuQ^G)3X&LFv?z#! ze=?Alig?FTl@obox0}l{{74$t-1`v-aR2rHU&Eieb_V|ugfs4^PaJ-G4t+L z6&?w;&Z5J;gx!siY((>$Ao1tPI`Ut0Up3{7`}D~<d$yb0o56~q6+Iv5zWN$0do zHJ@>pA?L4%tvlI1eU^V2zAGf0{$xW`8vWT(7%aF?eiU5847RnIDmSurf0e6HovC<< ziL|TGm6v;Dmprh2{N#N4WV~@c(a_KYR5f*(SVB6Jmq!9SD9vk92oBuSurcZE*oYQy zxEr6l_2U>zUNPrkQu&hg<5+OvYWWD8bJLe2Ufeye6~s8tWyk9BJW*UnatRsCB{9#-hr*B#5Hk;`KWluv zVqqU_5lmGTrF^#abwIMo%cimS0Kirqh`tlRb@hO`Wu<#{;{6Rv?u&bGl>l0>)SgRX z@t=SEV~ek?PR%{s_^V8TS`cLl@39C=2tGHD!Z_ycGB6pKWiUsNme6esY!j;O#VU6?0FQt10F-52uxxqn)vB5fz%qFp?4UY6 z(?EFdM-eGQU43bHD0|}8lq?aBDM(n>RYw$^N-8Vw2&OAq&>e$iAMDm33nw_mAgh#^ z!U%(G@kwMzDoSHGlJi>M)8=n-pDuo~a~E*sHHu}HS?Oq}go!)xVjc9R_dBI@|u zP2-A4+ldH@lFzFUF`Yv#F#|C)W8Y#XPVLuMe#L~nPJ(6d4Pt!qNkVP@HawQV-(bXx zzO13KP#?tBnsPOc)2x;GUp?q)glCuBl!AZfgX^tH92B$+(nb0t!@yOKxH=@|TYgKZADy zhK38WPWG^cYFxXGX_TI&vsuAJmdU%7b59l}OT-Mg#AbC}HC%`mtg+eh9l~a_OJsk* z-fXsEtF0r<7oyuR@~e$GpiP*U@(|M17F<=BzaY#=qHz7?hD#p8lBcR^?@bnl_vZ5V z&v9_O_}tVt{K-gBfXn@%3s!A7`=-;lXex$onUx~?vMOpePkK!>iW2GknhBpGU-TmU zMl#r$Z;5TI8C6FvzJq0ic>*~s*I|D&hkVElQ{rMD!@h>IyNOULm}zo?0|HQD2SYJnHt$y=`=km#Ixm*Bi?j0Z9pBVz59O(Yv=bO zi059kAc{388}*nXR%`Vxj0IV8Pq6Av8klSk{QS$uKJ{ErIWny4Jn8UVp;?Xl`C`W_ z(@jVX%=H5&3p;2CQI})k1-7=cSg+jgp)iCh|NVd^@dp;zv;!&8Xb+5=b~JK($zFJ*I!J%Fh%@+wc;VZaNWQ5mmJCfsn(bz^weeC}n(As2gS*|4 zWS983m=Kpf%!;^&*MFVow}8$vDoWq%Q{Zwe%Aby-{-NSZ+ajD^7ryU9<;AxRNj6RL zCLP5FMsmg{I?5o@G5_jStKM0Fd^h8R?TA>>b2rn*-_iz_Ac~e$suq7V7_7`3b+^WX zA|$H-FqB}{7Dwwa%%6WvLgHO2d6GANQ%LUt?T|=H55&pi4(lOjoOjGAggDxQ{ftYj_A*Zg+!SToc3O z=0IA6e!RlxW|Bve?Mr}bu%_aD+235cBM{Gt<8_b)cCScl_d!iJJlQ2=gS{#wC4-eJ z3pcy*?(Y26jKWyq3PXyJrMbE$R&{QXH%-SSN%BoP_ue8yNqlNOGE^-wpj||U%Ix3d z+$?MW&Wp-xl*oTjQf44srs{$yre({5y2}#gZG?RpVg)b0;jYtgB*MAk@H%;bx=43^ zM9M_3=Kj!h_{j{@7w_L)yniaD>4t!ilhdUiYd@sZ1+>RBHmG!%Cs1Dk#v`#kFeZ%` z*VO|PZ*yx`iJ9q{anfL$9Tr$gP!!QRIV{L0vIDxTy{>LC@A57(t)tt=JKlo|J{KTq)DW>Mo&@Rf@b$WGzn;2VRiN;0tMbS~P0 zf&{+O%7}m01j}?4lF+q5lWhpRv5iJ9ps9R^ph>h9M^6)privMQ^X}8TR-LUdX2T~k zZ9OIez^#9Kg^&O1^(qY#Zu_)is+zpjrP4i~T`cUuUQ$e1%AjnH*36Q0u9E_^^jBY! zo6b&oE!iVG0IJput>22XtZF*Yb$d7_!%!Yp=I?)NI~9<2@=)Z@(&amyM~aq7avKJ& zTaxAS9np-be5VS6qRZ*xyde2b)E!GTSqjT<5M1Nk@rk>Z&Nbf=@)J zB6u8ZRhoe01;<1zb)k-tbk3o~Bb7iJSo3ulR?oG@5%I>$Y`dMrN^<#nlVgs`Oj9s; zS8;y{%G&3Tna4K^tYPH3K*Yo%PUhh%uBNp2Gt1OLX&tdwWamG7w|D=_-7~cV zZB+G+2&dft9GVtzKTE~iAt0T9_dN^eN1}i2%93*AYoAT&&p-Z?VM;QxO+&RSMm9-s zECV@P_$gEBGJ{a&nOz#ZKmUU=A-K|QEI_tk7<`v4vH!}A(t^(~Z~TbV&4c9dzpcWD z75*b$``|akTY?t)%&#svu%`N=w3)rx-# zbt=m#3O$zB*cec6zEfeLTjCy~22aaOZ^8%vp11}JBm|mjR`3Lm=11Nfd~cLOAbXxV z*tkAVIeX&bDHmv{e0|yp6mo4Z{^EST{QS;&|K{>-b<8%9@jrjWz|Q?R#>Xzytbwfd z5HFyYR1I1E_sXQRr5>~C&w#J>v_^jo9j0bwYFmtyC2`)9-4_j2N~@M(S<@gcw{%)4 z27;z<+lq)V5z|7ZPA|MN^_gfa76A}Bu&K1jO6m`4+Q8&6E1LOw6}190F`#kmN{_UG zj&-+>9R78=gZSR3pK_Gmq~1gV&A|cqC|D)I_2Y?w_8z9yOrJ@U1HV1Qu)lvDFgZ`z zwZ9-cx#_Li$}vX`wmgjWF#is+QC0~Ss;;B3-ra3d%3%~Vn&*5fU!6Zo_fu^A!6mKV z?hx@JyF{R%i5E3v zNw$0T8T&sbgr&5zSt3~!T|s}Q$<%dimx!Jig-_i}Bx|Z;BE(YCeIKhr2ag))bKD3+LMQA3(6E8rp9&Z<#bXcQ&uZU zYlmi&Y)&V{OURMjN+1CEp$#V$C-wsSXs1&;%U4C2=iz)+s-xP9K)Rn6r)lw`!530#3qVq4G{E~d zz>D+A$0x?3rZV?5r;M{6G?-J0Xc{@dh=9qFBloge2hCm%00n8PthUBCdK_NO>$HN% z#%BcK%c&P4$SUjxE8>5z#Loh4b~_^)g_iagz$$(f+^9W(6bGtTz!{bhLPN2K2c;bvf& zT?E(Hegyprm%&x!MS)*)6*aK#CWPF2k6g5d8ionxhhE(NK?Z*ex4kYq3bNCb%7)h; zNH__lb4kCwk_~i3EO{3Ybt@BX*%`ZlXmobQE`S<$VC@2;aR=58Alk`+wF}IRJ+StM zyZpdnWQRj=(R!YAv)W?!TekeNqQf$1Jtr7O_o^X5?MeaU~p6N+XDs_X*c9Wto|s5#?( zh?SE{-FpG~TLK-#s*OG6pgTNYFHsrDD}CVLt^jWW@Lhe{f6~1EoCCltB!%euA#*x(jV+tT7Q zDp&;x=?YDn&sX+I4wJJj<3-Bl(#b}3Ey+>%OuK*D=4lJI?P}$n(2P&rMMx}DNTG~( z|Dcd_lXT4^^9JYOwudb#P(O%Q4OrotH(WrFiy!K>pZdw@t?~F?-BpghXhwIdd%?J8RJS3dNzB!u7r zu(xKw%eL3do(cf(o%P$rLg7Tg50ztELF+Zt$6LE^BF=yv_S=-8Sd@|ct ziL^j+qUazSD;i~zt14cp*}lj{Uy#{ekVHY|S$aTBs^IL_Z2#1)%c?B6h(|0213`bm z&r%iX@|`iOLI+aTWk*t~J~7@j6-}=6Rm`|C1<3LpCf0pO>oSXBlXqlQ#e9ch@%D%p zM#HA9%e<~tGPFcVL6)mm%WRimPtWLGPKav0+N>vIUUXl(eZ4oczU%d&kGT{m3aWvQyUcWSHcDK=xN z=$N9b3Dp*jx{3^gF!_#M)spcwJ)0O&ozPV*LzXLy59x-b+59H6dLjY8pngm#;4|&q zy%@#P1g7?_yE9YE&@Z;xRnjL;T1@sVU5nXl=%S}owRiz_xsOsU205ZGrWJp1Uyv4~ zDz0Peq}to0XGQ^=2hd{11RoVQB1`;{s5>@NrayHLi@~R^2MW54cwPZ^G^rjqa8>9) z@{XnHMqX~}$&t>^^gzVhs-x!(&5s2yYXml|g@K*chai65=J zB)IqUy0}f-03eVgB&b<9#kmJj86>2^|9ZC!+TL??2}${T^8l(^g8P5I5K`fB_g+Ne zAWjNN_AFf?*-%VTSTwPkFOpg{CxwKnkjN%)IEKPfHm`Y0mhYUz>G9&U;o6R7uvq2~ zCr%^Fa%I=8l!tmUq_aD5+Aw&TuNIFxG+x-mX{dXrsU$0}2)m)jVgnNG=S6r{Q0?Q!w$P}EeDyCqXcE@49^L;g?+%K3Kue!UkFH2^HtB6QbBta_2;G4Q&3)IdRxA^$1QUrh-~A&hEK^-4M~*C6)wy4vwzC^aGm(8 zv$TRh=Br#sU@3nBwRqvjK|~_KArOC?{Q$WH@m&yM62xQ&f29@29p3*p=&laaNO%k(;FmW(FumJg6-G{W4em1p zgF`-MzSKgN##74B%&y&FopxE&YaeccBs)tx12wjuBIkeipWj_r7nj6e#EgojmFTEj zk||Fq3{f-7$5fa`C#S59x*1OMKr2% z0ZmBkWeg}_^JJpwZK6R)G%U56Ab7ANACK}3w3di7J-T2}4U+4MraHBl)&TUH9?c`!qBS~r zDBqw+_tg2ZNt0eJ=?Z?XqV&vTjrr6x$=3J^kB}?}**ZzL=%A-w8)R4XwBZ>{5y98d zkM74JujxUKmDMdwD1)GNpg~00a|a9nDYaPkBg}uXgEpmDf9F-Kf%(s<&$jQ;I`qTn z2*!BzigW6E!WsAB--geMZ0UAtIV_3ph#E3W`sCy=uh(E1k2E?rej;Q`A0N{)6CLy+ zzTrFTBD2U%OqvtptZmc3qDyp0cPyUNM>(W4I%(@5T{0bo$+1BdDw-V|JCM3ZB$6nW zZX$oR;-?oaS5Xv~7$SzPTra~amB%o4-0U#F^)8qA8-((;GcDsKn<O_w@i?_aV7RWTI{$qtaGoVP^T(tepF@CM$okUCD2fBvW@S61lM-QD$NcKKUvQx*@ot zGdcZFYO9u!D=4DFl7(`Nq_ewlLd?7rSz!sY+#_DtY}JCMVs*-9$!nmh0ljS1Q>Z&9 zTlG=fss&SZWJRnnGQkpEQ6=7-4tm>fc>kYaAZ2Ou30 zNe0O6wHcM~^v}QD&}7*FnwvVkzlPCUFmJ*L+d9QY6nIOxL`9%_PwJ7%DoGj=w(b{vf-eEKSECvw*z+1}z7r%b~HSt%B$r;2XPG5g7pkgiRd z7Q*r_V|YC|%^1LGu*VT@!SsJF8$9Gne8&07e8zDssTz`?yQW@^?mIA@onMAIH9)$~ zhDOe~2cHX9P_)2@Ooi=JY0|<1dQspTH<;-_^W0$R&$th(xt~9`fCLRcr_0nCI`-%4oYv z>0_@Zg)Es*2w5tFeBKB)J*ZSxG||NJ_Ayf_9dgAnZAY^Ph_n0LUn8i5eFFxoaYh=3 zt;t-FUC}j5F_@}@(pG;Z(|dNZDjSS3IwvYvDyU>E-vLyyI2c8THyqJqNpO1p81t^O zzlZFd0SmNi=gVD6zPnI}@>*_M^WI}7#SYzE#{ioN!UVaYafHXuK&{%Z;MDXMn zdHe*%mH;{}6WhkXiziLLc%(nX87IJhn4+&lL)8?CskrBUG|YdoIOuuM45h#(GU}$7 z;(B5EzE}B|pD@0b!+SIjpC-{jmR{nQ*#n)Z1lLBgJhrPp(QQUIR zj9R`UTwt)hdH5`WwWWhI@gUJPknZX%KHEK7xt03wYGPfxB3(QVZw(`S9SYxs; zV0DmpNK*gNtr~v-&*ofLY*COM<%rI|@+=}hSw}05XIT*miH>clgYA-*EJ_MBP+W(Fi>M&&z9GaBIS{O!hHm7G#gV{7YP@|MfY8FdGK z>Q#IHZc%|HBJeduV}UdEdcB&%9`=@aD}&n#pMg})a9)3Kr#?Wbd#Edy!Nz&`8fH_h z@G!Qn)l_7WCbdQS)Fos{q)Ec|+kzr1=C)o)IcBABC(m^GZ}z^u$8j6k_p2CtfrH68 zlO8@rsn5j#dL{uTn;^-a^T)--LT#(3wQ<|Me)P=j#rf`+q-0y7C7XKr)dZ5BZa*lp zs#x`_VzDAhyj06L{Yr}&MA%O&kjGnxSxxTXURHpv(GXW!e)z-x`?J4uz%qaTKYL%k zLA)A_*D*yVd?;BIYr6{@Z8S zN0}$tssca)AV3xlUfmU8x4L40B}M<0fC7yG1pO;>@;$L2ReR5j$i0;dpYXVih3>|tDA@j z+4{ils$31JBD%Qa0df-X!H@9T$4PMSw-eu53N;D$Wzwf!B>168{@E6#xrS(Hio7SC z`8gk&AQRe1)U4eU;_-jBHFmWPw=Fk7$5g_qI+Cc`9hCpmIbC37f!px@u?r8>Pvtxg z3OvdzXV{CEHydsM6t)8vS(a4CJ(qh8>L-ab+p=8Pq1K{<Z952T!ex^TB+@mMT^@L`BzNhlFe1X8#1Bc>O(O8{GLiwJ6UfP&v{x@E9?JU zg7|4`6%mSn;y9XZtNgT;J|csr5``pL1Bz*NC`j#~ns|i$!XxZw6JTfBgh9!??5ME% zkIZs{paLMu3hK}$?-*jtdRyKpWt-|We}OU9pM3D{d^3OYz0WDWKX<9W_s7!Hl={wL z=T2R)4mO)^v8sV~CGEhK_LpP2*%KI+=^)toLK}`%9FaI8aYWjKNE3gSc#MGLI!Haz zEvOujo+2Ox7?GZ+XT%Yy|E_dw-P>CP?gRf}8Ad~I!rpP2GEgNANE(8j8y*}McH1Cq z{rVJLksW^tqRU?&*C5%94yZxSCwcYwFm>LsH4z!m>eRE5n}=Mu=~$$PJ9k(sMB(OP zj}V#x99`^CBgr9&LlPZ}LlTFi9mBMZp~<4ENT5sVRz7e1gael_aYQ<6MB*_tjz~L( z;W0GkvK~p%6j2egWH{dQa1X6_rGD^go_r>}n&*FDTem6k;Z-xmiSeqL=Ug?TI)6THdkm@TNz2(>`bWeHNt;j7GsUpSuvf z4lvQ8w-ZDH@UN#qoP^OMsU2XFJ!TiFnT=$iNvK&cE|1J9w5~ox;V=HUrCrPDkUcYM zZk2!Ltoe6?4ZKjN$`?hfS5;_=;+_<&XMLBHq$-Z1$-5~ukT&Gm1ec#6TfH;-iGE_rV=QhIx>j3pS6D_npnNjFE>ozZ@HHUozmWECENgb&j_j zZ+XQt$J<^^mqP0tOYe*YdQ`}cw-`mP*FQ=U&IY)Ay*ha@?EDkj#2$WM5U9qf% zOg#U0djYZvY}*Kb5HlqV-2vUu~4{VMKLo5e2l8X#zo~saZFP=*_H~xQm z&xW7a3_|}wym(|=uHw*CKMuGYa617mkDGG9rHgKPWFzU8f;9CwRZ|>$IQ9&(K8`)y z*kkdq2i|}|tUajMs$_^AI;6D)*Inp&L;q+f2Do5o9RfPD!wu%N7Kv|N!l9$=w0Z!eI~gtvbe7=oYpWud(70dIS7dRp~pdjMQ$AXhogZ3KOF z=uwcfflj6xRk{o1V#OO1?1EF< zkPX_Hvh3#Az|^$e(DSUj6&ME4@qfE1G>{VG*>Ak4`Ap+)dzZfIrrP=s%#wfprXVcB z(Cyr2T$F(gi6MIsDL%o8Xttm>bUw6bcbL*X(cXUK=|sEz@(v@~duVdx(E5P0=@gI| zYF7pct#^=shhQ-<{kyH7skOQ!o2mq?&XsK(g`YhN_f1RTDE#zMIL(t|0VLJd6^D3$ z9FRC5aX{jL^i<5kW#2rxyBwG+$^(($0f$a^yC26p>7zH@v( zGkhN;qpriaOdSto%K)kl2ymYvoU<&ItSkR_dwozhTm^K$l<0ic#~p-hMh8?Nz00Q0 zSA*u~spkb6V_Xefd>Xf4eNKzaxe=8YIQ{&W22jTq=F`x`MpS5`#TI!+%&-iYBalR6AG z@kR_M+qzA6hCMUl4G(`>@dSKT;| z`VACi8991U_!Nea8$XsYq`NEsy75)4v93%W}8UF{fUEWQO&iAK*CXLCi|}C~ z1aZ9bN5&#{il`YBD!dfTCo8%}WKcYLep6(xDAm zvk$Y0K!Lf_1%7{;2C)$P;{>ZQA@Ye`91F?R7bd~IAKm$ju^$WJt$+;z;UP$-_?M6G zMhq|@Ar-k6s$ABp=%!`b1(s>eMG#54tnB3?lYxsU9k;m%6}YGcuhiQJBQV-);WfGV zTimz^_c|^0?ljw6h1=DFGQxg7mzwz;Dz2lbfa#Kr#*Ke3Lt?t|mLi$yK}dT(uV3&d z%;$ukh0p%uLl{j2OkgbPf;Wpp!CSu?EClPDZ$`qWP{7~4_ZNvkxJJNk_bedxU;I+Q zhTtl~FGXP-<2UBZVCF|cyjl{85Pnq>k0nAK9Z0(MzQ`{LgiR zV>o629*8VS7OQ=~B}YWM8lWVD# zS`C0Ce2DxpWn1Cbl{X7+13!uznTd=AkSJjkPRD=BSb9H1P-R@dML>~VQP!(Hu`Juw zfwP8tI<|pnUJnu3tcqKdeYhJ$5T7>}*f^EQWeufv5vnkL6T~LdC|qF}z%ShfU$AZs z78nS;3DL2eK}LcbMuPvvBf|eu@FtUhpn^A>Jqk&nq-}eX#?Sw!K%DM%1QXHF8 zi670$Gb>M;;%$yFM|~C|szai;6GSaW?4%@N^hg?nHH}zi+->i<%(&m>Bc&>L>i|Ve zo1smyYy%>P zrSnQFS!$6=fq%@2GnW#em{O53Tjb>$;bV{TRzOW7pjN@Jt1ID0l9f@XH3&`< zwbF$4DbNBH=wb@A$@Nxl8QuIS8?=8B;*ex&S~cEy)NN^|b0ztqj)*}`{X^p;HmCE2 zM=&09rNiBZVY#qpn9=ZVvp%(!4E0YXwqL_K?!T^84Ao{y0A?|wGvbZp`o9_Gu0jQw z3Jp1&a_+U6Tbl*#KL%?j4bg{ zW9E5Yz((HSjr5ofCN0HLEvAa)T4xv=50-Sy-CdLFK#4cmg7$A3!-+8ov9x5CgH5K% z@2u0)`zFzGtTATFwnKF%{y|oD{o;nL(SfY%$aPq5eY-@lYETNYZdkg_(yZr<7ws=z z{rIsSOIoqd)^iBcM1Hc07XN?m|BhLh2szMI(sSXnvh&Kx(ha;I$xuT^2LU*iTe+K; zMI9i;1gA7`80WvO~`?4=uzjADxTaIG0+|6=g&$ERi_iw>sJX=k+&xcdeb;=q{ zzuG>pFWW8r#TE%u55PklR54@SsH-u4A4~r^0`VLoJwjA6iFE z(xM5b*oo=_OEQ#G>ZMxnW{RCCIz;f?o$i)0*L)nhi@%ry6{4Y=t_V)8&4#5}8i#02 zH1?o?DJu?eD`|=>L`w~09g4PIo2`7FhI}^P{hPpG;nTDV2H$gg%zck;@~U@WZO2D$ zx#_Lc(q0mEGnrVQzOR3nf5^>lG#ILV#s=8_>zf`MeO=a#LrjMSNEDYOT+(!qrwAnV zi$)NMCNNl$fdwSR z-ORCN)e4ebOTw!xPfJ0LsX}v;9<+N}hpk#6mUvCtuTnt%T~&W8Y7?#%2%3I!B)G=k zDxa>&(4~bA_0&{lU`UcvvA+rTJJ??8PR#+UHwer)mBsBme6YkIZiAxnEXrfx%8hBBxm^{SM(cIoO#aE-3N zuv%IgAz+RqX~=(Z5(VQ#ScbD;{Fqe;jfA(!rgCB8$HCpgpJenTPb7I_!Nm9QFJ2<} z_kQ#kE_`7Ul0@hv7D%bp+)JjyEVzlh=rOH$ASFuVox)T`0;%1gj|xb=5`NlE6wGFU zw@C27_x_BeE5^bLGU8vC{^HF$!T7=aT6hSf&omG6&c}amMQLTmUF4^^k#p~JT8u#w zuy>Q;!J~JygwmK;fGp5VRYe11NSa}~)qb3^rpt~i zZTf5u#2Cpm*tLG-NV=5eR9{p0A*Esu1oX&qy(E9Z7DG(XXcDq8jp#b6;Z_4h3X~1S z)~Jzka;BlIyTvq0Zo{``8Z;6fAIIQ{7iKMx-2VLViz=}jpA_2oQ9#jUR`~2l5Z=Zu1hDXSMCE7V$k@ChzY!;*z0m=9#qbws2|1tJo zV#Q7s`~p)u$*qU%!Ty)Azr>^CsgmcCe@DWbPgZq(aYE9;CsC=_{c$oQ zLu0*<-=~!Y^bzmLj4E`ZzfQKEPU{@Pdu)G7Y?L}C-wf+<;nw%C^OjXZlmR<^&G_&( z{UxC)9)ATtYaWs*lA?^#P{d>jsPx`?0WI6Ws-Fy)nJ1gU@MCgYVe+SS#aQ7I`W`hVr7`7A6LdHqLZ;g!8MENcZE@L zdOC(mda+g%0>))*jqRjo8aaSEG}E>PECzh~;YK1i8Su43QtH%4KMmn73^D)D@aw4^ zy>)6_SCW$j5*kO#Vjrt~x|_a#Wlzx{hX)*_+CkvavP=#@WQ#YnFfVQkZQ5kHYAVjkc9JY?s#6tV>>>?re(;R4r(^ zX4N)@IuadJuJSz*1j%WM&K3mG`kQRgtsqD#LlAWiX)}#*yeirHZLE%6G*%oDK|?&e z1Jm3SPx}3D_oKmjYiQ$1x0>X6Bq;cI$fpDa9T@Eo8T$L{r`N8&)*& zj0{Xa-o1a{7JPK?o3{0+KVg4kn*mvNv@4R3VcL>esmhXN*OWwxH-|-*@BjKc!J1~Z z$W#ommlAAM3|CYrfHEkb&$Ovmub;_a`#r=Id-vAsIeayBa3?Hb;3NT1;$q#@HUmn zTQ5!+bj*%cVaQbs+pT|+Z+Po<*Qu&YD*D&4`MHPrk2E*Pj;_*hT6*{skj7tWu*XaO zfMII-NMc*~TMtn{Vz7dD=aF_kH3x^q^CaRBNa8C^6r$D4C(j`sgCzc*7;NNC!utaD z?&OYJ~} zF@mIeD^DK~uz37i` z-`lhkQ?$wepFw~4WeLcxLW4TRFglPe%T>?fj9jj7G^UgrjkOSdo%*-LwM|c3D2V

    j!9sz*_b&SbQ%Hc7?d9WHK3ZXj>}_zk#vp&JLEssI#IKLv9u7f2(U&W4 z@S0(i3?Dg8?*2X4K{d zkO@-xT(yyEQSFfwL7}i1qdYm;pyW>aKuJKyvjzb@6CZQQ8(MQ$wr=xho6dfNslz2w zZH#!9Ad9DuQ*ks-e@zygDz1ebfq$}eiq*2&jAfpVYY3_crphCpXJ6x62@&S(v9HwG zo2EvGKb9aiW)FR3#Fnoyu@F;MY+lv+lfnKeo4y3*0|9Hx5+%st2-kp} zWB=+`+f}DO%pZ_O^LyI(4bNIbh$yF*t1o@E{+W$g3Iv1+b*w&Aj@WE&(CJp z$18%T`}xyve;0rG%R8qBO>(#EH~}>p!;HV)1R=m@m@2ZxjDi+@#<=pYLyRJC^_V(0 z;>@nvjt@suB{?ODA^4aecw{65V}nOV4&N3$(nxuY-aQBC7&ZfS;m_;F9b#L*_2M`+ zCE~$Ay*<8N zcAZpStXuc?|n-n7`K6-Bb+bciX z97)7>f1cSpflb7FF{=%*!;o)2CtDomgqGw~zQe{~ps$I@w8k_}T)#3S2MY`u(mQ#BP6 z9U69OTlnpScD-Bc3BFB~#qI-XqpX3gl%nTy~ zHO0@!mt~LQJUq?VH|+5q3@~I^2sqr9YRncny>g3PLzA1+(ybZ zCqvw>&N?dCzyGhl%)UN;n{eBG&;7uOe|V!Ysl2LYDWZ93H}Ir~o@*k(Mn`^*KLKT` z7W~wpTpj#iz?bvn(7jY{!ae%d#kCX5J^DL2Xuqv6jgQ@tb9!VH7!f z$jNjzhOxRMDf>@g=L#PyBDdS^=YQYxB2IUxR;RLWYMkwV-Qpzfl}|Utm~2|Je=L}e zW1s-b2HCh3E$i92+upVy|HdAbMWKSEszEEHF^N0KgNl-T6oc7Qw@vM z`CUPt;u#Tlf+S1igg5T}=#je%AN=Tgy`+_ktC=+M_21Hxn>mD#Nk{4)WtK`>Vh|~; z6hGoGf5mc$mvD>Fe~(jBXXO8V9Yj8dR|}7P<3pMeo?RT?`lQBTJWEBH3UC2{vV6?u zf++?{c!P*jpEo?4KL(Jrb8pEOU3qw_;=tV10J3($wzQa0DSGm{Lk*@yEF8iM@we>F z3{vv%qA8GkreuHY^=8FL+3Vf1C9~J70j7tA|8~sFzYcjhe?1|_Sz5^_o|6q-HW9B| zR)?=@qz!#alQwVhy2{H>)xdTrlQzuQwWVW8O_~U8Pd;JHwJcXq4r%f!u1W*xAXyfX zJ|GDEnVYl)#o!h6Bu(1L#5$_%9NL$1N*H6Ao^`NZr3-% zu$$1$(kuyoFyDL}mwLkh^ymbJI@o!#Uf+tvE#GAlyle$IiaNMp=D~IseL8~Z7@9Mr zF6LfXAFG#;^+1eLHrkV9(sx;SFEVA*5e_cdO(Y$Sf7)jgvx5pmgI16!)7`NhStUF4 zXjhO9xh&eMs>z3>y+K>q1mkli-_Q)aJKWn1EZ&uP!)EGydD_HdHt}q5!vQ80MAt+$ z?euuW%a~1w&7mqdvTG^gp;I1e&<}UA%9>@Uwmo^!Rd%UyMy<}h^9KKC-7~fbb1xXl z6eyO;f8#nMNIFE`r(N^&_3NH_oTK|KJ_CGFgKqM#9eu~ZL1*`~Tf>IN+~23(`?41t z12YeryjFR=rOMGZzl#uROg?y#T_n~Cxj@T6ih9_HSU5(p5e zL6d~r&Rc+fXc7d|As_ng`^}ROmQZ*(tvVo5iY@fXC zCvW>R%UDxvm)EOJ8LM*A5qaAc6Pc=E9$NYamQWDwXtvs;^0p)0MMKc{Rr<-98Y`? zG<$rOEX$gr3zthX8LtkiWuG8yhXdYKV$x$w(Wp8qeqeZseX5lrS!S zth0o17vJ9T`P~9~cBoh3Pj8MaR$LfoSFwJ(T+@M)!r_Rn7kxEry502*b|M{}e_xb@ zMs6tfy!%lD)!7q#3^VT!|5p0$D=LrXZGRK-R&KsO_P}>nc63)iHYspJJ%IFRdtO$& zh77BrT7qS|2bCO8ha+t-AL-#}O@^WubU0?H8+TBA_u@_pRkjUFa0Wygr@)CW?~0Iz zw=agZWklIb8Lhbp*|Mb^SxwAQ^^0ZIRAe;yjIv9G83Dn<$@lQuyH0$(>>^KIfq$7n z3k}jv8vgjWUi!uOi@(luG{6#;j+=5I+2xH7rDATqzlPCU2pEGeZsW;}DDakWi3F2T zABLE+^f5BZ75Odg6Gu`kp7bt&=JP(`6d2g~9H0AS2ITUm8*hO>ZW6~Jgo@;^qr5wF zN^s)nVrgq}vMkG`7g8fZ4zi2e>Ml1~~sY^6}eqKaP9*#rgq_MM4q|Rv9Em zud^vhBy1QNWmgNPt!cFaT(%%g+j7<#ME858HeRNOgL-}=cd!l#R@_R&mg)mbBNuAaU5LXk0#+ZP?LM} z?$bLc?o-AR_Z_*8W&*#7;>=QA2}i$eR==oJTY{q6 zs6$jrqu+`I{&MQIt5_P8b$^Ye)W)P6uUW{-zn`VO3W{hq7gg*LOt#&EgAc0VAf4a( zi(q|wH}Eu@8W#saL9puE5GH+(C76ZR4b{~Z7JE&FjME7z_(*iA4Ny+B-MO$gm}eag zWnV8tuU4qFnUDx$O#hQ!qi37RHm}GAOYxdRizk;Mw2&bt&${rD=YKzV%OH6?BgqFZ&D6~+S1pOo>YHI z;CNOE9M4S}6%EO;9Hv~1!P4lI!l9(tx*-cJfqQ!r4hy`5;b6+rE~p%&;rM{Gi=RI_ z*2Slb5AQ$!%4rJZ?^CLvo4^xwB zQ|$7IfO`<|t(Q!`Fz4mGw)}_jWu`)92&oE^1{?$9IR3jJPMWmgGS)On*7fvDtm{=o zLRp}B_u;opo}nQYql|kOJ~aA3$j?=jjj(H2b78d^T>8F!&HY4-lLb4$LFZ8rBAbx@ z7Av_OO!q1;LFNi zkaBTf{Jhj<6~|pH_#}Hy2-T6E+`$WxJ$G-b;gQAbqJO)0_uU~yfs6M8EH!lWDTXaN zqRdht=Q*IS;OnGfaF`@ON3EnHK~XH0{K4md+EhGgA*z=KV}lq<1&;MQjSTHa?&qbK0G3~KzXhvB_z<6Q?}F9( z>lybRBmUm!tYzS@k~8k#-~WEb`N_N?@pLk5=LBMGQKAm=8q=1~MR)$F-jETk-7bCP%!Br&vTQ4k0JWFRjU@s6b`C-TZ}Hhe+74A=H0C-JQ8f3MTdI{yBj0fh~_sz z;?I+H63HD8NX&{F#}cw#c`3sR2A*SGxy0eFH)KKNZ96fzcMjORgz8n zL{poc%D5SMO;@mv#$p%WqlR{Q6U4bHhW~|iFfeM9&S{xyKI1M!&R-E*cd~u@EPpe6 zS4cSh$%d#j`m>`jSa6^GD7c0hY-=-BZe;ELDp#R8Q}GfLX;+~uFZakUd0_ka$@%oj zc;kGcp`i(=YU(nvgmfk^j|6s5n%ATd9Jr@pW765N5iQ)@+IrX zvEahh@)0)YrY}dlzPk$}5=7ljKYxNG8oJmEeIs%X@6zUq)F`YehdH%}hO84r-`x}@CM( z=I|X?1PQpL`{ASIe71i7UDs%2)*vGtU!V73ir7d5PN0a5uVcjo0DEz?=cK#C*^9dhGKE^sR7rY;D^Q?1D~K(cN;V2cL{OK5>&I)AEzoB>6dQ^th^ zRZw?dRC5Y^K2JGZ5?o7`_fPu+2cV=Wt|7Y}#W4bzvRqk{E9)IHjD9gHF+4A12RW%)eW%4-KL3Mnlf$-jsB2tFB`qJ)D_Qb6z zSt1-$kg%+)jwm{nR94;*Ojop^I|j=>*sVbpPH>7rRw*%s5eC`flgN-%l*Vu*=e544 z&EMocUHoL{F5t>*6w55hLugnKmAA20S`}L?)sO||osX=M)q(DMVg0zv%)BaJNsGUK_vu z-ftUFL8kXxE75J*U4m?hHTYgIK-`^|+{9euFCQU(2JZw64Hsmc>|qPlxON-UC_PJO zvx12%lXolUo-9h1h#7E+&FZ>pxDYK^W3%Nugw1A`$bW#n*=)mBTSu5LM7Lq&R~vIc zn=misA*8De65CcYs*YTI2g?Za z1aere!+&TF`H&l?#Kk^_eGO-K6QNWv)8zhqB>TF@`lmer$BhcY#&x({h7a(qOljyc zp-w>ashaialOr<1KVTsGjGOr%h1{o~@4lxiy|DSBL(X@1lRd9XW^GvDYMpVrV0i)A z0qGi15INy8HL|nPX?j$MXUii;yyM=#E*6Ljt z3$o;%VAY*8FxejX`InD<>bahBWLVdE(&4*8vl{pF#g12|n~)lq+aVRab4aKo^6lab zSivf*g#z2oOD&ljB{?-riz3@nN zkbiCwXYdR0!nZMzd{b2{8JdhV+s$Ze$%*|2ofa z0i9)3l)l-gz~xw!KOIN?L&cT0ML4}KeBX!4i*Fl}Y?|avI*JX9rltH9p{?)5i zy|V!MZpH`O5wW7@Zl;aDr41}W6fLP#Eq`b*SeZHMZjA*+NLB%0D7%`l!1O=qHELuA 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�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 z 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 QB|+jE0CJdbvj3I;FIi_ID*ylh diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index 93646bd1..cf35f6ed 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -773,7 +773,7 @@ namespace findMSB std::clock_t Timestamps6 = std::clock(); -# if GLM_ARCH & GLM_ARCH_AVX +# if GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC for(std::size_t k = 0; k < Count; ++k) for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { @@ -920,13 +920,13 @@ namespace findMSB Error += Data[i].Return == Result0 ? 0 : 1; } - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) - { - int Result0 = findMSB_intrinsic(Data[i].Value); - //unsigned int A = _lzcnt_u32(Data[i].Value); - //unsigned int B = _tzcnt_u32(Data[i].Value); - Error += Data[i].Return == Result0 ? 0 : 1; - } +# if GLM_HAS_BITSCAN_WINDOWS + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + { + int Result0 = findMSB_intrinsic(Data[i].Value); + Error += Data[i].Return == Result0 ? 0 : 1; + } +# endif//GLM_HAS_BITSCAN_WINDOWS for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { From 98fd37bef17db5b7f1cf540b6bd77a028f0411dc Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 20:28:25 +0100 Subject: [PATCH 48/64] Fixed build --- test/core/core_func_integer.cpp | 90 ++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index cf35f6ed..3ca752cf 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -579,31 +579,31 @@ namespace findMSB }; # if GLM_HAS_BITSCAN_WINDOWS - template - GLM_FUNC_QUALIFIER int findMSB_intrinsic(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + template + GLM_FUNC_QUALIFIER int findMSB_intrinsic(genIUType Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - if(Value == 0) - return -1; + if(Value == 0) + return -1; - unsigned long Result(0); - _BitScanReverse(&Result, Value); - return int(Result); - } + unsigned long Result(0); + _BitScanReverse(&Result, Value); + return int(Result); + } # endif//GLM_HAS_BITSCAN_WINDOWS # if GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC - template - GLM_FUNC_QUALIFIER int findMSB_avx(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + template + GLM_FUNC_QUALIFIER int findMSB_avx(genIUType Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - if(Value == 0) - return -1; + if(Value == 0) + return -1; - return int(_tzcnt_u32(Value)); - } + return int(_tzcnt_u32(Value)); + } # endif//GLM_ARCH & GLM_ARCH_AVX && GLM_PLATFORM & GLM_PLATFORM_WINDOWS template @@ -979,18 +979,20 @@ namespace findLSB {0x00000000, -1} }; - template - GLM_FUNC_QUALIFIER int findLSB_intrinsic(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); +# if GLM_HAS_BITSCAN_WINDOWS + template + GLM_FUNC_QUALIFIER int findLSB_intrinsic(genIUType Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - if(Value == 0) - return -1; + if(Value == 0) + return -1; - unsigned long Result(0); - _BitScanForward(&Result, Value); - return int(Result); - } + unsigned long Result(0); + _BitScanForward(&Result, Value); + return int(Result); + } +# endif template GLM_FUNC_QUALIFIER int findLSB_095(genIUType Value) @@ -1039,11 +1041,13 @@ namespace findLSB Error += DataI32[i].Return == Result ? 0 : 1; } - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) - { - int Result = findLSB_intrinsic(DataI32[i].Value); - Error += DataI32[i].Return == Result ? 0 : 1; - } +# if GLM_HAS_BITSCAN_WINDOWS + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_intrinsic(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } +# endif for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) { @@ -1094,12 +1098,14 @@ namespace findLSB std::clock_t Timestamps2 = std::clock(); - for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) - { - int Result = findLSB_intrinsic(DataI32[i].Value); - Error += DataI32[i].Return == Result ? 0 : 1; - } +# if GLM_HAS_BITSCAN_WINDOWS + for(std::size_t k = 0; k < Count; ++k) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + { + int Result = findLSB_intrinsic(DataI32[i].Value); + Error += DataI32[i].Return == Result ? 0 : 1; + } +# endif std::clock_t Timestamps3 = std::clock(); @@ -1123,7 +1129,11 @@ namespace findLSB std::printf("glm::findLSB: %d clocks\n", static_cast(Timestamps1 - Timestamps0)); std::printf("findLSB - 0.9.5: %d clocks\n", static_cast(Timestamps2 - Timestamps1)); - std::printf("findLSB - intrinsics: %d clocks\n", static_cast(Timestamps3 - Timestamps2)); + +# if GLM_HAS_BITSCAN_WINDOWS + std::printf("findLSB - intrinsics: %d clocks\n", static_cast(Timestamps3 - Timestamps2)); +# endif + std::printf("findLSB - ntz2: %d clocks\n", static_cast(Timestamps4 - Timestamps3)); std::printf("findLSB - branchfree: %d clocks\n", static_cast(Timestamps5 - Timestamps4)); From d79b17bcd109f2eee1cae7b85b6d10b4a409ff15 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 20:34:34 +0100 Subject: [PATCH 49/64] Fixed test compiler error in Clang --- test/core/core_func_integer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index 3ca752cf..a34eb219 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -857,7 +857,7 @@ namespace findMSB { type const Data[] = { - {0x00000000, -1}, + //{0x00000000, -1}, // Clang generates an error with this {0x00000001, 0}, {0x00000002, 1}, {0x00000003, 1}, From 0b9b157e2494fcd5fc126ae012e684df7fa69019 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 20:44:21 +0100 Subject: [PATCH 50/64] Fixed test return type --- test/core/core_func_integer.cpp | 74 +++++++++++++++++---------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index a34eb219..47c26bf1 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -571,11 +571,11 @@ namespace bitfieldReverse namespace findMSB { - template + template struct type { genType Value; - genType Return; + retType Return; }; # if GLM_HAS_BITSCAN_WINDOWS @@ -673,7 +673,7 @@ namespace findMSB int perf_int() { - type const Data[] = + type const Data[] = { {0x00000000, -1}, {0x00000001, 0}, @@ -718,7 +718,7 @@ namespace findMSB std::clock_t Timestamps0 = std::clock(); for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { int Result = glm::findMSB(Data[i].Value); Error += Data[i].Return == Result ? 0 : 1; @@ -727,7 +727,7 @@ namespace findMSB std::clock_t Timestamps1 = std::clock(); for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { int Result = findMSB_nlz1(Data[i].Value); Error += Data[i].Return == Result ? 0 : 1; @@ -736,7 +736,7 @@ namespace findMSB std::clock_t Timestamps2 = std::clock(); for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { int Result = findMSB_nlz2(Data[i].Value); Error += Data[i].Return == Result ? 0 : 1; @@ -745,7 +745,7 @@ namespace findMSB std::clock_t Timestamps3 = std::clock(); for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { int Result = findMSB_095(Data[i].Value); Error += Data[i].Return == Result ? 0 : 1; @@ -755,7 +755,7 @@ namespace findMSB # if GLM_HAS_BITSCAN_WINDOWS for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { int Result = findMSB_intrinsic(Data[i].Value); Error += Data[i].Return == Result ? 0 : 1; @@ -765,7 +765,7 @@ namespace findMSB std::clock_t Timestamps5 = std::clock(); for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { int Result = findMSB_pop(Data[i].Value); Error += Data[i].Return == Result ? 0 : 1; @@ -775,7 +775,7 @@ namespace findMSB # if GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { int Result = findMSB_avx(Data[i].Value); Error += Data[i].Return == Result ? 0 : 1; @@ -803,7 +803,7 @@ namespace findMSB int test_ivec4() { - type const Data[] = + type const Data[] = { {glm::ivec4(0x00000000), glm::ivec4(-1)}, {glm::ivec4(0x00000001), glm::ivec4( 0)}, @@ -844,7 +844,7 @@ namespace findMSB int Error(0); - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) { glm::ivec4 Result0 = glm::findMSB(Data[i].Value); Error += glm::all(glm::equal(Data[i].Return, Result0)) ? 0 : 1; @@ -855,9 +855,11 @@ namespace findMSB int test_int() { - type const Data[] = + typedef type entry; + + entry const Data[] = { - //{0x00000000, -1}, // Clang generates an error with this + {0x00000000, -1}, {0x00000001, 0}, {0x00000002, 1}, {0x00000003, 1}, @@ -896,39 +898,39 @@ namespace findMSB int Error(0); - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i) { int Result0 = glm::findMSB(Data[i].Value); Error += Data[i].Return == Result0 ? 0 : 1; } - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i) { int Result0 = findMSB_nlz1(Data[i].Value); Error += Data[i].Return == Result0 ? 0 : 1; } /* - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i) { int Result0 = findMSB_nlz2(Data[i].Value); Error += Data[i].Return == Result0 ? 0 : 1; } */ - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i) { int Result0 = findMSB_095(Data[i].Value); Error += Data[i].Return == Result0 ? 0 : 1; } # if GLM_HAS_BITSCAN_WINDOWS - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i) { int Result0 = findMSB_intrinsic(Data[i].Value); Error += Data[i].Return == Result0 ? 0 : 1; } # endif//GLM_HAS_BITSCAN_WINDOWS - for(std::size_t i = 0; i < sizeof(Data) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i) { int Result0 = findMSB_pop(Data[i].Value); Error += Data[i].Return == Result0 ? 0 : 1; @@ -959,19 +961,21 @@ namespace findMSB namespace findLSB { - template + template struct type { genType Value; - genType Return; + retType Return; }; - type const DataI32[] = + typedef type entry; + + entry const DataI32[] = { {0x00000001, 0}, {0x00000003, 0}, {0x00000002, 1}, - {0x80000000, 31}, + // {0x80000000, 31}, // Clang generates an error with this {0x00010000, 16}, {0xFFFF0000, 16}, {0xFF000000, 24}, @@ -1029,33 +1033,33 @@ namespace findLSB { int Error(0); - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = glm::findLSB(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; } - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = findLSB_095(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; } # if GLM_HAS_BITSCAN_WINDOWS - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = findLSB_intrinsic(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; } # endif - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = findLSB_ntz2(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; } - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = findLSB_branchfree(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; @@ -1081,7 +1085,7 @@ namespace findLSB std::clock_t Timestamps0 = std::clock(); for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = glm::findLSB(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; @@ -1090,7 +1094,7 @@ namespace findLSB std::clock_t Timestamps1 = std::clock(); for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = findLSB_095(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; @@ -1100,7 +1104,7 @@ namespace findLSB # if GLM_HAS_BITSCAN_WINDOWS for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = findLSB_intrinsic(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; @@ -1110,7 +1114,7 @@ namespace findLSB std::clock_t Timestamps3 = std::clock(); for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = findLSB_ntz2(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; @@ -1119,7 +1123,7 @@ namespace findLSB std::clock_t Timestamps4 = std::clock(); for(std::size_t k = 0; k < Count; ++k) - for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(type); ++i) + for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i) { int Result = findLSB_branchfree(DataI32[i].Value); Error += DataI32[i].Return == Result ? 0 : 1; @@ -1574,8 +1578,6 @@ int main() Error += ::bitfieldInsert::test(); Error += ::bitfieldExtract::test(); - Error += ::findMSB::perf(); - # ifdef GLM_TEST_ENABLE_PERF Error += ::bitCount::perf(); Error += ::bitfieldReverse::perf(); From a42f84ed47a88b7b6ba2f646b41c6e15eb5cd4ae Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 20:46:58 +0100 Subject: [PATCH 51/64] Removed GLM_TEST_ENABLE_PERF --- CMakeLists.txt | 5 ----- test/core/core_func_common.cpp | 2 +- test/core/core_func_integer.cpp | 2 +- test/core/core_func_integer_bit_count.cpp | 4 ++-- test/core/core_func_integer_find_lsb.cpp | 4 ++-- test/core/core_func_integer_find_msb.cpp | 4 ++-- test/core/core_func_matrix.cpp | 4 ++-- test/core/core_type_vec4.cpp | 4 ++-- test/gtc/gtc_bitfield.cpp | 4 ++-- test/gtc/gtc_integer.cpp | 4 ++-- test/gtc/gtc_round.cpp | 4 ++-- test/gtx/gtx_fast_trigonometry.cpp | 4 ++-- 12 files changed, 20 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 818af5b2..a03df974 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,11 +13,6 @@ if(NOT GLM_TEST_ENABLE) message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench") endif() -option(GLM_PERF_ENABLE "GLM perf" OFF) -if(GLM_PERF_ENABLE) - add_definitions(-DGLM_TEST_ENABLE_PERF) -endif() - if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND UNIX)) option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF) option(GLM_TEST_ENABLE_CXX_0X "Enable C++ 0x" OFF) diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index 5bef95d7..b5429373 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -1156,7 +1156,7 @@ int main() Error += isnan_::test(); Error += isinf_::test(); -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG Error += sign::perf(); # endif diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index 47c26bf1..39938d6d 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -1578,7 +1578,7 @@ int main() Error += ::bitfieldInsert::test(); Error += ::bitfieldExtract::test(); -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG Error += ::bitCount::perf(); Error += ::bitfieldReverse::perf(); Error += ::findMSB::perf(); diff --git a/test/core/core_func_integer_bit_count.cpp b/test/core/core_func_integer_bit_count.cpp index ea196e12..9fed38dc 100644 --- a/test/core/core_func_integer_bit_count.cpp +++ b/test/core/core_func_integer_bit_count.cpp @@ -207,7 +207,7 @@ void error(int x, int y) int main() { -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG int i, n; static int test[] = {0,0, 1,1, 2,1, 3,2, 4,1, 5,2, 6,2, 7,3, @@ -318,5 +318,5 @@ int main() if (errors == 0) printf("Passed all %d cases.\n", sizeof(test)/8); -# endif//GLM_TEST_ENABLE_PERF +# endif//NDEBUG } diff --git a/test/core/core_func_integer_find_lsb.cpp b/test/core/core_func_integer_find_lsb.cpp index 12e419dd..1f21c0ff 100644 --- a/test/core/core_func_integer_find_lsb.cpp +++ b/test/core/core_func_integer_find_lsb.cpp @@ -292,7 +292,7 @@ void error(int x, int y) { int main() { -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG int i, m, n; static unsigned test[] = {0,32, 1,0, 2,1, 3,0, 4,2, 5,0, 6,1, 7,0, @@ -427,5 +427,5 @@ int main() if (errors == 0) printf("Passed all %d cases.\n", sizeof(test)/8); -# endif//GLM_TEST_ENABLE_PERF +# endif//NDEBUG } diff --git a/test/core/core_func_integer_find_msb.cpp b/test/core/core_func_integer_find_msb.cpp index 176a6ea6..a1a7c323 100644 --- a/test/core/core_func_integer_find_msb.cpp +++ b/test/core/core_func_integer_find_msb.cpp @@ -331,7 +331,7 @@ void error(int x, int y) { int main() { -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG int i, n; static unsigned test[] = {0,32, 1,31, 2,30, 3,30, 4,29, 5,29, 6,29, @@ -464,5 +464,5 @@ int main() if (errors == 0) printf("Passed all %d cases.\n", sizeof(test)/8); -# endif//GLM_TEST_ENABLE_PERF +# endif//NDEBUG } diff --git a/test/core/core_func_matrix.cpp b/test/core/core_func_matrix.cpp index 61f11d75..727f39b3 100644 --- a/test/core/core_func_matrix.cpp +++ b/test/core/core_func_matrix.cpp @@ -263,13 +263,13 @@ int main() Error += test_determinant(); Error += test_inverse(); -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG for(std::size_t i = 0; i < 1; ++i) { Error += test_inverse_perf(i, "mat4"); Error += test_inverse_perf(i, "dmat4"); } -# endif +# endif//NDEBUG return Error; } diff --git a/test/core/core_type_vec4.cpp b/test/core/core_type_vec4.cpp index 7d4b80d8..602ecc96 100644 --- a/test/core/core_type_vec4.cpp +++ b/test/core/core_type_vec4.cpp @@ -448,10 +448,10 @@ int main() std::size_t const Size(1000000); -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG Error += test_vec4_perf_AoS(Size); Error += test_vec4_perf_SoA(Size); -# endif +# endif//NDEBUG Error += test_vec4_ctor(); Error += test_vec4_size(); diff --git a/test/gtc/gtc_bitfield.cpp b/test/gtc/gtc_bitfield.cpp index ab5dab87..7c447c33 100644 --- a/test/gtc/gtc_bitfield.cpp +++ b/test/gtc/gtc_bitfield.cpp @@ -664,10 +664,10 @@ int main() Error += ::bitfieldInterleave::test(); //Error += ::bitRevert::test(); -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG Error += ::mask::perf(); Error += ::bitfieldInterleave::perf(); -# endif +# endif//NDEBUG return Error; } diff --git a/test/gtc/gtc_integer.cpp b/test/gtc/gtc_integer.cpp index f671c17f..b306b843 100644 --- a/test/gtc/gtc_integer.cpp +++ b/test/gtc/gtc_integer.cpp @@ -263,9 +263,9 @@ int main() Error += ::log2_::test(); Error += ::mod_::test(); -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG Error += ::log2_::perf(); -# endif +# endif//NDEBUG return Error; } diff --git a/test/gtc/gtc_round.cpp b/test/gtc/gtc_round.cpp index 13137b3f..d2f242b3 100644 --- a/test/gtc/gtc_round.cpp +++ b/test/gtc/gtc_round.cpp @@ -300,9 +300,9 @@ int main() Error += isPowerOfTwo::test(); Error += ceilPowerOfTwo::test(); -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG Error += ceilPowerOfTwo::perf(); -# endif +# endif//NDEBUG return Error; } diff --git a/test/gtx/gtx_fast_trigonometry.cpp b/test/gtx/gtx_fast_trigonometry.cpp index d0c671e6..de1e6b39 100644 --- a/test/gtx/gtx_fast_trigonometry.cpp +++ b/test/gtx/gtx_fast_trigonometry.cpp @@ -178,14 +178,14 @@ int main() { int Error(0); -# ifdef GLM_TEST_ENABLE_PERF +# ifdef NDEBUG Error += ::fastCos::perf(); Error += ::fastSin::perf(); Error += ::fastTan::perf(); Error += ::fastAcos::perf(); Error += ::fastAsin::perf(); Error += ::fastAtan::perf(); -# endif +# endif//NDEBUG return Error; } From 83ad80d6b4508a0fa85a70e7ee7586f4863a7e57 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 20:52:53 +0100 Subject: [PATCH 52/64] Fixed clang build --- test/core/core_func_integer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index 39938d6d..6b52e1af 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -977,9 +977,9 @@ namespace findLSB {0x00000002, 1}, // {0x80000000, 31}, // Clang generates an error with this {0x00010000, 16}, - {0xFFFF0000, 16}, - {0xFF000000, 24}, - {0xFF00FF00, 8}, + {0x7FFF0000, 16}, + {0x7F000000, 24}, + {0x7F00FF00, 8}, {0x00000000, -1} }; From a290603a9c624a2b30a169d5c9ba05bcaa9076aa Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 21:16:20 +0100 Subject: [PATCH 53/64] Fixed clang test --- glm/detail/setup.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index 8a856260..9159a514 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -526,7 +526,6 @@ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))) #define GLM_HAS_TRIVIAL_QUERIES ( \ - ((GLM_LANG & GLM_LANG_CXX11_FLAG) && !(GLM_COMPILER & GLM_COMPILER_GCC)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013))) #define GLM_HAS_MAKE_SIGNED ( \ From 25a57418bdd604e79424ae0e885330319db926a2 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 21:48:35 +0100 Subject: [PATCH 54/64] Updated readme and doc --- copying.txt | 35 ++++++++++++++++++++++++++++++++--- doc/glm.docx | Bin 1070701 -> 1070827 bytes doc/glm.pdf | Bin 1242870 -> 1242869 bytes doc/pages.doxy | 4 ++-- readme.txt | 34 ++++++++++++++++++++++++++++------ 5 files changed, 62 insertions(+), 11 deletions(-) diff --git a/copying.txt b/copying.txt index 617161d0..0b3b5acf 100644 --- a/copying.txt +++ b/copying.txt @@ -1,5 +1,11 @@ -The Happy Bunny License (Modified MIT License) +================================================================================ +OpenGL Mathematics (GLM) +-------------------------------------------------------------------------------- +GLM is licensed under The Happy Bunny License and MIT License +================================================================================ +The Happy Bunny License (Modified MIT License) +-------------------------------------------------------------------------------- Copyright (c) 2005 - 2014 G-Truc Creation Permission is hereby granted, free of charge, to any person obtaining a copy @@ -13,8 +19,31 @@ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Restrictions: - By making use of the Software for military purposes, you choose to make a - Bunny unhappy. + By making use of the Software for military purposes, you choose to make a + Bunny unhappy. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +================================================================================ +The MIT License +-------------------------------------------------------------------------------- +Copyright (c) 2005 - 2014 G-Truc Creation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/doc/glm.docx b/doc/glm.docx index 28b9636262052c085206cdaea788a9b07eef6a80..a08901da241643e752a96f5def0f16f2089d31d1 100644 GIT binary patch delta 61862 zcmV)WK(4>-tU>FoL9q4)3W6^P&ddh@09Qb=2P^@9U2o$y7JXk}|3hFP`zFzn9oy+v zlbx>w-6oxElLkd!3`(M9#uTZNlt1$8_fm2a&vZ}W}(qJk&ADD3x+2+u@Ld6D#fyFCvky(6VD&oL96B)tt$y|Z_J|J#qh5{5P0q~^3z zM=%P1S4nTKb@c;6Dw~rMt58&g!TjRjPeBxie*9c)3B@6su{9iW~j%@S0aaB z{=C*ia?E;Y55|cHjLM8FW_pDs2`Sfvg_$US5#d3tP}2^eT~P*$=>|U@bqSxAu)fdG zOOjLEb`Hae7yCdAPW^z0#x@jj}Q*@`$cHrgfodsQl^q9^bt$SNqAXjSfShNn~XA?qJLjq)eJTRs#z6iQL3=YXKs&w zb~t_u--B|hvRWCBJWU0bxk7cC>bWF1he^z?<>C^?=cF&yA zG*qIN8G%6y((EEfu$>0l{b0*YnB`c_n}OOrZhTiI#XZS%a&dX(hWoXBafvC@;s@|h z|9bXNju2m)J#>Ka)Kj1yIz|hw7tCE zlRGN1EG&54jN|y2Jh5ggX^uKI`~4sWw$KrK^1&u_qyos-BN;&8k`;=kC-Jo3v>Q^> zd}XQ(O8{1?h|~wfl|iSwz(Vc&*37I^&uc+(VofkQWvCVu6Dx|h;hZX87}HXy#5_jp z#=?MaUbnHdaba%M*`uhkL-)6Tu|MedqtPLR-xEiTPHm26azodvbRv6Gg~H zN?33&2wdWd@FuLs{U}2HA?n8_s|!*|8Kao%0DgBKfK!xMZUVp&w1(^$*~Xq|D$Hg@ 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 delta 61777 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 diff --git a/doc/glm.pdf b/doc/glm.pdf index 25ea0c2e8d8ee13da28f948b9fd9296574631953..c72617b6035e18f066634e1f819eecd41afd5f54 100644 GIT binary patch delta 142938 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 z +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

    L+{%6~UTkpqz4U@Xk(5QC6o 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 Nfi%!{bo7|-`M*ISa`ylL delta 142886 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 z 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 USBH85ogcJJI$ASlx-N73H|K<0P5=M^ diff --git a/doc/pages.doxy b/doc/pages.doxy index 461f26be..d91b5939 100644 --- a/doc/pages.doxy +++ b/doc/pages.doxy @@ -11,11 +11,11 @@ GLM is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers: - Apple Clang 4.0 and higher - - CUDA 4.0 and higher - GCC 4.2 and higher - LLVM 3.0 and higher - Intel C++ Composer XE 2013 and higher - Visual Studio 2010 and higher + - CUDA 4.0 and higher (experimental) - Any conform C++98 compiler @note The Doxygen-generated documentation will often state that a type or function @@ -23,7 +23,7 @@ Please ignore this; All publicly available types and functions can be accessed as a direct children of the glm namespace. - The source code is licenced under the Happy Bunny License (Modified MIT). + The source code is licenced under the Happy Bunny License (Modified MIT) and MIT license. These pages are the API reference only. For more information about how to use GLM, please have a look at the manual. diff --git a/readme.txt b/readme.txt index 8b41c70c..b3cdcd76 100644 --- a/readme.txt +++ b/readme.txt @@ -1,13 +1,12 @@ ================================================================================ OpenGL Mathematics (GLM) -------------------------------------------------------------------------------- -glm.g-truc.net -glm@g-truc.net +GLM is licensed under The Happy Bunny License and MIT License ================================================================================ -The MIT License +The Happy Bunny License (Modified MIT License) -------------------------------------------------------------------------------- -Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) +Copyright (c) 2005 - 2014 G-Truc Creation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -20,8 +19,31 @@ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Restrictions: - By making use of the Software for military purposes, you choose to make - a Bunny unhappy. + By making use of the Software for military purposes, you choose to make a + Bunny unhappy. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +================================================================================ +The MIT License +-------------------------------------------------------------------------------- +Copyright (c) 2005 - 2014 G-Truc Creation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, From 67964bfd0ae80b28543182252f5ae00aa50340d2 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 22:13:30 +0100 Subject: [PATCH 55/64] Matching headers and implementations --- glm/gtc/matrix_inverse.inl | 25 ++------- glm/gtx/fast_square_root.hpp | 55 +++++++++++++------- glm/gtx/fast_trigonometry.hpp | 1 - glm/gtx/normalize_dot.hpp | 27 +++++----- glm/gtx/normalize_dot.inl | 96 ++--------------------------------- 5 files changed, 60 insertions(+), 144 deletions(-) diff --git a/glm/gtc/matrix_inverse.inl b/glm/gtc/matrix_inverse.inl index 2ab9530c..94e0196d 100644 --- a/glm/gtc/matrix_inverse.inl +++ b/glm/gtc/matrix_inverse.inl @@ -37,10 +37,7 @@ namespace glm { template - GLM_FUNC_QUALIFIER tmat3x3 affineInverse - ( - tmat3x3 const & m - ) + GLM_FUNC_QUALIFIER tmat3x3 affineInverse(tmat3x3 const & m) { tmat3x3 Result(m); Result[2] = tvec3(0, 0, 1); @@ -51,10 +48,7 @@ namespace glm } template - GLM_FUNC_QUALIFIER tmat4x4 affineInverse - ( - tmat4x4 const & m - ) + GLM_FUNC_QUALIFIER tmat4x4 affineInverse(tmat4x4 const & m) { tmat4x4 Result(m); Result[3] = tvec4(0, 0, 0, 1); @@ -65,10 +59,7 @@ namespace glm } template - GLM_FUNC_QUALIFIER tmat2x2 inverseTranspose - ( - tmat2x2 const & m - ) + GLM_FUNC_QUALIFIER tmat2x2 inverseTranspose(tmat2x2 const & m) { T Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; @@ -82,10 +73,7 @@ namespace glm } template - GLM_FUNC_QUALIFIER tmat3x3 inverseTranspose - ( - tmat3x3 const & m - ) + GLM_FUNC_QUALIFIER tmat3x3 inverseTranspose(tmat3x3 const & m) { T Determinant = + m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) @@ -108,10 +96,7 @@ namespace glm } template - GLM_FUNC_QUALIFIER tmat4x4 inverseTranspose - ( - tmat4x4 const & m - ) + GLM_FUNC_QUALIFIER tmat4x4 inverseTranspose(tmat4x4 const & m) { T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; diff --git a/glm/gtx/fast_square_root.hpp b/glm/gtx/fast_square_root.hpp index 0271966d..f005bc7c 100644 --- a/glm/gtx/fast_square_root.hpp +++ b/glm/gtx/fast_square_root.hpp @@ -44,7 +44,9 @@ #pragma once // Dependency: -#include "../glm.hpp" +#include "../common.hpp" +#include "../exponential.hpp" +#include "../geometric.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) # pragma message("GLM: GLM_GTX_fast_square_root extension included") @@ -55,38 +57,57 @@ namespace glm /// @addtogroup gtx_fast_square_root /// @{ - //! Faster than the common sqrt function but less accurate. - //! From GLM_GTX_fast_square_root extension. + /// Faster than the common sqrt function but less accurate. + /// + /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL genType fastSqrt(genType x); - //! Faster than the common inversesqrt function but less accurate. - //! From GLM_GTX_fast_square_root extension. + /// Faster than the common sqrt function but less accurate. + /// + /// @see gtx_fast_square_root extension. + template class vecType> + GLM_FUNC_DECL vecType fastSqrt(vecType const & x); + + /// Faster than the common inversesqrt function but less accurate. + /// + /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL genType fastInverseSqrt(genType x); - //! Faster than the common inversesqrt function but less accurate. - //! From GLM_GTX_fast_square_root extension. + /// Faster than the common inversesqrt function but less accurate. + /// + /// @see gtx_fast_square_root extension. template class vecType> GLM_FUNC_DECL vecType fastInverseSqrt(vecType const & x); - //! Faster than the common length function but less accurate. - //! From GLM_GTX_fast_square_root extension. - template - GLM_FUNC_DECL typename genType::value_type fastLength(genType const & x); + /// Faster than the common length function but less accurate. + /// + /// @see gtx_fast_square_root extension. + template + GLM_FUNC_DECL genType fastLength(genType x); - //! Faster than the common distance function but less accurate. - //! From GLM_GTX_fast_square_root extension. + /// Faster than the common length function but less accurate. + /// + /// @see gtx_fast_square_root extension. + template class vecType> + GLM_FUNC_DECL T fastLength(vecType const & x); + + /// Faster than the common distance function but less accurate. + /// + /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL genType fastDistance(genType x, genType y); - //! Faster than the common distance function but less accurate. - //! From GLM_GTX_fast_square_root extension. + /// Faster than the common distance function but less accurate. + /// + /// @see gtx_fast_square_root extension. template class vecType> GLM_FUNC_DECL T fastDistance(vecType const & x, vecType const & y); - //! Faster than the common normalize function but less accurate. - //! From GLM_GTX_fast_square_root extension. + /// Faster than the common normalize function but less accurate. + /// + /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL genType fastNormalize(genType const & x); diff --git a/glm/gtx/fast_trigonometry.hpp b/glm/gtx/fast_trigonometry.hpp index 091fac20..9f8c1035 100644 --- a/glm/gtx/fast_trigonometry.hpp +++ b/glm/gtx/fast_trigonometry.hpp @@ -42,7 +42,6 @@ #pragma once // Dependency: -#include "../glm.hpp" #include "../gtc/constants.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) diff --git a/glm/gtx/normalize_dot.hpp b/glm/gtx/normalize_dot.hpp index 406f7a24..5b1fe1d5 100644 --- a/glm/gtx/normalize_dot.hpp +++ b/glm/gtx/normalize_dot.hpp @@ -43,7 +43,6 @@ #pragma once // Dependency: -#include "../glm.hpp" #include "../gtx/fast_square_root.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) @@ -55,21 +54,19 @@ namespace glm /// @addtogroup gtx_normalize_dot /// @{ - //! Normalize parameters and returns the dot product of x and y. - //! It's faster that dot(normalize(x), normalize(y)). - //! From GLM_GTX_normalize_dot extension. - template - GLM_FUNC_DECL typename genType::value_type normalizeDot( - genType const & x, - genType const & y); + /// Normalize parameters and returns the dot product of x and y. + /// It's faster that dot(normalize(x), normalize(y)). + /// + /// @see gtx_normalize_dot extension. + template class vecType> + GLM_FUNC_DECL T normalizeDot(vecType const & x, vecType const & y); - //! Normalize parameters and returns the dot product of x and y. - //! Faster that dot(fastNormalize(x), fastNormalize(y)). - //! From GLM_GTX_normalize_dot extension. - template - GLM_FUNC_DECL typename genType::value_type fastNormalizeDot( - genType const & x, - genType const & y); + /// Normalize parameters and returns the dot product of x and y. + /// Faster that dot(fastNormalize(x), fastNormalize(y)). + /// + /// @see gtx_normalize_dot extension. + template class vecType> + GLM_FUNC_DECL T fastNormalizeDot(vecType const & x, vecType const & y); /// @} }//namespace glm diff --git a/glm/gtx/normalize_dot.inl b/glm/gtx/normalize_dot.inl index b231a566..775ffb27 100644 --- a/glm/gtx/normalize_dot.inl +++ b/glm/gtx/normalize_dot.inl @@ -32,101 +32,15 @@ namespace glm { - template - GLM_FUNC_QUALIFIER genType normalizeDot - ( - genType const & x, - genType const & y - ) + template class vecType> + GLM_FUNC_QUALIFIER T normalizeDot(vecType const & x, vecType const & y) { return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); } - template - GLM_FUNC_QUALIFIER T normalizeDot - ( - tvec2 const & x, - tvec2 const & y - ) + template class vecType> + GLM_FUNC_QUALIFIER T fastNormalizeDot(vecType const & x, vecType const & y) { - return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER T normalizeDot - ( - tvec3 const & x, - tvec3 const & y - ) - { - return - glm::dot(x, y) * - glm::inversesqrt(glm::dot(x, x) * - glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER T normalizeDot - ( - tvec4 const & x, - tvec4 const & y - ) - { - return - glm::dot(x, y) * - glm::inversesqrt(glm::dot(x, x) * - glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER genType fastNormalizeDot - ( - genType const & x, - genType const & y - ) - { - return - glm::dot(x, y) * - fastInverseSqrt(glm::dot(x, x) * - glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER T fastNormalizeDot - ( - tvec2 const & x, - tvec2 const & y - ) - { - return - glm::dot(x, y) * - fastInverseSqrt(glm::dot(x, x) * - glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER T fastNormalizeDot - ( - tvec3 const & x, - tvec3 const & y - ) - { - return - glm::dot(x, y) * - fastInverseSqrt(glm::dot(x, x) * - glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER T fastNormalizeDot - ( - tvec4 const & x, - tvec4 const & y - ) - { - return - glm::dot(x, y) * - fastInverseSqrt(glm::dot(x, x) * - glm::dot(y, y)); + return glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y)); } }//namespace glm From ff3872c8597eb718ce01a3e7686aae57ca1f4fdb Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 22:57:33 +0100 Subject: [PATCH 56/64] Reducing header dependences --- glm/gtc/matrix_inverse.hpp | 4 ++++ glm/gtc/matrix_inverse.inl | 4 ---- glm/gtc/noise.hpp | 7 +++++++ glm/gtc/noise.inl | 5 ----- glm/gtx/optimum_pow.hpp | 40 ++++++++++++-------------------------- glm/gtx/optimum_pow.inl | 32 ------------------------------ glm/gtx/orthonormalize.hpp | 21 ++++++++++---------- glm/gtx/orthonormalize.inl | 15 ++++---------- glm/gtx/projection.hpp | 13 ++++++------- glm/gtx/projection.inl | 8 ++------ 10 files changed, 46 insertions(+), 103 deletions(-) diff --git a/glm/gtc/matrix_inverse.hpp b/glm/gtc/matrix_inverse.hpp index 08c7d787..76ab2b8a 100644 --- a/glm/gtc/matrix_inverse.hpp +++ b/glm/gtc/matrix_inverse.hpp @@ -42,6 +42,10 @@ // Dependencies #include "../detail/setup.hpp" +#include "../matrix.hpp" +#include "../mat2x2.hpp" +#include "../mat3x3.hpp" +#include "../mat4x4.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) # pragma message("GLM: GLM_GTC_matrix_inverse extension included") diff --git a/glm/gtc/matrix_inverse.inl b/glm/gtc/matrix_inverse.inl index 94e0196d..c3409318 100644 --- a/glm/gtc/matrix_inverse.inl +++ b/glm/gtc/matrix_inverse.inl @@ -30,10 +30,6 @@ /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// -#include "../mat2x2.hpp" -#include "../mat3x3.hpp" -#include "../mat4x4.hpp" - namespace glm { template diff --git a/glm/gtc/noise.hpp b/glm/gtc/noise.hpp index e648c65b..d4ae69ef 100644 --- a/glm/gtc/noise.hpp +++ b/glm/gtc/noise.hpp @@ -47,6 +47,13 @@ // Dependencies #include "../detail/setup.hpp" #include "../detail/precision.hpp" +#include "../detail/_noise.hpp" +#include "../geometric.hpp" +#include "../common.hpp" +#include "../vector_relational.hpp" +#include "../vec2.hpp" +#include "../vec3.hpp" +#include "../vec4.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) # pragma message("GLM: GLM_GTC_noise extension included") diff --git a/glm/gtc/noise.inl b/glm/gtc/noise.inl index 90b2c1bb..20884bb7 100644 --- a/glm/gtc/noise.inl +++ b/glm/gtc/noise.inl @@ -35,11 +35,6 @@ // http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf /////////////////////////////////////////////////////////////////////////////////// -#include "../geometric.hpp" -#include "../common.hpp" -#include "../vector_relational.hpp" -#include "../detail/_noise.hpp" - namespace glm{ namespace gtc { diff --git a/glm/gtx/optimum_pow.hpp b/glm/gtx/optimum_pow.hpp index 38920bbf..7b6fa283 100644 --- a/glm/gtx/optimum_pow.hpp +++ b/glm/gtx/optimum_pow.hpp @@ -54,39 +54,23 @@ namespace gtx /// @addtogroup gtx_optimum_pow /// @{ - //! Returns x raised to the power of 2. - //! From GLM_GTX_optimum_pow extension. + /// Returns x raised to the power of 2. + /// + /// @see gtx_optimum_pow template - GLM_FUNC_DECL genType pow2(const genType& x); + GLM_FUNC_DECL genType pow2(genType const & x); - //! Returns x raised to the power of 3. - //! From GLM_GTX_optimum_pow extension. + /// Returns x raised to the power of 3. + /// + /// @see gtx_optimum_pow template - GLM_FUNC_DECL genType pow3(const genType& x); + GLM_FUNC_DECL genType pow3(genType const & x); - //! Returns x raised to the power of 4. - //! From GLM_GTX_optimum_pow extension. + /// Returns x raised to the power of 4. + /// + /// @see gtx_optimum_pow template - GLM_FUNC_DECL genType pow4(const genType& x); - - //! Checks if the parameter is a power of 2 number. - //! From GLM_GTX_optimum_pow extension. - GLM_FUNC_DECL bool powOfTwo(int num); - - //! Checks to determine if the parameter component are power of 2 numbers. - //! From GLM_GTX_optimum_pow extension. - template - GLM_FUNC_DECL tvec2 powOfTwo(tvec2 const & x); - - //! Checks to determine if the parameter component are power of 2 numbers. - //! From GLM_GTX_optimum_pow extension. - template - GLM_FUNC_DECL tvec3 powOfTwo(tvec3 const & x); - - //! Checks to determine if the parameter component are power of 2 numbers. - //! From GLM_GTX_optimum_pow extension. - template - GLM_FUNC_DECL tvec4 powOfTwo(tvec4 const & x); + GLM_FUNC_DECL genType pow4(genType const & x); /// @} }//namespace gtx diff --git a/glm/gtx/optimum_pow.inl b/glm/gtx/optimum_pow.inl index 644af031..85f4a732 100644 --- a/glm/gtx/optimum_pow.inl +++ b/glm/gtx/optimum_pow.inl @@ -49,36 +49,4 @@ namespace glm { return (x * x) * (x * x); } - - GLM_FUNC_QUALIFIER bool powOfTwo(int x) - { - return !(x & (x - 1)); - } - - template - GLM_FUNC_QUALIFIER tvec2 powOfTwo(tvec2 const & x) - { - return tvec2( - powOfTwo(x.x), - powOfTwo(x.y)); - } - - template - GLM_FUNC_QUALIFIER tvec3 powOfTwo(tvec3 const & x) - { - return tvec3( - powOfTwo(x.x), - powOfTwo(x.y), - powOfTwo(x.z)); - } - - template - GLM_FUNC_QUALIFIER tvec4 powOfTwo(tvec4 const & x) - { - return tvec4( - powOfTwo(x.x), - powOfTwo(x.y), - powOfTwo(x.z), - powOfTwo(x.w)); - } }//namespace glm diff --git a/glm/gtx/orthonormalize.hpp b/glm/gtx/orthonormalize.hpp index c406abd4..cc83a093 100644 --- a/glm/gtx/orthonormalize.hpp +++ b/glm/gtx/orthonormalize.hpp @@ -43,7 +43,9 @@ #pragma once // Dependency: -#include "../glm.hpp" +#include "../vec3.hpp" +#include "../mat3x3.hpp" +#include "../geometric.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) # pragma message("GLM: GLM_GTX_orthonormalize extension included") @@ -54,18 +56,17 @@ namespace glm /// @addtogroup gtx_orthonormalize /// @{ - //! Returns the orthonormalized matrix of m. - //! From GLM_GTX_orthonormalize extension. + /// Returns the orthonormalized matrix of m. + /// + /// @see gtx_orthonormalize template - GLM_FUNC_DECL tmat3x3 orthonormalize( - const tmat3x3& m); + GLM_FUNC_DECL tmat3x3 orthonormalize(tmat3x3 const & m); - //! Orthonormalizes x according y. - //! From GLM_GTX_orthonormalize extension. + /// Orthonormalizes x according y. + /// + /// @see gtx_orthonormalize template - GLM_FUNC_DECL tvec3 orthonormalize( - const tvec3& x, - const tvec3& y); + GLM_FUNC_DECL tvec3 orthonormalize(tvec3 const & x, tvec3 const & y); /// @} }//namespace glm diff --git a/glm/gtx/orthonormalize.inl b/glm/gtx/orthonormalize.inl index c147f0c4..28af77e8 100644 --- a/glm/gtx/orthonormalize.inl +++ b/glm/gtx/orthonormalize.inl @@ -33,20 +33,17 @@ namespace glm { template - GLM_FUNC_QUALIFIER tmat3x3 orthonormalize - ( - const tmat3x3& m - ) + GLM_FUNC_QUALIFIER tmat3x3 orthonormalize(tmat3x3 const & m) { tmat3x3 r = m; r[0] = normalize(r[0]); - float d0 = dot(r[0], r[1]); + T d0 = dot(r[0], r[1]); r[1] -= r[0] * d0; r[1] = normalize(r[1]); - float d1 = dot(r[1], r[2]); + T d1 = dot(r[1], r[2]); d0 = dot(r[0], r[2]); r[2] -= r[0] * d0 + r[1] * d1; r[2] = normalize(r[2]); @@ -55,11 +52,7 @@ namespace glm } template - GLM_FUNC_QUALIFIER tvec3 orthonormalize - ( - const tvec3& x, - const tvec3& y - ) + GLM_FUNC_QUALIFIER tvec3 orthonormalize(tvec3 const & x, tvec3 const & y) { return normalize(x - y * dot(y, x)); } diff --git a/glm/gtx/projection.hpp b/glm/gtx/projection.hpp index f5e41738..acb6d045 100644 --- a/glm/gtx/projection.hpp +++ b/glm/gtx/projection.hpp @@ -42,7 +42,7 @@ #pragma once // Dependency: -#include "../glm.hpp" +#include "../geometric.hpp" #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) # pragma message("GLM: GLM_GTX_projection extension included") @@ -53,12 +53,11 @@ namespace glm /// @addtogroup gtx_projection /// @{ - //! Projects x on Normal. - //! From GLM_GTX_projection extension. - template - GLM_FUNC_DECL vecType proj( - vecType const & x, - vecType const & Normal); + /// Projects x on Normal. + /// + /// @see gtx_projection + template + GLM_FUNC_DECL vecType proj(vecType const & x, vecType const & Normal); /// @} }//namespace glm diff --git a/glm/gtx/projection.inl b/glm/gtx/projection.inl index b07ee85a..15ee0707 100644 --- a/glm/gtx/projection.inl +++ b/glm/gtx/projection.inl @@ -32,12 +32,8 @@ namespace glm { - template - GLM_FUNC_QUALIFIER vecType proj - ( - vecType const & x, - vecType const & Normal - ) + template + GLM_FUNC_QUALIFIER vecType proj(vecType const & x, vecType const & Normal) { return glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal; } From 54c84606f42a8b8fee474239051a98fc908cbacc Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 22:58:00 +0100 Subject: [PATCH 57/64] Fixed CUDA compilation error #276 --- glm/detail/func_integer.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index a57db01a..88d5dab4 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -212,7 +212,7 @@ namespace detail GLM_FUNC_QUALIFIER vecType uaddCarry(vecType const & x, vecType const & y, vecType & Carry) { vecType Value64(vecType(x) + vecType(y)); - vecType Max32(static_cast(std::numeric_limits::max())); + vecType Max32(static_cast(1) << static_cast(32) - static_cast(1)); Carry = mix(vecType(0), vecType(1), greaterThan(Value64, Max32)); return vecType(Value64 % (Max32 + static_cast(1))); } From 57262d1a67f5620522a0fc8ec7c21c5e68e21349 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 23:08:50 +0100 Subject: [PATCH 58/64] Fixed dependences --- glm/detail/_noise.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/glm/detail/_noise.hpp b/glm/detail/_noise.hpp index 2184fbaf..c60b46ae 100644 --- a/glm/detail/_noise.hpp +++ b/glm/detail/_noise.hpp @@ -32,6 +32,10 @@ #pragma once +#include "../vec2.hpp" +#include "../vec3.hpp" +#include "../vec4.hpp" + namespace glm{ namespace detail { From a4faeceb9955c07ef297849387ff3541d1351039 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 29 Nov 2014 23:16:13 +0100 Subject: [PATCH 59/64] Fixed warnings --- glm/detail/func_integer.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index 88d5dab4..f84304e5 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -212,7 +212,7 @@ namespace detail GLM_FUNC_QUALIFIER vecType uaddCarry(vecType const & x, vecType const & y, vecType & Carry) { vecType Value64(vecType(x) + vecType(y)); - vecType Max32(static_cast(1) << static_cast(32) - static_cast(1)); + vecType Max32((static_cast(1) << static_cast(32)) - static_cast(1)); Carry = mix(vecType(0), vecType(1), greaterThan(Value64, Max32)); return vecType(Value64 % (Max32 + static_cast(1))); } From 0d73f61828597b4b066335237b66b8428cb1e7cf Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 30 Nov 2014 16:59:49 +0100 Subject: [PATCH 60/64] Deprecate GTX_bit --- glm/gtx/bit.hpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/glm/gtx/bit.hpp b/glm/gtx/bit.hpp index 454e43e9..b5c73687 100644 --- a/glm/gtx/bit.hpp +++ b/glm/gtx/bit.hpp @@ -65,40 +65,52 @@ namespace glm GLM_FUNC_DECL vecType highestBitValue(vecType const & value); /// Return the power of two number which value is just higher the input value. + /// Deprecated, use ceilPowerOfTwo from GTC_round instead /// + /// @see gtc_round /// @see gtx_bit template - GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value); + GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value); /// Return the power of two number which value is just higher the input value. + /// Deprecated, use ceilPowerOfTwo from GTC_round instead /// + /// @see gtc_round /// @see gtx_bit template class vecType> - GLM_FUNC_DECL vecType powerOfTwoAbove(vecType const & value); + GLM_DEPRECATED GLM_FUNC_DECL vecType powerOfTwoAbove(vecType const & value); /// Return the power of two number which value is just lower the input value. + /// Deprecated, use floorPowerOfTwo from GTC_round instead /// + /// @see gtc_round /// @see gtx_bit template - GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value); + GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value); /// Return the power of two number which value is just lower the input value. + /// Deprecated, use floorPowerOfTwo from GTC_round instead /// + /// @see gtc_round /// @see gtx_bit template class vecType> - GLM_FUNC_DECL vecType powerOfTwoBelow(vecType const & value); + GLM_DEPRECATED GLM_FUNC_DECL vecType powerOfTwoBelow(vecType const & value); /// Return the power of two number which value is the closet to the input value. + /// Deprecated, use roundPowerOfTwo from GTC_round instead /// + /// @see gtc_round /// @see gtx_bit template - GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value); + GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value); /// Return the power of two number which value is the closet to the input value. + /// Deprecated, use roundPowerOfTwo from GTC_round instead /// + /// @see gtc_round /// @see gtx_bit template class vecType> - GLM_FUNC_DECL vecType powerOfTwoNearest(vecType const & value); + GLM_DEPRECATED GLM_FUNC_DECL vecType powerOfTwoNearest(vecType const & value); /// @} } //namespace glm From 6285ed64d30ebe11d6aead96aece7e91c2514b1f Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 30 Nov 2014 21:57:58 +0100 Subject: [PATCH 61/64] Updated API --- doc/api/a00001.html | 3 +- doc/api/a00001_source.html | 478 +- doc/api/a00002.html | 3 +- doc/api/a00002_source.html | 44 +- doc/api/a00003.html | 3 +- doc/api/a00003_source.html | 206 +- doc/api/a00004.html | 3 +- doc/api/a00004_source.html | 1604 +-- doc/api/a00005.html | 3 +- doc/api/a00005_source.html | 1382 +-- doc/api/a00006.html | 3 +- doc/api/a00006_source.html | 266 +- doc/api/a00007.html | 51 +- doc/api/a00007_source.html | 290 +- doc/api/a00008.html | 60 +- doc/api/a00008_source.html | 82 +- doc/api/a00009.html | 59 +- doc/api/a00009_source.html | 174 +- doc/api/{a00145.html => a00010.html} | 31 +- doc/api/a00010_source.html | 58 +- doc/api/a00011.html | 17 +- doc/api/a00011_source.html | 90 +- doc/api/a00012.html | 13 +- doc/api/a00012_source.html | 72 +- doc/api/a00013.html | 3 +- doc/api/a00013_source.html | 6 +- doc/api/a00014.html | 7 +- doc/api/a00014_source.html | 44 +- doc/api/a00015.html | 157 +- doc/api/a00015_source.html | 356 +- doc/api/a00016.html | 13 +- doc/api/a00016_source.html | 71 +- doc/api/a00017.html | 63 +- doc/api/a00017_source.html | 262 +- doc/api/a00018.html | 47 +- doc/api/a00018_source.html | 428 +- doc/api/a00019.html | 15 +- doc/api/a00019_source.html | 84 +- doc/api/a00020.html | 35 +- doc/api/a00020_source.html | 198 +- doc/api/a00021.html | 3 +- doc/api/a00021_source.html | 6 +- doc/api/a00022_source.html | 270 +- doc/api/a00023.html | 7 +- doc/api/a00023_source.html | 44 +- doc/api/a00024.html | 29 +- doc/api/a00024_source.html | 190 +- doc/api/a00025.html | 29 +- doc/api/a00025_source.html | 112 +- doc/api/a00026.html | 29 +- doc/api/a00026_source.html | 88 +- doc/api/a00027.html | 21 +- doc/api/a00027_source.html | 93 +- doc/api/a00028.html | 71 +- doc/api/a00028_source.html | 352 +- doc/api/a00029.html | 17 +- doc/api/a00029_source.html | 98 +- doc/api/a00030.html | 19 +- doc/api/a00030_source.html | 120 +- doc/api/a00031.html | 29 +- doc/api/a00031_source.html | 172 +- doc/api/a00032.html | 11 +- doc/api/a00032_source.html | 208 +- doc/api/a00033.html | 11 +- doc/api/a00033_source.html | 68 +- doc/api/a00034.html | 29 +- doc/api/a00034_source.html | 108 +- doc/api/a00035.html | 33 +- doc/api/a00035_source.html | 148 +- doc/api/a00036.html | 21 +- doc/api/a00036_source.html | 100 +- doc/api/a00037.html | 887 +- doc/api/a00037_source.html | 2920 +++--- doc/api/a00038.html | 3 +- doc/api/a00038_source.html | 6 +- doc/api/a00039.html | 6 +- doc/api/a00039_source.html | 106 +- doc/api/a00040.html | 11 +- doc/api/a00040_source.html | 60 +- doc/api/a00041.html | 9 +- doc/api/a00041_source.html | 58 +- doc/api/a00042.html | 35 +- doc/api/a00042_source.html | 98 +- doc/api/a00043.html | 43 +- doc/api/a00043_source.html | 60 +- doc/api/a00044.html | 45 +- doc/api/a00044_source.html | 54 +- doc/api/a00045.html | 42 +- doc/api/a00045_source.html | 69 +- doc/api/a00046.html | 45 +- doc/api/a00046_source.html | 126 +- doc/api/a00047.html | 14 +- doc/api/a00047_source.html | 98 +- doc/api/a00048.html | 10 +- doc/api/a00048_source.html | 90 +- doc/api/a00049.html | 12 +- doc/api/a00049_source.html | 59 +- doc/api/a00050_source.html | 52 +- doc/api/{a00050.html => a00051.html} | 14 +- doc/api/a00051_source.html | 50 +- doc/api/a00052.html | 8 +- doc/api/a00052_source.html | 14 +- doc/api/a00053.html | 20 +- doc/api/a00053_source.html | 202 +- doc/api/a00054.html | 31 +- doc/api/a00054_source.html | 206 +- doc/api/a00055_source.html | 2394 ++++- doc/api/{a00063.html => a00056.html} | 11 +- doc/api/a00056_source.html | 2391 +---- doc/api/a00057.html | 9 +- doc/api/a00057_source.html | 50 +- doc/api/a00058.html | 9 +- doc/api/a00058_source.html | 41 +- doc/api/a00059.html | 9 +- doc/api/a00059_source.html | 40 +- doc/api/a00060.html | 9 +- doc/api/a00060_source.html | 49 +- doc/api/a00061.html | 9 +- doc/api/a00061_source.html | 49 +- doc/api/a00062.html | 9 +- doc/api/a00062_source.html | 40 +- doc/api/a00063_source.html | 42 +- doc/api/{a00088.html => a00064.html} | 11 +- doc/api/a00064_source.html | 51 +- doc/api/a00065.html | 9 +- doc/api/a00065_source.html | 35 +- doc/api/a00066.html | 34 +- doc/api/a00066_source.html | 50 +- doc/api/a00067.html | 35 +- doc/api/a00067_source.html | 72 +- doc/api/a00068.html | 24 +- doc/api/a00068_source.html | 57 +- doc/api/a00069.html | 216 +- doc/api/a00069_source.html | 410 +- doc/api/a00070.html | 227 +- doc/api/a00070_source.html | 424 +- doc/api/a00071.html | 35 +- doc/api/a00071_source.html | 73 +- doc/api/a00072.html | 59 +- doc/api/a00072_source.html | 110 +- doc/api/a00073.html | 78 +- doc/api/a00073_source.html | 137 +- doc/api/a00074.html | 66 +- doc/api/a00074_source.html | 110 +- doc/api/a00075.html | 96 +- doc/api/a00075_source.html | 183 +- doc/api/a00076.html | 89 +- doc/api/a00076_source.html | 183 +- doc/api/a00077.html | 34 +- doc/api/a00077_source.html | 72 +- doc/api/a00078.html | 35 +- doc/api/a00078_source.html | 63 +- doc/api/a00079.html | 42 +- doc/api/a00079_source.html | 81 +- doc/api/a00080.html | 56 +- doc/api/a00080_source.html | 107 +- doc/api/a00081.html | 46 +- doc/api/a00081_source.html | 94 +- doc/api/a00082.html | 24 +- doc/api/a00082_source.html | 47 +- doc/api/a00083.html | 59 +- doc/api/a00083_source.html | 85 +- doc/api/a00084.html | 62 +- doc/api/a00084_source.html | 88 +- doc/api/a00085.html | 39 +- doc/api/a00085_source.html | 71 +- doc/api/a00086.html | 83 +- doc/api/a00086_source.html | 142 +- doc/api/a00087.html | 80 +- doc/api/a00087_source.html | 120 +- doc/api/a00088_source.html | 12 +- doc/api/{a00055.html => a00089.html} | 26 +- doc/api/a00089_source.html | 31 +- doc/api/a00090.html | 24 +- doc/api/a00090_source.html | 53 +- doc/api/a00091.html | 28 +- doc/api/a00091_source.html | 45 +- doc/api/a00092.html | 25 +- doc/api/a00092_source.html | 39 +- doc/api/a00093.html | 100 +- doc/api/a00093_source.html | 242 +- doc/api/a00094.html | 149 +- doc/api/a00094_source.html | 333 +- doc/api/a00095.html | 91 +- doc/api/a00095_source.html | 188 +- doc/api/a00096.html | 44 +- doc/api/a00096_source.html | 115 +- doc/api/a00097.html | 28 +- doc/api/a00097_source.html | 92 +- doc/api/a00098.html | 65 +- doc/api/a00098_source.html | 98 +- doc/api/a00099.html | 63 +- doc/api/a00099_source.html | 104 +- doc/api/a00100.html | 58 +- doc/api/a00100_source.html | 117 +- doc/api/a00101.html | 101 +- doc/api/a00101_source.html | 172 +- doc/api/a00102.html | 77 +- doc/api/a00102_source.html | 162 +- doc/api/a00103.html | 18 +- doc/api/a00103_source.html | 92 +- doc/api/a00104.html | 18 +- doc/api/a00104_source.html | 801 +- doc/api/a00105.html | 16 +- doc/api/a00105_source.html | 934 +- doc/api/a00106.html | 74 + doc/api/a00106_source.html | 376 +- doc/api/a00107.html | 11 +- doc/api/a00107_source.html | 546 +- doc/api/a00108.html | 28 +- doc/api/a00108_source.html | 386 +- doc/api/a00109.html | 54 +- doc/api/a00109_source.html | 85 +- doc/api/a00110.html | 52 +- doc/api/a00110_source.html | 63 +- doc/api/a00111.html | 31 +- doc/api/a00111_source.html | 62 +- doc/api/a00112.html | 53 +- doc/api/a00112_source.html | 121 +- doc/api/a00113.html | 51 +- doc/api/a00113_source.html | 93 +- doc/api/a00114.html | 442 +- doc/api/a00114_source.html | 703 +- doc/api/a00115.html | 452 +- doc/api/a00115_source.html | 745 +- doc/api/a00116.html | 27 +- doc/api/a00116_source.html | 237 +- doc/api/a00117.html | 11 +- doc/api/a00117_source.html | 209 +- doc/api/a00118.html | 47 +- doc/api/a00118_source.html | 300 +- doc/api/a00119.html | 233 +- doc/api/a00119_source.html | 686 +- doc/api/a00120.html | 209 +- doc/api/a00120_source.html | 592 +- doc/api/a00121.html | 11 +- doc/api/a00121_source.html | 353 +- doc/api/a00122.html | 11 +- doc/api/a00122_source.html | 380 +- doc/api/a00123.html | 9 +- doc/api/a00123_source.html | 382 +- doc/api/a00124.html | 11 +- doc/api/a00124_source.html | 415 +- doc/api/a00125.html | 11 +- doc/api/a00125_source.html | 383 +- doc/api/a00126.html | 11 +- doc/api/a00126_source.html | 329 +- doc/api/a00127.html | 11 +- doc/api/a00127_source.html | 316 +- doc/api/a00128.html | 11 +- doc/api/a00128_source.html | 358 +- doc/api/a00129.html | 20 +- doc/api/a00129_source.html | 811 +- doc/api/a00130.html | 85 +- doc/api/a00130_source.html | 722 +- doc/api/a00131.html | 210 +- doc/api/a00131_source.html | 375 +- doc/api/a00132.html | 137 +- doc/api/a00132_source.html | 551 +- doc/api/a00133.html | 11 +- doc/api/a00133_source.html | 523 +- doc/api/a00134.html | 11 +- doc/api/a00134_source.html | 549 +- doc/api/a00135.html | 9 +- doc/api/a00135_source.html | 762 +- doc/api/a00136.html | 40 +- doc/api/a00136_source.html | 514 +- doc/api/a00137.html | 71 +- doc/api/a00137_source.html | 143 +- doc/api/a00138.html | 56 +- doc/api/a00138_source.html | 111 +- doc/api/a00139.html | 9 +- doc/api/a00139_source.html | 12 +- doc/api/a00140.html | 9 +- doc/api/a00140_source.html | 12 +- doc/api/a00141.html | 35 +- doc/api/a00141_source.html | 47 +- doc/api/a00142.html | 44 +- doc/api/a00142_source.html | 84 +- doc/api/a00143.html | 40 +- doc/api/a00143_source.html | 53 +- doc/api/a00144.html | 31 +- doc/api/a00144_source.html | 38 +- doc/api/a00145_source.html | 89 - doc/api/a00149.html | 1123 +++ doc/api/a00150.html | 1214 +-- doc/api/a00151.html | 484 +- doc/api/a00152.html | 490 +- doc/api/a00153.html | 489 +- doc/api/a00154.html | 130 +- doc/api/a00155.html | 322 +- doc/api/a00156.html | 446 +- doc/api/a00157.html | 587 +- doc/api/a00158.html | 384 +- doc/api/a00159.html | 120 +- doc/api/a00160.html | 127 +- doc/api/a00161.html | 782 +- doc/api/a00162.html | 2585 ++++- doc/api/a00163.html | 2782 +---- doc/api/a00164.html | 940 +- doc/api/a00165.html | 1489 ++- doc/api/a00166.html | 653 +- doc/api/a00167.html | 269 +- doc/api/a00168.html | 144 +- doc/api/a00169.html | 1892 +++- doc/api/a00170.html | 1864 +--- doc/api/a00171.html | 875 +- doc/api/a00172.html | 906 +- doc/api/a00173.html | 916 +- doc/api/a00174.html | 1385 ++- doc/api/a00175.html | 782 +- doc/api/a00176.html | 367 +- doc/api/a00177.html | 609 +- doc/api/a00178.html | 8938 ++++++++++++++++- doc/api/a00179.html | 8793 +--------------- doc/api/a00180.html | 497 +- doc/api/a00181.html | 188 +- doc/api/a00182.html | 1248 ++- doc/api/a00183.html | 1224 +-- doc/api/a00184.html | 182 +- doc/api/a00185.html | 157 +- doc/api/a00186.html | 141 +- doc/api/a00187.html | 103 +- doc/api/a00188.html | 301 +- doc/api/a00189.html | 356 +- doc/api/a00190.html | 396 +- doc/api/a00191.html | 699 +- doc/api/a00192.html | 439 +- doc/api/a00193.html | 488 +- doc/api/a00194.html | 636 +- doc/api/a00195.html | 367 +- doc/api/a00196.html | 198 +- doc/api/a00197.html | 185 +- doc/api/a00198.html | 66 +- doc/api/a00199.html | 253 +- doc/api/a00200.html | 352 +- doc/api/a00201.html | 269 +- doc/api/a00202.html | 325 +- doc/api/a00203.html | 60 +- doc/api/a00204.html | 87 +- doc/api/a00205.html | 128 +- doc/api/a00206.html | 382 +- doc/api/a00207.html | 230 +- doc/api/a00208.html | 334 +- doc/api/a00209.html | 336 +- doc/api/a00210.html | 269 +- doc/api/a00211.html | 180 +- doc/api/a00212.html | 299 +- doc/api/a00213.html | 188 +- doc/api/a00214.html | 268 +- doc/api/a00215.html | 83 +- doc/api/a00216.html | 82 +- doc/api/a00217.html | 99 +- doc/api/a00218.html | 157 +- doc/api/a00219.html | 54 +- doc/api/a00220.html | 22 +- doc/api/a00221.html | 550 +- doc/api/a00222.html | 48 +- doc/api/a00223.html | 554 +- doc/api/a00224.html | 120 +- doc/api/a00225.html | 380 +- doc/api/a00226.html | 120 +- doc/api/a00227.html | 394 +- doc/api/a00228.html | 8 +- doc/api/a00229.html | 8 +- doc/api/a00230.html | 166 +- doc/api/a00231.html | 176 +- doc/api/a00232.html | 154 +- doc/api/a00233.html | 192 +- doc/api/a00234.html | 315 +- doc/api/a00235.html | 7744 +++++++++++++- doc/api/a00236.html | 325 +- doc/api/a00237.html | 7692 +------------- doc/api/a00238.html | 98 +- doc/api/a00239.html | 271 - doc/api/a00240.html | 127 - .../dir_5cf96241cdcf6779b80e104875f9716f.html | 34 +- .../dir_5d3642ea3c7f2dae4a957f2cf472c9ae.html | 86 +- .../dir_8aa733b201d3a9f98631fbccc86ae6c7.html | 30 +- .../dir_9b22c367036d391e575f56d067c9855b.html | 56 +- .../dir_e6d11964c5662039c68343b35ca5648c.html | 4 +- doc/api/files.html | 209 +- doc/api/index.html | 4 +- doc/api/modules.html | 183 +- doc/glm.docx | Bin 1070827 -> 1065557 bytes 385 files changed, 60361 insertions(+), 60106 deletions(-) rename doc/api/{a00145.html => a00010.html} (67%) rename doc/api/{a00050.html => a00051.html} (88%) rename doc/api/{a00063.html => a00056.html} (90%) rename doc/api/{a00088.html => a00064.html} (90%) rename doc/api/{a00055.html => a00089.html} (74%) create mode 100644 doc/api/a00106.html delete mode 100644 doc/api/a00145_source.html create mode 100644 doc/api/a00149.html delete mode 100644 doc/api/a00239.html delete mode 100644 doc/api/a00240.html diff --git a/doc/api/a00001.html b/doc/api/a00001.html index ff3675d4..58bd4ef2 100644 --- a/doc/api/a00001.html +++ b/doc/api/a00001.html @@ -55,8 +55,9 @@

    OpenGL Mathematics (glm.g-truc.net)

    Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    +

    Restrictions: By making use of the Software for military purposes, you choose to make a Bunny unhappy.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -

    GLM Core

    +

    GLM Core

    Date
    2013-02-20 / 2013-02-20
    Author
    Christophe Riccio
    diff --git a/doc/api/a00001_source.html b/doc/api/a00001_source.html index eb6f4028..821a14cc 100644 --- a/doc/api/a00001_source.html +++ b/doc/api/a00001_source.html @@ -50,402 +50,402 @@
    Go to the documentation of this file.
    1 
    -
    29 #pragma once
    -
    30 
    -
    31 // #define GLM_CXX98_EXCEPTIONS
    -
    32 // #define GLM_CXX98_RTTI
    -
    33 
    -
    34 // #define GLM_CXX11_RVALUE_REFERENCES
    -
    35 // Rvalue references - GCC 4.3
    -
    36 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
    +
    33 #pragma once
    +
    34 
    +
    35 // #define GLM_CXX98_EXCEPTIONS
    +
    36 // #define GLM_CXX98_RTTI
    37 
    -
    38 // GLM_CXX11_TRAILING_RETURN
    -
    39 // Rvalue references for *this - GCC not supported
    -
    40 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
    +
    38 // #define GLM_CXX11_RVALUE_REFERENCES
    +
    39 // Rvalue references - GCC 4.3
    +
    40 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
    41 
    -
    42 // GLM_CXX11_NONSTATIC_MEMBER_INIT
    -
    43 // Initialization of class objects by rvalues - GCC any
    -
    44 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
    +
    42 // GLM_CXX11_TRAILING_RETURN
    +
    43 // Rvalue references for *this - GCC not supported
    +
    44 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
    45 
    46 // GLM_CXX11_NONSTATIC_MEMBER_INIT
    -
    47 // Non-static data member initializers - GCC 4.7
    -
    48 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
    +
    47 // Initialization of class objects by rvalues - GCC any
    +
    48 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
    49 
    -
    50 // #define GLM_CXX11_VARIADIC_TEMPLATE
    -
    51 // Variadic templates - GCC 4.3
    -
    52 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
    +
    50 // GLM_CXX11_NONSTATIC_MEMBER_INIT
    +
    51 // Non-static data member initializers - GCC 4.7
    +
    52 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
    53 
    -
    54 //
    -
    55 // Extending variadic template template parameters - GCC 4.4
    -
    56 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf
    +
    54 // #define GLM_CXX11_VARIADIC_TEMPLATE
    +
    55 // Variadic templates - GCC 4.3
    +
    56 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
    57 
    -
    58 // #define GLM_CXX11_GENERALIZED_INITIALIZERS
    -
    59 // Initializer lists - GCC 4.4
    -
    60 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
    +
    58 //
    +
    59 // Extending variadic template template parameters - GCC 4.4
    +
    60 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf
    61 
    -
    62 // #define GLM_CXX11_STATIC_ASSERT
    -
    63 // Static assertions - GCC 4.3
    -
    64 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
    +
    62 // #define GLM_CXX11_GENERALIZED_INITIALIZERS
    +
    63 // Initializer lists - GCC 4.4
    +
    64 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
    65 
    -
    66 // #define GLM_CXX11_AUTO_TYPE
    -
    67 // auto-typed variables - GCC 4.4
    -
    68 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
    +
    66 // #define GLM_CXX11_STATIC_ASSERT
    +
    67 // Static assertions - GCC 4.3
    +
    68 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
    69 
    70 // #define GLM_CXX11_AUTO_TYPE
    -
    71 // Multi-declarator auto - GCC 4.4
    -
    72 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf
    +
    71 // auto-typed variables - GCC 4.4
    +
    72 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
    73 
    74 // #define GLM_CXX11_AUTO_TYPE
    -
    75 // Removal of auto as a storage-class specifier - GCC 4.4
    -
    76 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm
    +
    75 // Multi-declarator auto - GCC 4.4
    +
    76 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf
    77 
    78 // #define GLM_CXX11_AUTO_TYPE
    -
    79 // New function declarator syntax - GCC 4.4
    -
    80 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
    +
    79 // Removal of auto as a storage-class specifier - GCC 4.4
    +
    80 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm
    81 
    -
    82 // #define GLM_CXX11_LAMBDAS
    -
    83 // New wording for C++0x lambdas - GCC 4.5
    -
    84 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf
    +
    82 // #define GLM_CXX11_AUTO_TYPE
    +
    83 // New function declarator syntax - GCC 4.4
    +
    84 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
    85 
    -
    86 // #define GLM_CXX11_DECLTYPE
    -
    87 // Declared type of an expression - GCC 4.3
    -
    88 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
    +
    86 // #define GLM_CXX11_LAMBDAS
    +
    87 // New wording for C++0x lambdas - GCC 4.5
    +
    88 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf
    89 
    -
    90 //
    -
    91 // Right angle brackets - GCC 4.3
    -
    92 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
    +
    90 // #define GLM_CXX11_DECLTYPE
    +
    91 // Declared type of an expression - GCC 4.3
    +
    92 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
    93 
    94 //
    -
    95 // Default template arguments for function templates DR226 GCC 4.3
    -
    96 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
    +
    95 // Right angle brackets - GCC 4.3
    +
    96 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
    97 
    98 //
    -
    99 // Solving the SFINAE problem for expressions DR339 GCC 4.4
    -
    100 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html
    +
    99 // Default template arguments for function templates DR226 GCC 4.3
    +
    100 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
    101 
    -
    102 // #define GLM_CXX11_ALIAS_TEMPLATE
    -
    103 // Template aliases N2258 GCC 4.7
    -
    104 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
    +
    102 //
    +
    103 // Solving the SFINAE problem for expressions DR339 GCC 4.4
    +
    104 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html
    105 
    -
    106 //
    -
    107 // Extern templates N1987 Yes
    -
    108 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
    +
    106 // #define GLM_CXX11_ALIAS_TEMPLATE
    +
    107 // Template aliases N2258 GCC 4.7
    +
    108 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
    109 
    -
    110 // #define GLM_CXX11_NULLPTR
    -
    111 // Null pointer constant N2431 GCC 4.6
    -
    112 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
    +
    110 //
    +
    111 // Extern templates N1987 Yes
    +
    112 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
    113 
    -
    114 // #define GLM_CXX11_STRONG_ENUMS
    -
    115 // Strongly-typed enums N2347 GCC 4.4
    -
    116 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
    +
    114 // #define GLM_CXX11_NULLPTR
    +
    115 // Null pointer constant N2431 GCC 4.6
    +
    116 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
    117 
    -
    118 //
    -
    119 // Forward declarations for enums N2764 GCC 4.6
    -
    120 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
    +
    118 // #define GLM_CXX11_STRONG_ENUMS
    +
    119 // Strongly-typed enums N2347 GCC 4.4
    +
    120 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
    121 
    122 //
    -
    123 // Generalized attributes N2761 GCC 4.8
    -
    124 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
    +
    123 // Forward declarations for enums N2764 GCC 4.6
    +
    124 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
    125 
    126 //
    -
    127 // Generalized constant expressions N2235 GCC 4.6
    -
    128 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
    +
    127 // Generalized attributes N2761 GCC 4.8
    +
    128 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
    129 
    130 //
    -
    131 // Alignment support N2341 GCC 4.8
    -
    132 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
    +
    131 // Generalized constant expressions N2235 GCC 4.6
    +
    132 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
    133 
    -
    134 // #define GLM_CXX11_DELEGATING_CONSTRUCTORS
    -
    135 // Delegating constructors N1986 GCC 4.7
    -
    136 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
    +
    134 //
    +
    135 // Alignment support N2341 GCC 4.8
    +
    136 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
    137 
    -
    138 //
    -
    139 // Inheriting constructors N2540 GCC 4.8
    -
    140 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
    +
    138 // #define GLM_CXX11_DELEGATING_CONSTRUCTORS
    +
    139 // Delegating constructors N1986 GCC 4.7
    +
    140 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
    141 
    -
    142 // #define GLM_CXX11_EXPLICIT_CONVERSIONS
    -
    143 // Explicit conversion operators N2437 GCC 4.5
    -
    144 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
    +
    142 //
    +
    143 // Inheriting constructors N2540 GCC 4.8
    +
    144 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
    145 
    -
    146 //
    -
    147 // New character types N2249 GCC 4.4
    -
    148 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html
    +
    146 // #define GLM_CXX11_EXPLICIT_CONVERSIONS
    +
    147 // Explicit conversion operators N2437 GCC 4.5
    +
    148 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
    149 
    150 //
    -
    151 // Unicode string literals N2442 GCC 4.5
    -
    152 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
    +
    151 // New character types N2249 GCC 4.4
    +
    152 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html
    153 
    154 //
    -
    155 // Raw string literals N2442 GCC 4.5
    +
    155 // Unicode string literals N2442 GCC 4.5
    156 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
    157 
    158 //
    -
    159 // Universal character name literals N2170 GCC 4.5
    -
    160 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html
    +
    159 // Raw string literals N2442 GCC 4.5
    +
    160 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
    161 
    -
    162 // #define GLM_CXX11_USER_LITERALS
    -
    163 // User-defined literals N2765 GCC 4.7
    -
    164 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
    +
    162 //
    +
    163 // Universal character name literals N2170 GCC 4.5
    +
    164 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html
    165 
    -
    166 //
    -
    167 // Standard Layout Types N2342 GCC 4.5
    -
    168 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
    +
    166 // #define GLM_CXX11_USER_LITERALS
    +
    167 // User-defined literals N2765 GCC 4.7
    +
    168 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
    169 
    -
    170 // #define GLM_CXX11_DEFAULTED_FUNCTIONS
    -
    171 // #define GLM_CXX11_DELETED_FUNCTIONS
    -
    172 // Defaulted and deleted functions N2346 GCC 4.4
    -
    173 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
    -
    174 
    -
    175 //
    -
    176 // Extended friend declarations N1791 GCC 4.7
    -
    177 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
    +
    170 //
    +
    171 // Standard Layout Types N2342 GCC 4.5
    +
    172 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
    +
    173 
    +
    174 // #define GLM_CXX11_DEFAULTED_FUNCTIONS
    +
    175 // #define GLM_CXX11_DELETED_FUNCTIONS
    +
    176 // Defaulted and deleted functions N2346 GCC 4.4
    +
    177 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
    178 
    179 //
    -
    180 // Extending sizeof N2253 GCC 4.4
    -
    181 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
    +
    180 // Extended friend declarations N1791 GCC 4.7
    +
    181 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
    182 
    -
    183 // #define GLM_CXX11_INLINE_NAMESPACES
    -
    184 // Inline namespaces N2535 GCC 4.4
    -
    185 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
    +
    183 //
    +
    184 // Extending sizeof N2253 GCC 4.4
    +
    185 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
    186 
    -
    187 // #define GLM_CXX11_UNRESTRICTED_UNIONS
    -
    188 // Unrestricted unions N2544 GCC 4.6
    -
    189 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
    +
    187 // #define GLM_CXX11_INLINE_NAMESPACES
    +
    188 // Inline namespaces N2535 GCC 4.4
    +
    189 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
    190 
    -
    191 // #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
    -
    192 // Local and unnamed types as template arguments N2657 GCC 4.5
    -
    193 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
    +
    191 // #define GLM_CXX11_UNRESTRICTED_UNIONS
    +
    192 // Unrestricted unions N2544 GCC 4.6
    +
    193 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
    194 
    -
    195 // #define GLM_CXX11_RANGE_FOR
    -
    196 // Range-based for N2930 GCC 4.6
    -
    197 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
    +
    195 // #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
    +
    196 // Local and unnamed types as template arguments N2657 GCC 4.5
    +
    197 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
    198 
    -
    199 // #define GLM_CXX11_OVERRIDE_CONTROL
    -
    200 // Explicit virtual overrides N2928 N3206 N3272 GCC 4.7
    -
    201 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
    -
    202 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
    -
    203 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
    -
    204 
    -
    205 //
    -
    206 // Minimal support for garbage collection and reachability-based leak detection N2670 No
    -
    207 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
    +
    199 // #define GLM_CXX11_RANGE_FOR
    +
    200 // Range-based for N2930 GCC 4.6
    +
    201 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
    +
    202 
    +
    203 // #define GLM_CXX11_OVERRIDE_CONTROL
    +
    204 // Explicit virtual overrides N2928 N3206 N3272 GCC 4.7
    +
    205 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
    +
    206 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
    +
    207 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
    208 
    -
    209 // #define GLM_CXX11_NOEXCEPT
    -
    210 // Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)
    -
    211 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
    +
    209 //
    +
    210 // Minimal support for garbage collection and reachability-based leak detection N2670 No
    +
    211 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
    212 
    -
    213 //
    -
    214 // Defining move special member functions N3053 GCC 4.6
    -
    215 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
    +
    213 // #define GLM_CXX11_NOEXCEPT
    +
    214 // Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)
    +
    215 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
    216 
    217 //
    -
    218 // Sequence points N2239 Yes
    -
    219 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
    +
    218 // Defining move special member functions N3053 GCC 4.6
    +
    219 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
    220 
    221 //
    -
    222 // Atomic operations N2427 GCC 4.4
    +
    222 // Sequence points N2239 Yes
    223 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
    224 
    225 //
    -
    226 // Strong Compare and Exchange N2748 GCC 4.5
    -
    227 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
    +
    226 // Atomic operations N2427 GCC 4.4
    +
    227 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
    228 
    229 //
    -
    230 // Bidirectional Fences N2752 GCC 4.8
    -
    231 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm
    +
    230 // Strong Compare and Exchange N2748 GCC 4.5
    +
    231 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
    232 
    233 //
    -
    234 // Memory model N2429 GCC 4.8
    -
    235 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm
    +
    234 // Bidirectional Fences N2752 GCC 4.8
    +
    235 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm
    236 
    237 //
    -
    238 // Data-dependency ordering: atomics and memory model N2664 GCC 4.4
    -
    239 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
    +
    238 // Memory model N2429 GCC 4.8
    +
    239 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm
    240 
    241 //
    -
    242 // Propagating exceptions N2179 GCC 4.4
    -
    243 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
    +
    242 // Data-dependency ordering: atomics and memory model N2664 GCC 4.4
    +
    243 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
    244 
    245 //
    -
    246 // Abandoning a process and at_quick_exit N2440 GCC 4.8
    -
    247 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm
    +
    246 // Propagating exceptions N2179 GCC 4.4
    +
    247 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
    248 
    249 //
    -
    250 // Allow atomics use in signal handlers N2547 Yes
    -
    251 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm
    +
    250 // Abandoning a process and at_quick_exit N2440 GCC 4.8
    +
    251 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm
    252 
    253 //
    -
    254 // Thread-local storage N2659 GCC 4.8
    -
    255 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
    +
    254 // Allow atomics use in signal handlers N2547 Yes
    +
    255 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm
    256 
    257 //
    -
    258 // Dynamic initialization and destruction with concurrency N2660 GCC 4.3
    -
    259 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
    +
    258 // Thread-local storage N2659 GCC 4.8
    +
    259 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
    260 
    261 //
    -
    262 // __func__ predefined identifier N2340 GCC 4.3
    -
    263 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
    +
    262 // Dynamic initialization and destruction with concurrency N2660 GCC 4.3
    +
    263 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
    264 
    265 //
    -
    266 // C99 preprocessor N1653 GCC 4.3
    -
    267 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
    +
    266 // __func__ predefined identifier N2340 GCC 4.3
    +
    267 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
    268 
    269 //
    -
    270 // long long N1811 GCC 4.3
    -
    271 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
    +
    270 // C99 preprocessor N1653 GCC 4.3
    +
    271 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
    272 
    273 //
    -
    274 // Extended integral types N1988 Yes
    -
    275 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf
    +
    274 // long long N1811 GCC 4.3
    +
    275 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
    276 
    -
    277 #if(GLM_COMPILER & GLM_COMPILER_GCC)
    -
    278 
    -
    279 # if(GLM_COMPILER >= GLM_COMPILER_GCC43)
    -
    280 # define GLM_CXX11_STATIC_ASSERT
    -
    281 # endif
    +
    277 //
    +
    278 // Extended integral types N1988 Yes
    +
    279 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf
    +
    280 
    +
    281 #if(GLM_COMPILER & GLM_COMPILER_GCC)
    282 
    -
    283 #elif(GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM))
    -
    284 # if(__has_feature(cxx_exceptions))
    -
    285 # define GLM_CXX98_EXCEPTIONS
    -
    286 # endif
    -
    287 
    -
    288 # if(__has_feature(cxx_rtti))
    -
    289 # define GLM_CXX98_RTTI
    +
    283 # if(GLM_COMPILER >= GLM_COMPILER_GCC43)
    +
    284 # define GLM_CXX11_STATIC_ASSERT
    +
    285 # endif
    +
    286 
    +
    287 #elif(GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM))
    +
    288 # if(__has_feature(cxx_exceptions))
    +
    289 # define GLM_CXX98_EXCEPTIONS
    290 # endif
    291 
    -
    292 # if(__has_feature(cxx_access_control_sfinae))
    -
    293 # define GLM_CXX11_ACCESS_CONTROL_SFINAE
    +
    292 # if(__has_feature(cxx_rtti))
    +
    293 # define GLM_CXX98_RTTI
    294 # endif
    295 
    -
    296 # if(__has_feature(cxx_alias_templates))
    -
    297 # define GLM_CXX11_ALIAS_TEMPLATE
    +
    296 # if(__has_feature(cxx_access_control_sfinae))
    +
    297 # define GLM_CXX11_ACCESS_CONTROL_SFINAE
    298 # endif
    299 
    -
    300 # if(__has_feature(cxx_alignas))
    -
    301 # define GLM_CXX11_ALIGNAS
    +
    300 # if(__has_feature(cxx_alias_templates))
    +
    301 # define GLM_CXX11_ALIAS_TEMPLATE
    302 # endif
    303 
    -
    304 # if(__has_feature(cxx_attributes))
    -
    305 # define GLM_CXX11_ATTRIBUTES
    +
    304 # if(__has_feature(cxx_alignas))
    +
    305 # define GLM_CXX11_ALIGNAS
    306 # endif
    307 
    -
    308 # if(__has_feature(cxx_constexpr))
    -
    309 # define GLM_CXX11_CONSTEXPR
    +
    308 # if(__has_feature(cxx_attributes))
    +
    309 # define GLM_CXX11_ATTRIBUTES
    310 # endif
    311 
    -
    312 # if(__has_feature(cxx_decltype))
    -
    313 # define GLM_CXX11_DECLTYPE
    +
    312 # if(__has_feature(cxx_constexpr))
    +
    313 # define GLM_CXX11_CONSTEXPR
    314 # endif
    315 
    -
    316 # if(__has_feature(cxx_default_function_template_args))
    -
    317 # define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
    +
    316 # if(__has_feature(cxx_decltype))
    +
    317 # define GLM_CXX11_DECLTYPE
    318 # endif
    319 
    -
    320 # if(__has_feature(cxx_defaulted_functions))
    -
    321 # define GLM_CXX11_DEFAULTED_FUNCTIONS
    +
    320 # if(__has_feature(cxx_default_function_template_args))
    +
    321 # define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
    322 # endif
    323 
    -
    324 # if(__has_feature(cxx_delegating_constructors))
    -
    325 # define GLM_CXX11_DELEGATING_CONSTRUCTORS
    +
    324 # if(__has_feature(cxx_defaulted_functions))
    +
    325 # define GLM_CXX11_DEFAULTED_FUNCTIONS
    326 # endif
    327 
    -
    328 # if(__has_feature(cxx_deleted_functions))
    -
    329 # define GLM_CXX11_DELETED_FUNCTIONS
    +
    328 # if(__has_feature(cxx_delegating_constructors))
    +
    329 # define GLM_CXX11_DELEGATING_CONSTRUCTORS
    330 # endif
    331 
    -
    332 # if(__has_feature(cxx_explicit_conversions))
    -
    333 # define GLM_CXX11_EXPLICIT_CONVERSIONS
    +
    332 # if(__has_feature(cxx_deleted_functions))
    +
    333 # define GLM_CXX11_DELETED_FUNCTIONS
    334 # endif
    335 
    -
    336 # if(__has_feature(cxx_generalized_initializers))
    -
    337 # define GLM_CXX11_GENERALIZED_INITIALIZERS
    +
    336 # if(__has_feature(cxx_explicit_conversions))
    +
    337 # define GLM_CXX11_EXPLICIT_CONVERSIONS
    338 # endif
    339 
    -
    340 # if(__has_feature(cxx_implicit_moves))
    -
    341 # define GLM_CXX11_IMPLICIT_MOVES
    +
    340 # if(__has_feature(cxx_generalized_initializers))
    +
    341 # define GLM_CXX11_GENERALIZED_INITIALIZERS
    342 # endif
    343 
    -
    344 # if(__has_feature(cxx_inheriting_constructors))
    -
    345 # define GLM_CXX11_INHERITING_CONSTRUCTORS
    +
    344 # if(__has_feature(cxx_implicit_moves))
    +
    345 # define GLM_CXX11_IMPLICIT_MOVES
    346 # endif
    347 
    -
    348 # if(__has_feature(cxx_inline_namespaces))
    -
    349 # define GLM_CXX11_INLINE_NAMESPACES
    +
    348 # if(__has_feature(cxx_inheriting_constructors))
    +
    349 # define GLM_CXX11_INHERITING_CONSTRUCTORS
    350 # endif
    351 
    -
    352 # if(__has_feature(cxx_lambdas))
    -
    353 # define GLM_CXX11_LAMBDAS
    +
    352 # if(__has_feature(cxx_inline_namespaces))
    +
    353 # define GLM_CXX11_INLINE_NAMESPACES
    354 # endif
    355 
    -
    356 # if(__has_feature(cxx_local_type_template_args))
    -
    357 # define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
    +
    356 # if(__has_feature(cxx_lambdas))
    +
    357 # define GLM_CXX11_LAMBDAS
    358 # endif
    359 
    -
    360 # if(__has_feature(cxx_noexcept))
    -
    361 # define GLM_CXX11_NOEXCEPT
    +
    360 # if(__has_feature(cxx_local_type_template_args))
    +
    361 # define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
    362 # endif
    363 
    -
    364 # if(__has_feature(cxx_nonstatic_member_init))
    -
    365 # define GLM_CXX11_NONSTATIC_MEMBER_INIT
    +
    364 # if(__has_feature(cxx_noexcept))
    +
    365 # define GLM_CXX11_NOEXCEPT
    366 # endif
    367 
    -
    368 # if(__has_feature(cxx_nullptr))
    -
    369 # define GLM_CXX11_NULLPTR
    +
    368 # if(__has_feature(cxx_nonstatic_member_init))
    +
    369 # define GLM_CXX11_NONSTATIC_MEMBER_INIT
    370 # endif
    371 
    -
    372 # if(__has_feature(cxx_override_control))
    -
    373 # define GLM_CXX11_OVERRIDE_CONTROL
    +
    372 # if(__has_feature(cxx_nullptr))
    +
    373 # define GLM_CXX11_NULLPTR
    374 # endif
    375 
    -
    376 # if(__has_feature(cxx_reference_qualified_functions))
    -
    377 # define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
    +
    376 # if(__has_feature(cxx_override_control))
    +
    377 # define GLM_CXX11_OVERRIDE_CONTROL
    378 # endif
    379 
    -
    380 # if(__has_feature(cxx_range_for))
    -
    381 # define GLM_CXX11_RANGE_FOR
    +
    380 # if(__has_feature(cxx_reference_qualified_functions))
    +
    381 # define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
    382 # endif
    383 
    -
    384 # if(__has_feature(cxx_raw_string_literals))
    -
    385 # define GLM_CXX11_RAW_STRING_LITERALS
    +
    384 # if(__has_feature(cxx_range_for))
    +
    385 # define GLM_CXX11_RANGE_FOR
    386 # endif
    387 
    -
    388 # if(__has_feature(cxx_rvalue_references))
    -
    389 # define GLM_CXX11_RVALUE_REFERENCES
    +
    388 # if(__has_feature(cxx_raw_string_literals))
    +
    389 # define GLM_CXX11_RAW_STRING_LITERALS
    390 # endif
    391 
    -
    392 # if(__has_feature(cxx_static_assert))
    -
    393 # define GLM_CXX11_STATIC_ASSERT
    +
    392 # if(__has_feature(cxx_rvalue_references))
    +
    393 # define GLM_CXX11_RVALUE_REFERENCES
    394 # endif
    395 
    -
    396 # if(__has_feature(cxx_auto_type))
    -
    397 # define GLM_CXX11_AUTO_TYPE
    +
    396 # if(__has_feature(cxx_static_assert))
    +
    397 # define GLM_CXX11_STATIC_ASSERT
    398 # endif
    399 
    -
    400 # if(__has_feature(cxx_strong_enums))
    -
    401 # define GLM_CXX11_STRONG_ENUMS
    +
    400 # if(__has_feature(cxx_auto_type))
    +
    401 # define GLM_CXX11_AUTO_TYPE
    402 # endif
    403 
    -
    404 # if(__has_feature(cxx_trailing_return))
    -
    405 # define GLM_CXX11_TRAILING_RETURN
    +
    404 # if(__has_feature(cxx_strong_enums))
    +
    405 # define GLM_CXX11_STRONG_ENUMS
    406 # endif
    407 
    -
    408 # if(__has_feature(cxx_unicode_literals))
    -
    409 # define GLM_CXX11_UNICODE_LITERALS
    +
    408 # if(__has_feature(cxx_trailing_return))
    +
    409 # define GLM_CXX11_TRAILING_RETURN
    410 # endif
    411 
    -
    412 # if(__has_feature(cxx_unrestricted_unions))
    -
    413 # define GLM_CXX11_UNRESTRICTED_UNIONS
    +
    412 # if(__has_feature(cxx_unicode_literals))
    +
    413 # define GLM_CXX11_UNICODE_LITERALS
    414 # endif
    415 
    -
    416 # if(__has_feature(cxx_user_literals))
    -
    417 # define GLM_CXX11_USER_LITERALS
    +
    416 # if(__has_feature(cxx_unrestricted_unions))
    +
    417 # define GLM_CXX11_UNRESTRICTED_UNIONS
    418 # endif
    419 
    -
    420 # if(__has_feature(cxx_variadic_templates))
    -
    421 # define GLM_CXX11_VARIADIC_TEMPLATES
    +
    420 # if(__has_feature(cxx_user_literals))
    +
    421 # define GLM_CXX11_USER_LITERALS
    422 # endif
    423 
    -
    424 #endif//(GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM))
    +
    424 # if(__has_feature(cxx_variadic_templates))
    +
    425 # define GLM_CXX11_VARIADIC_TEMPLATES
    +
    426 # endif
    +
    427 
    +
    428 #endif//(GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM))

    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

    diff --git a/doc/api/a00007_source.html b/doc/api/a00007_source.html index 49da5a14..1bbdfad9 100644 --- a/doc/api/a00007_source.html +++ b/doc/api/a00007_source.html @@ -50,152 +50,152 @@
    Go to the documentation of this file.
    1 
    -
    38 #pragma once
    -
    39 
    -
    40 // Dependency:
    -
    41 #include "../glm.hpp"
    -
    42 
    -
    43 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    -
    44 # pragma message("GLM: GLM_GTX_associated_min_max extension included")
    -
    45 #endif
    +
    42 #pragma once
    +
    43 
    +
    44 // Dependency:
    +
    45 #include "../glm.hpp"
    46 
    -
    47 namespace glm
    -
    48 {
    -
    51 
    -
    54  template<typename T, typename U, precision P>
    -
    55  GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b);
    -
    56 
    -
    59  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    60  GLM_FUNC_DECL tvec2<U, P> associatedMin(
    -
    61  vecType<T, P> const & x, vecType<U, P> const & a,
    -
    62  vecType<T, P> const & y, vecType<U, P> const & b);
    -
    63 
    -
    66  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    67  GLM_FUNC_DECL vecType<U, P> associatedMin(
    -
    68  T x, const vecType<U, P>& a,
    -
    69  T y, const vecType<U, P>& b);
    -
    70 
    -
    73  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    74  GLM_FUNC_DECL vecType<U, P> associatedMin(
    -
    75  vecType<T, P> const & x, U a,
    -
    76  vecType<T, P> const & y, U b);
    -
    77 
    -
    80  template<typename T, typename U>
    -
    81  GLM_FUNC_DECL U associatedMin(
    -
    82  T x, U a,
    -
    83  T y, U b,
    -
    84  T z, U c);
    -
    85 
    -
    88  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    89  GLM_FUNC_DECL vecType<U, P> associatedMin(
    -
    90  vecType<T, P> const & x, vecType<U, P> const & a,
    -
    91  vecType<T, P> const & y, vecType<U, P> const & b,
    -
    92  vecType<T, P> const & z, vecType<U, P> const & c);
    -
    93 
    -
    96  template<typename T, typename U>
    -
    97  GLM_FUNC_DECL U associatedMin(
    -
    98  T x, U a,
    -
    99  T y, U b,
    -
    100  T z, U c,
    -
    101  T w, U d);
    -
    102 
    -
    105  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    106  GLM_FUNC_DECL vecType<U, P> associatedMin(
    -
    107  vecType<T, P> const & x, vecType<U, P> const & a,
    -
    108  vecType<T, P> const & y, vecType<U, P> const & b,
    -
    109  vecType<T, P> const & z, vecType<U, P> const & c,
    -
    110  vecType<T, P> const & w, vecType<U, P> const & d);
    -
    111 
    -
    114  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    115  GLM_FUNC_DECL vecType<U, P> associatedMin(
    -
    116  T x, vecType<U, P> const & a,
    -
    117  T y, vecType<U, P> const & b,
    -
    118  T z, vecType<U, P> const & c,
    -
    119  T w, vecType<U, P> const & d);
    -
    120 
    -
    123  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    124  GLM_FUNC_DECL vecType<U, P> associatedMin(
    -
    125  vecType<T, P> const & x, U a,
    -
    126  vecType<T, P> const & y, U b,
    -
    127  vecType<T, P> const & z, U c,
    -
    128  vecType<T, P> const & w, U d);
    -
    129 
    -
    132  template<typename T, typename U>
    -
    133  GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b);
    -
    134 
    -
    137  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    138  GLM_FUNC_DECL tvec2<U, P> associatedMax(
    -
    139  vecType<T, P> const & x, vecType<U, P> const & a,
    -
    140  vecType<T, P> const & y, vecType<U, P> const & b);
    -
    141 
    -
    144  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    145  GLM_FUNC_DECL vecType<T, P> associatedMax(
    -
    146  T x, vecType<U, P> const & a,
    -
    147  T y, vecType<U, P> const & b);
    -
    148 
    -
    151  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    152  GLM_FUNC_DECL vecType<U, P> associatedMax(
    -
    153  vecType<T, P> const & x, U a,
    -
    154  vecType<T, P> const & y, U b);
    -
    155 
    -
    158  template<typename T, typename U>
    -
    159  GLM_FUNC_DECL U associatedMax(
    -
    160  T x, U a,
    -
    161  T y, U b,
    -
    162  T z, U c);
    -
    163 
    -
    166  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    167  GLM_FUNC_DECL vecType<U, P> associatedMax(
    -
    168  vecType<T, P> const & x, vecType<U, P> const & a,
    -
    169  vecType<T, P> const & y, vecType<U, P> const & b,
    -
    170  vecType<T, P> const & z, vecType<U, P> const & c);
    -
    171 
    -
    174  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    175  GLM_FUNC_DECL vecType<T, P> associatedMax(
    -
    176  T x, vecType<U, P> const & a,
    -
    177  T y, vecType<U, P> const & b,
    -
    178  T z, vecType<U, P> const & c);
    -
    179 
    -
    182  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    183  GLM_FUNC_DECL vecType<U, P> associatedMax(
    -
    184  vecType<T, P> const & x, U a,
    -
    185  vecType<T, P> const & y, U b,
    -
    186  vecType<T, P> const & z, U c);
    -
    187 
    -
    190  template<typename T, typename U>
    -
    191  GLM_FUNC_DECL U associatedMax(
    -
    192  T x, U a,
    -
    193  T y, U b,
    -
    194  T z, U c,
    -
    195  T w, U d);
    -
    196 
    -
    199  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    200  GLM_FUNC_DECL vecType<U, P> associatedMax(
    -
    201  vecType<T, P> const & x, vecType<U, P> const & a,
    -
    202  vecType<T, P> const & y, vecType<U, P> const & b,
    -
    203  vecType<T, P> const & z, vecType<U, P> const & c,
    -
    204  vecType<T, P> const & w, vecType<U, P> const & d);
    -
    205 
    -
    208  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    209  GLM_FUNC_DECL vecType<U, P> associatedMax(
    -
    210  T x, vecType<U, P> const & a,
    -
    211  T y, vecType<U, P> const & b,
    -
    212  T z, vecType<U, P> const & c,
    -
    213  T w, vecType<U, P> const & d);
    -
    214 
    -
    217  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    -
    218  GLM_FUNC_DECL vecType<U, P> associatedMax(
    -
    219  vecType<T, P> const & x, U a,
    -
    220  vecType<T, P> const & y, U b,
    -
    221  vecType<T, P> const & z, U c,
    -
    222  vecType<T, P> const & w, U d);
    -
    223 
    -
    225 } //namespace glm
    -
    226 
    -
    227 #include "associated_min_max.inl"
    -
    GLM_FUNC_DECL vecType< U, P > associatedMax(vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
    Maximum comparison between 4 variables and returns 4 associated variable values.
    -
    GLM_FUNC_DECL vecType< U, P > associatedMin(vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
    Minimum comparison between 4 variables and returns 4 associated variable values.
    -
    Definition: _noise.hpp:31
    +
    47 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
    +
    48 # pragma message("GLM: GLM_GTX_associated_min_max extension included")
    +
    49 #endif
    +
    50 
    +
    51 namespace glm
    +
    52 {
    +
    55 
    +
    58  template<typename T, typename U, precision P>
    +
    59  GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b);
    +
    60 
    +
    63  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    64  GLM_FUNC_DECL tvec2<U, P> associatedMin(
    +
    65  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    66  vecType<T, P> const & y, vecType<U, P> const & b);
    +
    67 
    +
    70  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    71  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    72  T x, const vecType<U, P>& a,
    +
    73  T y, const vecType<U, P>& b);
    +
    74 
    +
    77  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    78  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    79  vecType<T, P> const & x, U a,
    +
    80  vecType<T, P> const & y, U b);
    +
    81 
    +
    84  template<typename T, typename U>
    +
    85  GLM_FUNC_DECL U associatedMin(
    +
    86  T x, U a,
    +
    87  T y, U b,
    +
    88  T z, U c);
    +
    89 
    +
    92  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    93  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    94  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    95  vecType<T, P> const & y, vecType<U, P> const & b,
    +
    96  vecType<T, P> const & z, vecType<U, P> const & c);
    +
    97 
    +
    100  template<typename T, typename U>
    +
    101  GLM_FUNC_DECL U associatedMin(
    +
    102  T x, U a,
    +
    103  T y, U b,
    +
    104  T z, U c,
    +
    105  T w, U d);
    +
    106 
    +
    109  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    110  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    111  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    112  vecType<T, P> const & y, vecType<U, P> const & b,
    +
    113  vecType<T, P> const & z, vecType<U, P> const & c,
    +
    114  vecType<T, P> const & w, vecType<U, P> const & d);
    +
    115 
    +
    118  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    119  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    120  T x, vecType<U, P> const & a,
    +
    121  T y, vecType<U, P> const & b,
    +
    122  T z, vecType<U, P> const & c,
    +
    123  T w, vecType<U, P> const & d);
    +
    124 
    +
    127  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    128  GLM_FUNC_DECL vecType<U, P> associatedMin(
    +
    129  vecType<T, P> const & x, U a,
    +
    130  vecType<T, P> const & y, U b,
    +
    131  vecType<T, P> const & z, U c,
    +
    132  vecType<T, P> const & w, U d);
    +
    133 
    +
    136  template<typename T, typename U>
    +
    137  GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b);
    +
    138 
    +
    141  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    142  GLM_FUNC_DECL tvec2<U, P> associatedMax(
    +
    143  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    144  vecType<T, P> const & y, vecType<U, P> const & b);
    +
    145 
    +
    148  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    149  GLM_FUNC_DECL vecType<T, P> associatedMax(
    +
    150  T x, vecType<U, P> const & a,
    +
    151  T y, vecType<U, P> const & b);
    +
    152 
    +
    155  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    156  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    157  vecType<T, P> const & x, U a,
    +
    158  vecType<T, P> const & y, U b);
    +
    159 
    +
    162  template<typename T, typename U>
    +
    163  GLM_FUNC_DECL U associatedMax(
    +
    164  T x, U a,
    +
    165  T y, U b,
    +
    166  T z, U c);
    +
    167 
    +
    170  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    171  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    172  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    173  vecType<T, P> const & y, vecType<U, P> const & b,
    +
    174  vecType<T, P> const & z, vecType<U, P> const & c);
    +
    175 
    +
    178  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    179  GLM_FUNC_DECL vecType<T, P> associatedMax(
    +
    180  T x, vecType<U, P> const & a,
    +
    181  T y, vecType<U, P> const & b,
    +
    182  T z, vecType<U, P> const & c);
    +
    183 
    +
    186  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    187  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    188  vecType<T, P> const & x, U a,
    +
    189  vecType<T, P> const & y, U b,
    +
    190  vecType<T, P> const & z, U c);
    +
    191 
    +
    194  template<typename T, typename U>
    +
    195  GLM_FUNC_DECL U associatedMax(
    +
    196  T x, U a,
    +
    197  T y, U b,
    +
    198  T z, U c,
    +
    199  T w, U d);
    +
    200 
    +
    203  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    204  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    205  vecType<T, P> const & x, vecType<U, P> const & a,
    +
    206  vecType<T, P> const & y, vecType<U, P> const & b,
    +
    207  vecType<T, P> const & z, vecType<U, P> const & c,
    +
    208  vecType<T, P> const & w, vecType<U, P> const & d);
    +
    209 
    +
    212  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    213  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    214  T x, vecType<U, P> const & a,
    +
    215  T y, vecType<U, P> const & b,
    +
    216  T z, vecType<U, P> const & c,
    +
    217  T w, vecType<U, P> const & d);
    +
    218 
    +
    221  template<typename T, typename U, precision P, template <typename, precision> class vecType>
    +
    222  GLM_FUNC_DECL vecType<U, P> associatedMax(
    +
    223  vecType<T, P> const & x, U a,
    +
    224  vecType<T, P> const & y, U b,
    +
    225  vecType<T, P> const & z, U c,
    +
    226  vecType<T, P> const & w, U d);
    +
    227 
    +
    229 } //namespace glm
    +
    230 
    +
    231 #include "associated_min_max.inl"
    +
    GLM_FUNC_DECL vecType< U, P > associatedMin(vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
    Minimum comparison between 4 variables and returns 4 associated variable values.
    +
    Definition: _noise.hpp:39
    +
    GLM_FUNC_DECL vecType< U, P > associatedMax(vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)
    Maximum comparison between 4 variables and returns 4 associated variable values.

    _c%C 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