From 74c6854fd8dcbaee736ac0421805ff1e03c4a1e2 Mon Sep 17 00:00:00 2001 From: iamn1ck Date: Sun, 19 Feb 2017 07:00:34 -0600 Subject: -quadtree and opengl rendering are now in the master branch ! -using sdl_rect for location and size ended up being not so great due to it not having floats, so we reverted back to using location -much, much refractoring is now needed --- inc/glm/gtx/associated_min_max.inl | 384 +++++++++++++++++++++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 inc/glm/gtx/associated_min_max.inl (limited to 'inc/glm/gtx/associated_min_max.inl') diff --git a/inc/glm/gtx/associated_min_max.inl b/inc/glm/gtx/associated_min_max.inl new file mode 100644 index 0000000..0773a21 --- /dev/null +++ b/inc/glm/gtx/associated_min_max.inl @@ -0,0 +1,384 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2015 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject 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{ + +// Min comparison between 2 variables +template +GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b) +{ + return x < y ? a : b; +} + +template class vecType> +GLM_FUNC_QUALIFIER tvec2 associatedMin +( + vecType const & x, vecType const & a, + vecType const & y, vecType const & b +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x[i] < y[i] ? a[i] : b[i]; + return Result; +} + +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMin +( + T x, const vecType& a, + T y, const vecType& b +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x < y ? a[i] : b[i]; + return Result; +} + +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMin +( + vecType const & x, U a, + vecType const & y, U b +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x[i] < y[i] ? a : b; + return Result; +} + +// Min comparison between 3 variables +template +GLM_FUNC_QUALIFIER U associatedMin +( + T x, U a, + T y, U b, + T z, U c +) +{ + U Result = x < y ? (x < z ? a : c) : (y < z ? b : c); + return Result; +} + +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMin +( + vecType const & x, vecType const & a, + vecType const & y, vecType const & b, + vecType const & z, vecType const & c +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]); + return Result; +} + +// Min comparison between 4 variables +template +GLM_FUNC_QUALIFIER U associatedMin +( + T x, U a, + T y, U b, + T z, U c, + T w, U d +) +{ + T Test1 = min(x, y); + T Test2 = min(z, w);; + U Result1 = x < y ? a : b; + U Result2 = z < w ? c : d; + U Result = Test1 < Test2 ? Result1 : Result2; + return Result; +} + +// Min comparison between 4 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMin +( + vecType const & x, vecType const & a, + vecType const & y, vecType const & b, + vecType const & z, vecType const & c, + vecType const & w, vecType const & d +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + { + T Test1 = min(x[i], y[i]); + T Test2 = min(z[i], w[i]); + U Result1 = x[i] < y[i] ? a[i] : b[i]; + U Result2 = z[i] < w[i] ? c[i] : d[i]; + Result[i] = Test1 < Test2 ? Result1 : Result2; + } + return Result; +} + +// Min comparison between 4 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMin +( + T x, vecType const & a, + T y, vecType const & b, + T z, vecType const & c, + T w, vecType const & d +) +{ + T Test1 = min(x, y); + T Test2 = min(z, w); + + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + { + U Result1 = x < y ? a[i] : b[i]; + U Result2 = z < w ? c[i] : d[i]; + Result[i] = Test1 < Test2 ? Result1 : Result2; + } + return Result; +} + +// Min comparison between 4 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMin +( + vecType const & x, U a, + vecType const & y, U b, + vecType const & z, U c, + vecType const & w, U d +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + { + T Test1 = min(x[i], y[i]); + T Test2 = min(z[i], w[i]);; + U Result1 = x[i] < y[i] ? a : b; + U Result2 = z[i] < w[i] ? c : d; + Result[i] = Test1 < Test2 ? Result1 : Result2; + } + return Result; +} + +// Max comparison between 2 variables +template +GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b) +{ + return x > y ? a : b; +} + +// Max comparison between 2 variables +template class vecType> +GLM_FUNC_QUALIFIER tvec2 associatedMax +( + vecType const & x, vecType const & a, + vecType const & y, vecType const & b +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x[i] > y[i] ? a[i] : b[i]; + return Result; +} + +// Max comparison between 2 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMax +( + T x, vecType const & a, + T y, vecType const & b +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x > y ? a[i] : b[i]; + return Result; +} + +// Max comparison between 2 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMax +( + vecType const & x, U a, + vecType const & y, U b +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x[i] > y[i] ? a : b; + return Result; +} + +// Max comparison between 3 variables +template +GLM_FUNC_QUALIFIER U associatedMax +( + T x, U a, + T y, U b, + T z, U c +) +{ + U Result = x > y ? (x > z ? a : c) : (y > z ? b : c); + return Result; +} + +// Max comparison between 3 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMax +( + vecType const & x, vecType const & a, + vecType const & y, vecType const & b, + vecType const & z, vecType const & c +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]); + return Result; +} + +// Max comparison between 3 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMax +( + T x, vecType const & a, + T y, vecType const & b, + T z, vecType const & c +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); + return Result; +} + +// Max comparison between 3 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMax +( + vecType const & x, U a, + vecType const & y, U b, + vecType const & z, U c +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); + return Result; +} + +// Max comparison between 4 variables +template +GLM_FUNC_QUALIFIER U associatedMax +( + T x, U a, + T y, U b, + T z, U c, + T w, U d +) +{ + T Test1 = max(x, y); + T Test2 = max(z, w);; + U Result1 = x > y ? a : b; + U Result2 = z > w ? c : d; + U Result = Test1 > Test2 ? Result1 : Result2; + return Result; +} + +// Max comparison between 4 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMax +( + vecType const & x, vecType const & a, + vecType const & y, vecType const & b, + vecType const & z, vecType const & c, + vecType const & w, vecType const & d +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + { + T Test1 = max(x[i], y[i]); + T Test2 = max(z[i], w[i]); + U Result1 = x[i] > y[i] ? a[i] : b[i]; + U Result2 = z[i] > w[i] ? c[i] : d[i]; + Result[i] = Test1 > Test2 ? Result1 : Result2; + } + return Result; +} + +// Max comparison between 4 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMax +( + T x, vecType const & a, + T y, vecType const & b, + T z, vecType const & c, + T w, vecType const & d +) +{ + T Test1 = max(x, y); + T Test2 = max(z, w); + + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + { + U Result1 = x > y ? a[i] : b[i]; + U Result2 = z > w ? c[i] : d[i]; + Result[i] = Test1 > Test2 ? Result1 : Result2; + } + return Result; +} + +// Max comparison between 4 variables +template class vecType> +GLM_FUNC_QUALIFIER vecType associatedMax +( + vecType const & x, U a, + vecType const & y, U b, + vecType const & z, U c, + vecType const & w, U d +) +{ + vecType Result(uninitialize); + for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i) + { + T Test1 = max(x[i], y[i]); + T Test2 = max(z[i], w[i]);; + U Result1 = x[i] > y[i] ? a : b; + U Result2 = z[i] > w[i] ? c : d; + Result[i] = Test1 > Test2 ? Result1 : Result2; + } + return Result; +} +}//namespace glm -- cgit v1.2.3